sql-server - 在 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.).
解决方案
我无法帮助您解决 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
更多。
推荐阅读
- ios - UITableView 分隔符出现在单元格中间
- document - 如何使用java在open office中生成word文档?
- typescript - TypeScript:如何在方法内“更改”方法参数的类型?
- android - 有没有办法连续运行服务?
- python - 将时间分组为时间间隔
- laravel - curl_setopt_array():不能将输出类型的流表示为 STDIO 文件*
- php - 退出 PHP 时出现页面重定向问题
- javascript - 纯 javascript 的开玩笑导入会导致意外的令牌
- android - 后台定位服务
- java - 调用 pack() 后如何在面板上画一条线?