簡體   English   中英

在Docker容器上還原SQL Server數據庫時遇到問題

[英]Trouble restoring sql server DB on docker container

我正在嘗試創建一個Docker容器,以便從Docker的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

sql-server的“數據庫設置”中,應列出三個字段,分別是DataLogBackup以確保路徑正確和有效。

Linux版本不適用於Windows樣式的文件路徑,例如C:\\ SQLData \\ MyDb.mdf,但需要類似/SQLData/MyDb.mdf的文件,因此您需要使用WITH MOVE選項來執行還原,就像有人已經在注釋中寫的那樣。 此外,由於您嘗試還原的文件來自Windows MS-SQL Server系統,因此請仔細檢查Windows服務器上的運行版本是否為2014年或更高版本。 由於Linux引擎是最近開發的,因此在從舊版Windows MS-SQL版本加載數據時會遇到問題。 一旦我必須首先使用開發人員版在Windows Ms-SQL Server 2014上上載.bak,然后我便可以進行備份,並可以將其加載到Linux機器上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM