Microsoft SQL Server on Linux 踩坑指南

微軟用 SQL Server 在 2016 年的時候搞了一個大新聞,宣傳 Microsoft ❤️ Linux 打得一衆軟粉措手不及。可是這仍是好事情,Linux 上也有好用的 SQL Server 啦,可是從預覽版開始 SQL Server on Linux 的配置要求蜜汁高,大部分雲主機用戶都望而卻步。另外,SQL Server on Linux 對於文件系統有限制,僅支持 Ext3 以及 XFS 文件格式系統,對於某些雲服務商默認提供的雲鏡像限制 Ext3 文件格式系統的用戶而言也是足夠讓人懊惱。html

本文以 CentOS 爲例,若是使用的是 Ubuntu,或者 SUSE 可能在步驟上會有所不一樣。總的來講,建議使用 Docker 部署的方式進行部署。linux

踩坑前...

https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-red-hatweb

微軟的官方指南,按照這個流程走便可。sql

破解內存限制

雖然網上有文告訴如何破解預覽版 3.25G 內存限制的文章,可是很皮的是,微軟在 Update 4 後把內存限制改爲了 2G,也就是,即便你按照指南操做,安裝時空閒內存不足 2000M 同樣會獲得報錯消息:數據庫

sqlservr: This program requires a machine with at least 2000 megabytes of memory.

有時候咱們會想,我就跑個 Express,沒錢買 Enterprise 或者 Web,Express 也就只能用 1G RAM,要那麼多來幹什麼… 其實參考文章仍是有效,可是須要修改的這個常量而不是 3250000000 而是 2000000000。使用 Python:ui

>>> oldfile = open("sqlservr.bak", "rb").read()
>>> newfile = oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
>>> open("sqlservr", "wb").write(newfile)

修改後,內存限制被縮小爲 512 兆字節。操作系統

可是須要注意的是,SQL Server Express 版本依然須要 650M 內存。因此若是你的機器只有 1G 或者更低,仍是夠嗆。務必使用 1.5G RAM。日誌

Ext3 文件格式系統形成不兼容

微軟在發行註記上說,僅支持 XFS 或者 Ext4 文件格式系統。如今部分雲服務商爲了確保兼容性依然針對系統盤採用了 Ext3 文件格式系統(結果形成了 SQL Server 不兼容),其實稍不注意忽略這一點能夠坑一成天,而且永遠都是蜜汁報錯,而後本身還渾然不覺。
破解這個限制其實只須要把 SQL Server 的數據文件放到 Ext4 文件格式系統的掛載目錄下便可。掛載上 Ext4 格式磁盤(假設目錄爲 /data/),而後新建一個文件目錄(此處爲 /data/sqlsrv_data/,日誌目錄爲 /data/sqlsrv_data/log/)。
設置權限:code

sudo chown -R mssql /data/sqlsrv_data/
sudo chown -R :mssql /data/sqlsrv_data/

若是忽略這一步,後續安裝將會失敗,而且沒有日誌文件產生。或者收到報錯信息:server

ERROR: BootstrapSystemDataDirectories() failure (HRESULT 0x80070002)  
Initial setup of Microsoft SQL Server failed. Please consult the ERRORLOG

而後設置環境變量信息:

export MSSQL_MASTER_DATA_FILE=/data/sqlsrv_data/master.mdf
export MSSQL_MASTER_LOG_FILE=/data/sqlsrv_data/mastlog.ldf
export MSSQL_ERROR_LOG_FILE=/data/sqlsrv_data/log/errorlog

注意,上述環境變量爲文件位置而不是目錄,填寫目錄將會安裝失敗。

而後在 /opt/mssql/bin/ 目錄下執行:

./mssql-conf set filelocation.masterdatafile /data/sqlsrv_data/master.mdf
./mssql-conf set filelocation.masterlogfile /data/sqlsrv_data/mastlog.ldf
./mssql-conf set filelocation.errorlogfile /data/sqlsrv_data/log/errorlog

而後執行

./mssql-conf setup

片刻,執行

systemctl status mssql-server

檢查服務狀態,若是沒看到 systemd[1]: Failed to start Microsoft SQL Server Database Engine. 這類死亡警告,那麼恭喜閣下安裝成功,使用 Microsoft SQL Server Management Studio 開始愉快的 Linux × SQL Server 的 CP 體驗吧。

要是失敗了呢?

若是按照操做你都失敗了,尤爲是看到

FCB::Open failed: 沒法打開文件號 1 的文件 d:\dbs\sh\s17o\0209_182031\cmd\16\obj\x64retail\sql\mkmastr\databases\mkmastr.proj\MSDBData.mdf。操做系統錯誤: 2(系統找不到指定的文件。)。

報錯的話…

沒錯,是由於所給的目錄不正確或者上次安裝失敗的數據庫還在。解決方案是清空文件目錄(若是刪除了,別忘了設置權限,否則文件訪問不了)。

相關文章
相關標籤/搜索