docker中的sql server 導入數據庫文件mdf


  在上一篇文章中我們已經成功在docker中跑起來了一個sql server。

  現在問題來了,我有一個mdf文件,我應該如何導入到sql server?

  在window平台似乎有對應的工具,但是docker中卻不一樣。原因是docker相當於創建了一個虛擬的linux環境,在這個環境中運行sql server。作為mac玩家,我們沒有類似於window這樣的工具。即使有,由於sql server運行在虛擬的環境中,而我們的文件在本地主機中,所以兩個是互相隔離的。

  簡單來說,如果你想要導入mdf文件,你應該看到有人告訴你這樣做:

EXEC  sp_attach_db  @dbname  =  '你的數據庫名',     

@filename1  =  'mdf文件路徑(包綴名)',     

@filename2  =  'Ldf文件路徑(包綴名)'

  但是當你在你的sql server中輸入上面的語句,他會告訴你路徑不存在。為什么?因為sql server運行在docker提供的虛擬linux上,在那個linux上顯然沒有你這個文件。

解決方法:

我在https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-configure-docker?view=sql-server-2017中找到了解決方案。

簡單來說,docker就是一個容器,而我們的數據庫文件mdf現在在容器外,我們需要將這個文件放入容器內,才能進行導入。

sql server提供了一種方法叫做:將主機目錄加載為數據卷,簡單來說就是把我們主機上的一個目錄映射到容器內的一個目錄上。

然而微軟之后又叫了一條提醒,暫時不支持將mac的主機目錄加載進去,它提示我們改為使用數據卷。

指令如下:

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest

注意看:這個指令其實是在創建一個sql server 然后這個sql server多了-v sqlvolume:/var/opt/mssql 這一部分, 用於為這個sql server創建一個volume名為sqlvolume,並且這個容器的位置在docker虛擬的linux的/var/opt/mssql中。 如果我們還想為這個數據庫命名 我們需要在-p 1433:1433 后面加上一句 --name yourname (如果直接加在最后面會報錯)

好了現在我們已經創建了一個帶有數據卷的sql server。我們可以使用 docker volume ls 查看是否創建成功,應該會顯示一個volume。

類似

DRIVER              VOLUME NAME

local               demovolume

demovolume是我給我的volume取得名字。

 

ok 現在我們只需要將mdf文件拷貝到容器中再導入即可,指令如下:

docker cp <Host path> <Container ID>:<Container path>

container id可以通過 docker ps查看到。

像我這樣:

docker cp /yourpath.../DemoHis_log.ldf b2e95c59a4fb:/var/opt/mssql/DemoHis_log.ldf

docker cp /yourpath.../DemoHis.mdf  b2e95c59a4fb:/var/opt/mssql/DemoHis.mdf 

 

現在我們在var/opt/mssql/中已經有這兩個文件了了只需要在數據庫中輸入語句

EXEC sp_attach_db @dbname = 'DemoHis',
@filename1 = '/var/opt/mssql/DemoHis.mdf',
@filename2 = '/var/opt/mssql/DemoHis_log.ldf'
GO
就會提示運行成功,至此我們終於將mdf文件導入了docker中的sql server。
 
后記:
雖然寫的很多很雜,但是還是要寫,一方面自己沒有太多時間去寫的很好看,但是另外一方面這個問題在網上又沒有找到別的解決方法。網上的博客中都是泛泛而談,裝環境的博客千千萬,裝完環境之后能不能用倒是沒人關心了。hello world之后的第二步,也是需要開拓的。
mac 下使用sql server的坑實在多,為了導入一個mdf文件就要這樣費神,只能留下一篇這樣的流水記,勉勵探索的后人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM