sql-server - 无法在 docker 容器上恢复 sql server 数据库

标签 sql-server linux docker database-restore

我正在尝试创建一个 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.).

最佳答案

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

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

关于sql-server - 无法在 docker 容器上恢复 sql server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50914578/

相关文章:

linux - Ubuntu BASH 脚本后台作业隐藏 Windows

linux - 如何在制作 GCC 4.9.1 时解决 "no usable dependency style found"错误

docker - 从派生的 docker 镜像在特定/home 文件夹中创建文件夹不起作用

java - Travis yml运行Selenium Java Gradle Docker构建

amazon-web-services - Docker 挂载 S3 容器

sql - 在ORDER BY中使用SQL串联

javascript - 将 JavaScript 函数的值插入 SQL Server 数据库

php - Ubuntu Server 14.04 LAMP更改php目录

sql-server - 更改存储过程是否会使缓存的执行计划过期?

sql-server - SQL Server SP - 传递 "IN"数组列表的参数?