个性化配置你的SQL Server on Linux
問題引入
這天老鳥滿面春風找到菜鳥:“鳥兒啊,看你最近研究SQL Server On Linux如魚得水,干得不錯啊。不過呢,這是一個張揚個性的年代,要創新,要與眾不同,那你怎么在Linux平臺對SQL Server做個性化的配置吧?比如,我們數據庫文件存放的路徑,備份文件存放的路徑,排序規則等等”。
“鳥哥,今天心情不錯啊,撿到金子啦?得了,這就按您的指示辦去”。
問題分析
老鳥這個需求還是很有現實意義的,比如在Windows平臺,我們會標準化SQL Server數據庫文件存放的路徑,定制化排序規則等。比如:mdf文件會存放在D:\DATA\DBName\SQL目錄,ldf文件會存放在D:\DATA\DBName\LOG目錄下。讓我們看看SQL Server On Linux是怎么張揚它的個性化配置的。
個性化配置
在個性化配置之前,讓我們來看SQL Server On Linux的默認配置是什么樣子。
數據存放位置和排序規則
查看數據庫物理文件的存放位置,只需要訪問視圖sys.master_files,默認排序規則訪問視圖sys.databases。腳本如下:
USE masterGOSELECT database_name = db_name(database_id) ,file_name = name,physical_name FROM sys.master_filesSELECT database_name = name, collation_name FROM sys.databases; ?查詢結果截圖如下:
這里必須要吐槽,不吐不快,從SSMS查看數據庫的物理位置,有兩點很難理解,當然不知道微軟后續的發版會不會改善:
?Windows是使用反斜線“\”來劃分目錄結構,而Linux系統使用的是正斜線“/”。
?查詢出來的結果集目錄中會強制添加C:盤地址。
最終的對應關系是:Linux上的/var/opt/mssql/data對應于Windows上的目錄C:\var\opt\mssql\data。吐槽截圖如下:
個性化配置腳本
在最開始做個性化配置腳本時候,我所有的這些目錄是放在/var/opt/mssql/data/這個根目錄下,后來發現這種做法有一個很大的坑,后面的“一個深坑”錯誤處理時會講到。后來,我把根目錄放到/data/下,算是踩過了這個坑。這么大的一個深坑,微軟的攻城獅,你出來,我們聊聊,我保證不打殘你。
# vim reconfMSSQLOnLinux.sh#!/bin/sh# --------------------------------------------## purpose: # this script is for MSSQL on Linux# reconfiguration.## --------------------------------------------# change mssql-server listen on 1435 from 1433echo "change mssql-server listen port to 1435"/opt/mssql/bin/mssql-conf set tcpport 1435# Change the default data directory locationecho "change mssql-server default data directory location"mkdir /data/SQL chown mssql /data/SQL && chgrp mssql /data/SQL/opt/mssql/bin/mssql-conf set defaultdatadir /data/SQL# Change the default log directory locationecho "change mssql-server default log directory location"mkdir /data/LOG chown mssql /data/LOG && chgrp mssql /data/LOG/opt/mssql/bin/mssql-conf set defaultlogdir /data/LOG# Change the default dump directory locationecho "change mssql-server default dump directory location"mkdir /data/DUMP chown mssql /data/DUMP && chgrp mssql /data/DUMP/opt/mssql/bin/mssql-conf set defaultdumpdir /data/DUMP# Change the default backup directory locationecho "change mssql-server default backup direcotry location"mkdir /data/BACKUP chown mssql /data/BACKUP && chgrp mssql /data/BACKUP/opt/mssql/bin/mssql-conf set defaultbackupdir /data/BACKUP# Enable/Disable traceflagsecho "mssql-server trace flag 1222 & 1204 enabled"/opt/mssql/bin/mssql-conf traceflag 1222 1204 on# Change the SQL Server collationecho "change mssql-server default collation"/opt/mssql/bin/mssql-conf set-collation[root@localhost ~]# chmod +x reconfMSSQLOnLinux.sh執行配置腳本
仔細看這個返回結果,也是在根目錄/data/前加了盤符C:,始終覺得怪怪的。最后,輸入新的排序規則確認后,一會兒SQL Server就會完成個性化的設置并重啟。
# sh reconfMSSQLOnLinux.shchange mssql-server listen port to 1435Applying value '1435' to 'tcpport'. Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready. change mssql-server default data directory location Applying value 'C:\data\SQL' to 'defaultdatadir'. Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready. change mssql-server default log directory location Applying value 'C:\data\LOG' to 'defaultlogdir'. Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready. change mssql-server default dump directory location Applying value 'C:\data\DUMP' to 'defaultdumpdir'. Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready. change mssql-server default backup direcotry location Applying value 'C:\data\BACKUP' to 'defaultbackupdir'. Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready. mssql-server trace flag 1222 & 1204 enabled Applying traceflag '1222'. Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready. Applying traceflag '1204'. Restart of SQL Server is required to apply this setting. Please run 'systemctl restart mssql-server.service' when ready. change mssql-server default collation This option will change the collation for SQL Server and RESTART the server. Continue [Yes/No]: Yes Enter the collation: Chinese_PRC_CI_AS一個深坑
在最開始測試過程中,所有目錄放到根目錄/var/opt/mssql/data/下,執行會出現以下異常信息,無法創建tempdb,錯誤的原因是在C:\data\SQL\目錄下不存在tempdb.mdf文件。第一反應是,什么東西啊?C:\data\SQL\tempdb.mdf?我沒有配置任何文件放到這個目錄啊,還C盤呢?你以為是你的Windows操作系統嗎?
最后聰明伶俐,人見人愛,車間車爆胎的菜鳥,大膽猜測,小心求證,終于搞明白了。反過來猜想,估計微軟這幫攻城獅只截取了最后兩層目錄,比如/var/opt/mssql/data/SQL,他們會把/data/SQL做為數據庫數據文件的存放目錄,實在是令人著急。來看看錯誤信息:
截個圖留戀,證明下:
有了這層意思的精神領會以后,解決問題的方法就So easy了。
再次重試個性化配置腳本sh reconfMSSQLOnLinux.sh,這次總算成功了,謝天謝地。
打開防火墻
為了讓外部客戶端SSMS連接重新配置后的實例,請打開防火墻1435端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=1435/tcp --permanentsuccess[root@localhost ~]# firewall-cmd --reloadsuccess再次檢查數據存放位置
重新配置完成后,接下來做如下測試:
?創建數據:看看數據庫mdf和ldf文件會不會放到/data/SQL和/data/LOG目錄下。
?備份數據庫:看看數據庫備份文件會不會放到/data/BACKUP目錄。
?排序規則檢查:檢查數據庫是否是新的排序規則Chinese_PRC_CI_AS
查詢結果展示如下:
使用Linux的tree命令看看/data目錄文件結構,如下圖展示:
從SSMS查詢結果和Linux目錄結構來看,所有現象都滿足預期,菜鳥對SQL Server On Linux進行了個性化配置。
寫在最后
過程歷經艱辛,但最終我們到達了成功的彼岸,總算對SQL Server On Linux進行了個性化的配置。就像我們最開始研究Linux版SQL Server說的那樣,他還是只個剛出生的孩子,還有很多不完善的地方,甚至看起來還有點怪異。但是,讓我們充滿期望,給予寬容和友善讓他茁壯成長。
?
相關文章:?
- SQL Server 急救包(First Responder Kit)入門教程 
- SQL Server on Linux 理由淺析 
- SQLServer On Linux Package List on CentOS 
- SQL Server on Linux的文件和目錄結構 
原文地址:https://yq.aliyun.com/articles/67204
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的个性化配置你的SQL Server on Linux的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Essential MSBuild: .
- 下一篇: asp.net core mvc实现伪静
