Vin*_*ent 10 linux sql-server database-backups docker
我需要在Linux Docker实例上恢复大型SQL Server数据库(https://hub.docker.com/r/microsoft/mssql-server-linux/)
我正在将.bak文件移动到docker并在mssql shell中执行此命令:
RESTORE DATABASE gIMM_Brag FROM DISK = '/var/opt/mssql/backup/BackupFull8H_gIMM.bak' WITH MOVE '[gIMM].Data' T'/var/opt/mssql/data/gIMM.mdf', MOVE '[gIMM].Log' TO '/var/opt/mssql/data/gIMM.ldf', MOVE 'TraceabilityData' TO '/var/opt/mssql/data/gIMM.TraceData.mdf', MOVE 'TraceabilityIndexes' TO '/var/opt/mssql/data/gIMM.TraceIndex.mdf', MOVE 'KpiData' TO '/var/opt/mssql/data/gIMM.KpiData.mdf', MOVE 'KpiIndexes' TO '/var/opt/mssql/data/gIMM.KpiIndex.mdf'
Run Code Online (Sandbox Code Playgroud)
我正确映射了需要的每个文件,我在docker实例上确实有足够的空间,但是我收到了这个错误:
错误:备份或还原已中止.
实际上这个docker的Windows版本也会出现同样的错误......而且因为它不应该是Express版本,所以数据库大小不应该是这里的问题.
如果有人有关于导致此错误的原因的更多信息!
谢谢,
小智 6
@TOUDIdel 您必须使用 linux 上的实际文件系统路径,而不是错误中显示的虚拟路径。
RESTORE DATABASE Northwind FROM DISK='/var/opt/mssql/Northwind.bak' WITH MOVE 'Northwind' TO '/var/opt/mssql/data/NORTHWND.MDF', MOVE 'Northwind_log' TO '/var/opt/mssql/data/NORTHWND_log.ldf'
Run Code Online (Sandbox Code Playgroud)
http://www.raditha.com/blog/archives/restoring-a-database-on-ms-sql-server-for-linux-docker/
你没有提到它,但欺骗我的是我没有将BAK文件复制到我的Docker实例.
在终端与docker和你的mssql容器运行...
1)获取容器ID:
$docker inspect -f '{{.Id}}' <container_name>
2)将BAK文件复制到docker实例:
docker exec -i <container_id> bash -c 'cat > /var/opt/mssql/backup.bak' < '/source/path/backup.bak'
3)登录mssql:
mssql -u sa -p 'myPassword'
3)恢复db :(你可以用恢复脚本替换它,虽然这对我来说已经足够了)
RESTORE DATABASE [MyDatabase] FROM DISK = N'/var/opt/mssql/backup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5
当我遇到这个问题时,这是因为恢复命令花费的时间足够长,导致 mssql 超时(带有完全无用的错误消息)。连接时指定较长的超时可以完成恢复。例如
mssql -s localhost -p "<sa_password>" -t 36000000 -T 36000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5568 次 |
| 最近记录: |