2021年12月28日 作者 zeroheart

docker sqlserver恢复备份

1.docker exec -it mssql mkdir /var/opt/mssql/backup

2.docker cp xx.bak mssql:/var/opt/mssql/backup

3.在容器中运行 sqlcmd,列出备份中的逻辑文件名和路径。 这是通过“RESTORE FILELISTONLY”Transact-SQL 语句实现的。

docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost \
-U SA -P ‘Pass@w0rd’ \
-Q ‘RESTORE FILELISTONLY FROM DISK = “/var/opt/mssql/backup/myexcel_top20.bak”‘ \
| tr -s ‘ ‘ | cut -d ‘ ‘ -f 1-2

返回
myexcel_top20 C:\Program
myexcel_top20_log C:\Program

4.调用 RESTORE DATABASE 命令,还原容器中的数据库。 为上一步中的每个文件指定新路径。

docker exec -it mssql /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P ‘Pass@w0rd’ \
-Q ‘RESTORE DATABASE myexcel FROM DISK = “/var/opt/mssql/backup/myexcel_top20.bak” WITH MOVE “myexcel_top20” TO “/var/opt/mssql/data/myexcel_top20.mdf”, MOVE “myexcel_top20_log” TO “/var/opt/mssql/data/myexcel_top20_log.ldf”‘

这一步报错了。。没搞定

Msg 3132, Level 16, State 1, Server mssql, Line 1

The media set has 2 media families but only 1 are provided. All members must be provided.

Msg 3013, Level 16, State 1, Server mssql, Line 1

RESTORE DATABASE is terminating abnormally.

5.还可以通过下载一个工具恢复,尝试一下SSMS

感觉应该是文件的问题吧

https://download.microsoft.com/download/d/9/7/d9789173-aaa7-4f5b-91b0-a2a01f4ba3a6/SSMS-Setup-CHS.exe

参考:(23条消息) Docker环境下SqlServer数据库使用bak文件还原_gzt19881123的专栏-CSDN博客_docker sqlserver 还原