天天看點

個性化配置你的SQL Server on Linux問題引入問題分析個性化配置寫在最後

這天老鳥滿面春風找到菜鳥:“鳥兒啊,看你最近研究sql server on linux如魚得水,幹得不錯啊。不過呢,這是一個張揚個性的年代,要創新,要與衆不同,那你怎麼在linux平台對sql server做個性化的配置吧?比如,我們資料庫檔案存放的路徑,備份檔案存放的路徑,排序規則等等”。

“鳥哥,今天心情不錯啊,撿到金子啦?得了,這就按您的訓示辦去”。

老鳥這個需求還是很有現實意義的,比如在windows平台,我們會标準化sql server資料庫檔案存放的路徑,定制化排序規則等。比如:mdf檔案會存放在d:datadbnamesql目錄,ldf檔案會存放在d:datadbnamelog目錄下。讓我們看看sql server on linux是怎麼張揚它的個性化配置的。

在個性化配置之前,讓我們來看sql server on linux的預設配置是什麼樣子。

檢視資料庫實體檔案的存放位置,隻需要通路視圖sys.master_files,預設排序規則通路視圖sys.databases。腳本如下:

查詢結果截圖如下:

個性化配置你的SQL Server on Linux問題引入問題分析個性化配置寫在最後

這裡必須要吐槽,不吐不快,從ssms檢視資料庫的實體位置,有兩點很難了解,當然不知道微軟後續的發版會不會改善:

windows是使用反斜線“”來劃分目錄結構,而linux系統使用的是正斜線“/”。

查詢出來的結果集目錄中會強制添加c:盤位址。

最終的對應關系是:linux上的/var/opt/mssql/data對應于windows上的目錄c:varoptmssqldata。吐槽截圖如下:

個性化配置你的SQL Server on Linux問題引入問題分析個性化配置寫在最後

在最開始做個性化配置腳本時候,我所有的這些目錄是放在/var/opt/mssql/data/這個根目錄下,後來發現這種做法有一個很大的坑,後面的“一個深坑”錯誤處理時會講到。後來,我把根目錄放到/data/下,算是踩過了這個坑。這麼大的一個深坑,微軟的攻城獅,你出來,我們聊聊,我保證不打殘你。

仔細看這個傳回結果,也是在根目錄/data/前加了盤符c:,始終覺得怪怪的。最後,輸入新的排序規則确認後,一會兒sql server就會完成個性化的設定并重新開機。

在最開始測試過程中,所有目錄放到根目錄/var/opt/mssql/data/下,執行會出現以下異常資訊,無法建立tempdb,錯誤的原因是在c:datasql目錄下不存在tempdb.mdf檔案。第一反應是,什麼東西啊?c:datasqltempdb.mdf?我沒有配置任何檔案放到這個目錄啊,還c盤呢?你以為是你的windows作業系統嗎?

最後聰明伶俐,人見人愛,工廠中的房間車爆胎的菜鳥,大膽猜測,小心求證,終于搞明白了。反過來猜想,估計微軟這幫攻城獅隻截取了最後兩層目錄,比如/var/opt/mssql/data/sql,他們會把/data/sql做為資料庫資料檔案的存放目錄,實在是令人着急。來看看錯誤資訊:

截個圖留戀,證明下:

個性化配置你的SQL Server on Linux問題引入問題分析個性化配置寫在最後

有了這層意思的精神領會以後,解決問題的方法就so easy了。

再次重試個性化配置腳本sh reconfmssqlonlinux.sh,這次總算成功了,謝天謝地。

為了讓外部用戶端ssms連接配接重新配置後的執行個體,請打開防火牆1435端口

重新配置完成後,接下來做如下測試:

建立資料:看看資料庫mdf和ldf檔案會不會放到/data/sql和/data/log目錄下。

備份資料庫:看看資料庫備份檔案會不會放到/data/backup目錄。

排序規則檢查:檢查資料庫是否是新的排序規則chinese_prc_ci_as

查詢結果展示如下:

個性化配置你的SQL Server on Linux問題引入問題分析個性化配置寫在最後

使用linux的tree指令看看/data目錄檔案結構,如下圖展示:

個性化配置你的SQL Server on Linux問題引入問題分析個性化配置寫在最後

從ssms查詢結果和linux目錄結構來看,所有現象都滿足預期,菜鳥對sql server on linux進行了個性化配置。

過程曆經艱辛,但最終我們到達了成功的彼岸,總算對sql server on linux進行了個性化的配置。就像我們最開始研究linux版sql server說的那樣,他還是隻個剛出生的孩子,還有很多不完善的地方,甚至看起來還有點怪異。但是,讓我們充滿期望,給予寬容和友善讓他茁壯成長。