【问题标题】:Backup SQL Server 2019 in a Docker Linux container fails在 Docker Linux 容器中备份 SQL Server 2019 失败
【发布时间】:2020-07-16 13:46:58
【问题描述】:

尝试了多种方式进行备份。

尝试在容器中将 SA 添加为 root 用户

Azure 数据工作室

BACKUP DATABASE [PrestigeCars] TO  DISK = N'/var/opt/mssql/backup//PrestigeCars-202044-8-4-52.bak' WITH NOFORMAT, NOINIT,  NAME = N'PrestigeCars--2020-04-04T12:04:52', NOSKIP, REWIND, NOUNLOAD,  STATS = 10

消息 3201,第 16 层,状态 1,第 1 行
无法打开备份设备“/var/opt/mssql/backup//PrestigeCars-202044-8-4-52.bak”。操作系统错误2(系统找不到指定的文件。)。
消息 3013,第 16 级,状态 1,第 1 行
BACKUP DATABASE 异常终止。
总执行时间:00:00:00.217

SSMS

backup database [PrestigeCars]
to  disk = N'/var/opt/mssql/backup//PrestigeCars-202044-6-42-9.bak'
with noformat
    , noinit
    , name = N'PrestigeCars--20200404'
    , noskip
    , rewind
    , nounload
    , compression
    , stats = 10;

SQLCMD

sqlcmd -S localhost,12001 -U SA -Q "BACKUP DATABASE [PrestigeCars] TO DISK = N'/var/opt/mssql/backup/CSCI331-Backup/PrestigeCars-202044-6-42-9.bak' WITH NOFORMAT, NOINIT, NAME = 'PrestigeCars-20200404', SKIP, NOREWIND, NOUNLOAD, STATS = 10"   

【问题讨论】:

  • 错误告诉你问题所在。查看您的文件路径:backup//PrestigeCars 注意 两个 / 字符。

标签: sql-server docker ssms sqlcmd azure-data-studio


【解决方案1】:

标准 SQL Server Linux 映像中不存在目录 /var/opt/mssql/backup。您需要首先通过在容器中运行以下命令来创建目录:

mkdir /var/opt/mssql/backup

另外,正如@Larnu 指出的那样,路径中有一个额外的反斜杠。备份命令应该是:

BACKUP DATABASE [PrestigeCars] TO  DISK = N'/var/opt/mssql/backup/PrestigeCars-202044-8-4-52.bak' WITH NOFORMAT, NOINIT,  NAME = N'PrestigeCars--2020-04-04T12:04:52', NOSKIP, REWIND, NOUNLOAD,  STATS = 10;

【讨论】:

  • @Larnu,默认用户是mssqldocker exec -it sql-container-name bash。所以mkdir命令创建了drwxr-xr-x的目录,和其他sql目录一样。
  • 公平地说,我个人没有将docker 用于 SQL Server,只是实际的 Linux 安装和 LXD,所以不确定以及为什么我发表评论。
  • 首先,该目​​录确实存在。它是使用 docker 副本创建的
  • @PeterH,删除多余的斜线后备份是否有效?
【解决方案2】:

感谢所有帮助过的人。问题不是缺少文件夹,而是权限问题。

这些文件夹最初是在将备份复制到容器时创建的:

docker cp /Users/YourUsername/CSCI331-Backup/TSQLV4.bak linux-sql2k19:/var/opt/mssql/backup/

*权限为 4 drwxr-xr-**x 3 root root 4096 Jan 31 19:06 backup***

我尝试了各种 Ubuntu create sudo adduser 但没有一个命令 sudo 或 apt-get 起作用。 (https://help.ubuntu.com/community/FilePermissions)

我发现此命令以 root 用户身份连接

docker exec -it -u root 874 bash

cd /var/opt/mssql/backup/

cd ..

chmod 777 备份

cd ..

chmod 777 mssql

cd ..

chmod 777 选择

cd ..

chmod 777 变量

关闭容器。我在 SSMS 和 Azure Data Studio 中备份了数据库。双倍耶!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2021-03-13
    • 1970-01-01
    • 2021-10-27
    • 2020-09-09
    相关资源
    最近更新 更多