首页 > 解决方案 > 在 docker 容器上恢复 sql server 数据库时遇到问题

问题描述

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

目前我的 dockerfile 看起来像这样

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 server启动之前运行,我找不到如何延迟它直到可以连接

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-serverlinuxdockerdatabase-restore

解决方案


我无法帮助您解决 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'

另请参阅使用备份和恢复将 SQL Server 数据库从 Windows 迁移到 Linux

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

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

这将返回一个结果集,该结果集表示已备份数据库的内容和组织。 查看RESTORE FILELISTONLY更多


推荐阅读