我們知道,幾個星期前,微軟發布了在Linux上直接運行的SQL Server第一個公開CTP版本!因此,對我來說,是時候跨界在Linux上安裝我的第一個SQL安裝,這樣的話,我就可以在Linux上折騰SQL Server。在這篇文章里,我想給你概括講下在Linux上,SQL Server的起步是怎樣的。
架構
在我們談論Linux上的SQL Server的細節之前,我想花幾分鐘時間談下微軟如何實現在Linux上運行SQL Server。當微軟首次公開聲稱它們在Linux上運行SQL Server的安裝,每個人都會認為SQL Server只是移植到Linux。SQL Server已經通過SQLOS抽象了一些底層操作系統的功能,因此這會有用,但意味著微軟需要維護不同的代碼庫(一個Windows,一個Linux)。我們都同意這是不可行的。
為了解決這個問題,現在微軟在Linux上運行基于Windows的未修改代碼。微軟做了如下舉動:
”我們在SQLPAL上嵌入Linux進程運行經典的Windows版的SQL Server,即從Drawbridge(吊橋)演變。”——Slava Oks:
SQLPAL是“SQL Server Platform Abstraction Layer(SQL Server平臺抽象層)”。Drawbridge本身是微軟研究院在2011年9月建立的項目,目的提供新形式虛擬化的應用程序沙盒。目前還沒有在Linux上,SQL Server整個架構如何運行的公開信息,因此這里不能講解得很清楚。但最重要,要記住的事:在Linux上,SQL Server不是一個端口,它是和基于Windows的SQL Server一樣。
因此,你幾乎可以在Linux上的SQL Server上做和Windows上的SQL Server的任何事情。它是可行的,沒有任何副作用。當然還不是所有的一切都可以在Linux上的SQL Server做。當前還不支持SQL Server代理,而且還沒有像HA/DR(高可用性/故障恢復)的Always ON可用性組。但我假定,微軟會在Linux上為我們提供在這方面提供新的功能和特性。在基于Window上和基于Linux上間創建可用性復制,會是多么驚艷的事!
開始折騰Linux上的SQL Server
為了在Linux上運行SQL Server,你需要安裝一個Linux發行版。微軟當前支持Ubuntu 16.04,和RHEL 7.2(紅帽子企業版Linux)。在這里我決定簡單安裝一個Ubuntu虛擬機,然后在它上面安裝SQL Server。微軟在線幫助會告訴你如何在Linux上安裝SQL Server的詳細步驟,SQL Server和你就是幾個命令的距離:
sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - sudo curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | sudo tee /etc/apt/sources.list.d/mssql-server.list sudo apt-get update sudo apt-get install -y mssql-server sudo /opt/mssql/bin/sqlservr-setup
一旦你在Linux上安裝了SQL Server,你可以用sytemctl命令驗證下SQL Server是否在運行。
systemctl status mssql-server
另外你也可以安裝Linux上的SQL Server客戶端工具,它會在Linux上給你sqlcmd命令執行——很贊!
SQL Server安裝完成后,你可以在Windows下的SSMS來連接運行在Linux上的SQL Server。你只需要提供Ubuntu虛擬機的IP地址和正確密碼的sa賬號。很簡單——它就是一個SQL Server實例(和Windows一樣)——運行在別的地方——這里是運行在Linux上!連接成功后,現在我們來運行著名的
SELECT @@VERSION:
沒錯,我們運行在Linux上!還有更精彩的!你可以在Linux上運行常規的基于Windows版SQL Server的備份和還原,也是沒有問題。首先你要拷貝一個SQL Server數據庫備份到你的Ubuntu虛擬機。默認情況下Ubuntu沒有安裝SMB,你可以用它來配置用于文件交換的文件共享。首先我們在Ubuntu上通過安裝SMB功能來修正:
sudo apt-get install samba smbpasswd -a klaus
安裝好SMB,你可以通過添加下列目錄到/etc/samba/smb.conf文件來配置遠程文件共享:
[Documents] path = /home/klaus/Documents available = yes valid users = klaus read only = no browsable = yes public = yes writable = yes
在這里我共享/home/klaus/Documents作為共享文件夾。然后你需要重啟SMB服務來讓遠程文件共享可用,從你的Windows系統。
sudo service smbd restart
最后復制你的SQL Server數據庫備份到你的Ubuntu虛擬機。當你在你的Ubuntu虛擬機上有了你的數據庫備份,最后你可以復制它到/var/opt/mssql/data文件夾,這樣的話,SQL Server就可以訪問它:
sudo cp AdventureWorks2014.bak /var/opt/mssql/data/AdventureWorks2014.bak
現在當你在SSMS界面里定位到數據庫還原,你可以看到SQL Server可以看到你的備份。
然后通過提供備份文件進行常規的RESORE DATABASE命令:
-- Restore AdventureWorks2014 on Linux RESTORE DATABASE [AdventureWorks2014] FROM DISK = N'C:\var\opt\mssql\data\AdventureWorks2014.bak' WITH FILE = 1, MOVE N'AdventureWorks2014_Data' TO N'C:\var\opt\mssql\data\AdventureWorks2014_Data.mdf', MOVE N'AdventureWorks2014_Log' TO N'C:\var\opt\mssql\data\AdventureWorks2014_Log.ldf', STATS = 1 GO
說實話,真的是厲害了,我的哥!!!
你還期待Linux上的SQL Server會有什么呢?我剛說過——幾乎一起!我已經測試了前沿技術——例如內存優化表,列存儲索引,并行執行計劃,等待統計等等。——統統支持!!!
這些功能都支持是正常的,因為常規基于Windows的SQL Server——只是在寄宿在Linux進程里運行,剝掉Windows系統的SQL Server。
為什么在Linux上運行SQL Server
從技術角度來說,微軟這里這里有了很大的突破。沒有人會想到在Steve Ballmer(微軟首席執行官)領導下發生這些。微軟已經做出了180°的轉彎——非常棒!但在Linux上運行SQL Server的商業原因是什么?我們來看下:
- 沒有系統授權費用(Linux是免費的)
- 對于Linux,微軟提供了一個“成熟”的關系數據庫技術(當然還有像MySQL的其他可用數據庫,但是……)
- ……
坦白講:在Linux上運行SQL Server,這整個想法都有點瘋狂,但你進一步想下,越發覺得這有意義——對于一些場景。我們都同意,對于大家,在Linux上的SQL Server不會是主要的開發模式。但對一些特殊場景會有意義。
小結
近幾個的星期技術真是突飛猛進啊:首先我們在SQL Server的標準版里有了開發版的所有功能,現在我們有了可以在Linux上直接運行的基于Windows的SQL Server。加入SQL Server社區很享受,我們感受到近些年的革新。我們的明天會更精彩!
對于微軟SQL Server未來發展方向你有啥想法?歡迎留言!
感謝關注!
原文鏈接
http://www.sqlpassion.at/archive/2016/11/28/first-steps-with-sql-server-on-linux/
![]() |
不含病毒。www.avast.com |