一次就愛上MS SQL Server for Linux
MS SQL Server for Linux 是微軟重大的一步,它非常輕量但是使用相同和現有 SQL Server 資料庫引擎。以下介紹如何在 docker 下去建立並使用 mssql-server-linux,讓各位從入門到愛上它!
Let's go!
注意,讀者需要有 docker 基本概念。本篇不會太深入 docker 身上。
建立 mssql-server-linux container
從 Docker Hub 提取 SQL Server 2017 Linux image:
docker pull microsoft/mssql-server-linux:latest
這裡注意,我一開始是參考 Docker Hub 上的 mssql-server-linux 文件,但怎麼執行 mssql-server-linux 都會一啟動就入停用狀態,參數怎麼改都不行。後來參考 https://docs.microsoft.com 的文件重新執行一次,就能正常進行背景模式。原因是 Docker Hub 文件的密碼參數名稱是錯的,MSSQL_SA_PASSWORD 才是對的。
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1401:1433 --name linsql `
-d microsoft/mssql-server-linux:latest
ACCEPT_EULA
需同意授權合約。MSSQL_SA_PASSWORD
需要是強式密碼並至少 8 個字元。強式密碼需包含:大寫、小寫、數字,符號四者。-p hostPort:containerPort
--name
指定 container 名稱-d
背景執行
啟動後,確定一下 container 的狀態:
docker ps
如果列表 NAMES 顯示 linsql 並且 STATUS 顯示 UP 代表此已經在背景 1433 Port 等待。
使用 sqlcmd 連接並執行 T-SQL
我們先練習 sqlcmd 指令模式,等一下再介紹使用工具。
docker exec -it linsql bash
進入互動模式,執行登入:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourNewStrong!Passw0rd>'
/opt/mssql-tools/bin/sqlcmd
是sqlcmd
所在路徑。如果看到1>
代表已進入 sqlcmd 命令提示字元。
建立資料庫:
1> create database testDB
2> go
1> SELECT Name from sys.Databases
2> go
在 sqlcmd 指令模式下,輸入
go
之後才會執行。
Name -------------------------------------------------------------------------------------------------------------------------------- master tempdb model msdb testDB (5 rows affected)
我們已經成功在 mssql-server-linux 內執行 T-SQL,其他 Insert、Update、Delete、Select 語法都能正常使用 sqlcmd 方式執行。離開 sqlcmd 執行 quit
即可。
使用外部工具 SSMS, sqlops 連接 mssql-server-linux
如果你的 mssql-server-linux contailer 和 host 是在同一台,可以直接使用 localhost
名稱進行連線,如果要查詢 IP Address 透過 docker inspect <name or id>
來取得 IPAddress 段落資訊。
SSMS 連接 mssql-server-linux
唯一要注意的是,我們一開始在 docker run
指定的 -p
, 我們主機設定為 1401 Port,所以只要指定為 localhost,1401
就能與 mssql-server-linux 進行連接,是不是有夠簡單。
我使用 SSMS 17.4。
sqlops 連接 mssql-server-linux
有了正確 Server name 之後,其實用什麼工具來連線已經沒什麼差別了。sqlops 是一套輕量化與跨平台的資料庫管理工具,目前我們在單純寫 T-SQL 上用的還算喜歡。
移除 mssql-server-linux container
docker stop linsql
docker rm linsql
移除 linsql container 會刪除 container 內所有資料,例如我們剛剛建立的 testDB。我們應該把資料儲存在 container 之外,以備份或還原之用。
使用 Volume 儲存資料庫至外部主機
先確認你的 Docker for Windows 的 Shared Drives 的 C 能正確 Apply。
以下用 C 碟為範例,讀者可以修改為你想要磁碟。
我在 C:\ 建立以下階層的目錄:C:\Database\linux,然後重新建立 container:
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
--name "linsql" -p 1401:1433 `
-v C:\Database\linux:/var/opt/mssql `
-d microsoft/mssql-server-linux:latest
與一開始的差異在多了 -v
(Volume 技術)建立實體資料夾與 container 資料夾的對應關係。
PS C:\Database\linux> dir 目錄: C:\Database\linux Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2017/12/19 下午 04:54 .system d----- 2017/12/19 下午 04:55 data d----- 2017/12/19 下午 04:54 log d----- 2017/12/19 下午 04:54 secrets
可以發現,預設 /var/opt/mssql
的資料夾,出現我們本機的 C:\Database\linux 了。我們複製一個 AdventureWorks2012 範例資料庫到 data 目錄下:
PS C:\Database\linux\data> dir 目錄: C:\Database\linux\data Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2012/8/28 下午 11:54 198180864 AdventureWorks2012_Data.mdf -a---- 2012/8/28 下午 11:54 516096 AdventureWorks2012_log.ldf -a---- 2017/12/19 下午 04:54 4194304 master.mdf -a---- 2017/12/19 下午 04:55 2097152 mastlog.ldf -a---- 2017/12/19 下午 04:54 8388608 model.mdf -a---- 2017/12/19 下午 04:54 8388608 modellog.ldf -a---- 2017/12/19 下午 04:54 13959168 msdbdata.mdf -a---- 2017/12/19 下午 04:54 524288 msdblog.ldf -a---- 2017/12/19 下午 04:55 8388608 tempdb.mdf -a---- 2017/12/19 下午 04:55 8388608 templog.ldf
這裡讓我們偷懶使用 SSMS 來作業:
這裡可以看到 SSMS 連線之後能正確列出 mssql-server-linux container 裡的資料庫,附加之後,*.mdf 在 mssql-server-linux container 裡的運作與一般 MS SQL Server 無差異。
現在,你能用極快速的時間(一行指令)重建一個 mssql-server-linux container,而不需要 MS SQL Server 等級的安裝程式。
這裡也可以看出,SSMS 對 mssql-server-linux 的支援性不錯。
ASP.NET 網頁應用程式 - Entity Framework
基本上,你擁有資料庫 Server name 之後,mssql-server-linux 的使用實在與一般 MS SQL Server 無異差了。
你以前怎麼連線,現在就怎麼連線,以前,怎麼使用資料庫,現在就怎麼使用 mssql-server-linux 資料庫。
小結
技術這條路上,不知道為了 Visual Studio 與 SQL Server/SSMS 出問題,重灌了幾次電腦。Visual Studio 2017 已經決解此問題,現在 MS SQL Server 透過 docker 的幫忙,Linux/Windows Container 都有提供 SQL Server Images 可使用,這是測試與開發人員之福。mssql-server-linux 本身相當輕量,只有數百 MB,又與原始 SQL Server 的相容,可用性非常高,非常建議測試與開發人員使用,而且 docker 可以確定是未來趨勢,早早入手此技能,可以放棄許多如安裝 MS SQL Server 這種行為了。 ;-)
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。