无法在 docker 容器上恢复 sql 服务器数据库

Trouble restoring sql server DB on docker container

我正在尝试创建一个 docker 容器以从 docker 用于 windows 作为 sql 服务器数据库的测试实例。我有一个备份文件 MyDb.bak,我想在容器创建过程中将其恢复

目前我的 docker 文件看起来像这样

FROM microsoft/mssql-server-linux:latest
ENV ACCEPT_EULA="Y"
ENV SA_PASSWORD="<my_sa_password>"
COPY ./MyDb.bak /var/opt/mssql/data/MyDb.bak
ENTRYPOINT /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P <my_sa_password> -Q "RESTORE DATABASE [MyDb] FROM DISK = N'/var/opt/mssql/data/MyDb.bak'"

docker 问题:sql 服务器启动前的入口点命令 运行s,我找不到如何将其延迟到连接可以

sql 问题:当我 运行 手动恢复脚本时无法恢复数据库,因为它找不到任何 mdf 文件

Msg 5133, Level 16, State 1, Server c15ec76da554, Line 1
Directory lookup for the file "C:\SQLData\MyDb.mdf" failed with the operating system error 2(The system cannot find the file specified.).

sql-server 内的数据库设置中,应列出三个字段 DataLogBackup,确保路径正确且有效。

我无法帮助您解决 docker 问题,但是此 SQL 命令不完整:

RESTORE DATABASE [MyDb] FROM DISK = N'/var/opt/mssql/data/MyDb.bak'

您需要指定数据库恢复后的位置以及数据库日志文件的位置。如果您不提供,那么数据库将尝试将数据库文件和日志还原到它在原始服务器上的相同位置。

您的命令应如下所示:

RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'

另见 Migrate a SQL Server database from Windows to Linux using backup and restore

如果想查看备份文件中存储的逻辑名和路径,可以运行:

RESTORE FILELISTONLY FROM DISK = N'/var/opt/mssql/data/MyDb.bak'

这将 return 一个表示已备份数据库的内容和组织的结果集。 See RESTORE FILELISTONLY for more.

Linux 版本不适用于像 C:\SQLData\MyDb.mdf 这样的 Windows 风格的文件路径,但需要像 /SQLData/MyDb.mdf 这样的东西,所以你需要使用 WITH MOVE 选项来执行恢复,因为有人已经在评论中写过。 此外,由于您尝试恢复的文件来自 Windows MS-SQL 服务器系统,请仔细检查 windows 服务器上的 运行 版本是否为 2014 或更高版本。由于最近开发了 Linux 引擎,因此在从遗留 windows MS-SQL 版本加载数据时出现问题。 一旦我必须首先使用 Developer Edition 在 Windows Ms-SQL Server 2014 上上传 .bak,然后我就能够制作一个可以加载到 Linux 上的备份盒子.