1. 程式人生 > >在Linux上使用mssql-conf工具配置SQL Server 2017

在Linux上使用mssql-conf工具配置SQL Server 2017

edi lpc 可用內存 address per filter cor 文件的 flags

mssql-conf是在Linux上安裝SQL Server 2017後的一個配置腳本。你可以使用這個實用工具設置以下參數:


Agent

啟用SQL Server代理

Collation

設置一個新的排序規則

Customer feedback

選擇是否發送反饋給微軟

Database Mail Profile

設置默認數據庫郵件配置

Default data directory

修改新的數據文件的默認路徑

Default log directory

修改新的日誌文件的默認路徑

Default master database file directory

修改master數據庫的默認路徑

Default master database file name

修改master數據庫文件的名字

Default dump directory

修改新的內存DUMP和其他排錯文件的默認路徑

Defalut error log directory

修改新的SQL Server錯誤日誌文件、默認跟蹤、系統健康會話擴展事件和Hekaton會話擴展事件文件

Default backup directory

修改新的備份文件的默認路徑

Dump type

選擇內存DUMP文件收集的DUMP類型

High availability

啟用可用性組

Local Audit directory

配置一個添加本地審核文件的目錄

Locale

配置SQL Server使用的地區(配置語言環境)

Memory limit

配置SQL Server內存限制

TCP port

修改SQL Server連接監聽的端口

TLS

配置TLS(Transport Level Security)

Traceflags

設置服務使用的跟蹤標識


使用貼士:

  • 對於AlwaysOn可用性組和共享磁盤集群,總是對每個節點做相同的配置修改。

  • 對於共享磁盤集群,不要嘗試通過重啟mssql-server服務應用修改。SQL Server作為一個應用運行。相應的,將資源離線然後上線。

  • 你可以指定完整路徑運行mssql-conf:/opt/mssql/bin/mssql-conf。如果你導航到該路徑,可以在當前路徑上下文下運行mssql-conf:./mssql-conf。


啟用SQL Server代理

sqlagent.enabled設置啟用SQL Server代理。默認,SQL Server代理是禁用的。如果sqlagent.enabled沒有出現在mssql.conf配置文件中,那麽SQL Server內部認為SQL Server代理是禁用的。


按如下步驟修改配置:

1. 啟用SQL Server代理:

sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true

2. 重啟SQL Server服務:

sudo systemctl restart mssql-server


修改SQL Server排序規則

使用set-collation選項修改排序規則為任何支持的排序規則。

1. 首先備份實例上任何用戶數據庫。

2. 使用sp_detach_db分離用戶數據庫。

3. 運行set-collation選項並遵從提示:

sudo /opt/mssql/bin/mssql-conf set-collation

4. Mssql-conf使用工具將嘗試修改為指定的排序規則,並重啟服務。如果有任何錯誤,它將回滾排序規則到之前的值。

5. 恢復用戶數據庫備份。

對於支持的排序規則列表,運行sys.fn_helpcollations函數:

SELECT Name from sys.fn_helpcollations()


配置客戶反饋

telemetry.customerfeedback設置修改是否SQL Server發送反饋給微軟。默認,對於所有版本該值設置為true。運行如下命令,修改該值:

重要:你不能關閉免費版本的客戶反饋,Express和Developer。

1. 對於telemetry.customerfeedback選項,以root用戶通過set命令運行腳本mssql-conf。以下示例通過設置false來關閉客戶反饋。

sudo /opt/mssql/bin/mssql-conf set telemetry.customerfeedback false

2. 重啟SQL Server服務:

sudo systemctl restart mssql-server


修改默認數據和日誌目錄位置

filelocation.defaultdatadir和filelocation.defaultlogdir設置修改新的數據和日誌文件創建的位置。默認,這個位置是/var/opt/mssql/data。使用如下步驟,修改該配置:

1. 對於新的數據和日誌文件創建目標目錄。以下示例創建一個新的/tmp/data目錄:

sudo mkdir /tmp/data

2. 修改該目錄的所有者和組為mssql:

sudo chown mssql /tmp/data
sudo chgrp mssql /tmp/data

3. 使用mssql-conf腳本執行set命令修改默認數據目錄:

sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /tmp/data

4. 重啟SQL Server服務:

sudo systemctl restart mssql-server

5. 現在對於新創建的數據庫的數據文件將存儲在新的位置。如果你想修改新數據庫的日誌文件位置,你可以使用以下set命令:

sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /tmp/log

6. 該命令也假設/tmp/log目錄存在,並且隸屬於mssql用戶和組。


修改默認master數據庫文件目錄位置

filelocation.masterdatafile和filelocation.masterlogfile設置修改SQL Server引擎查找master數據庫文件的位置。默認,這個位置是/var/opt/mssql/data。

通過如下步驟來修改這些設置:

1. 對於新的錯誤日誌文件創建目標目錄。以下示例創建一個新的/tmp/masterdatabasedir目錄:

sudo mkdir /tmp/masterdatabasedir

2. 修改目錄的所有者和組為mssql:

sudo chown mssql /tmp/masterdatabasedir
sudo chgrp mssql /tmp/masterdatabasedir

3. 對於master數據和日誌文件,使用mssql-conf腳本的set命令修改默認master數據庫目錄:

sudo /opt/mssql/bin/mssql-conf set filelocation.masterdatafile /tmp/masterdatabasedir/master.mdf
sudo /opt/mssql/bin/mssql-conf set filelocation.masterlogfile /tmp/masterdatabasedir/mastlog.ldf

4. 停止SQL Server服務:

sudo systemctl stop mssql-server

5. 移動master.mdf和masterlog.ldf:

sudo mv /var/opt/mssql/data/master.mdf /tmp/masterdatabasedir/master.mdf
sudo mv /var/opt/mssql/data/mastlog.ldf /tmp/masterdatabasedir/mastlog.ldf

6. 啟動SQL Server服務:

sudo systemctl start mssql-server


註意:

如果SQL Server在指定目錄不能找到master.mdf和mastlog.ldf,在指定目錄下系統數據庫將會自動創建一個模板的拷貝,並且SQL Server會成功啟動。然而,元數據像用戶數據庫,服務器登錄,服務器證書,加密秘鑰,SQL代理作業,或者舊的SA登錄密碼在新的master數據庫將不會被更新。你不得不停止SQL Server並移動舊的master.mdf和mastlog.ldf到新的指定位置,並使用存在的元數據繼續啟動SQL Server。


修改master數據庫文件的名字

Filelocation.masterdatafile和filelocation.masterlogfile設置修改SQL Server引擎查找master數據庫文件的位置。默認位置是/var/opt/mssql/data。使用如下步驟修改這些設置:

1. 停止SQL Server服務:

sudo systemctl stop mssql-server

2. 使用mssql-conf腳本的set命令修改指定的master數據庫的數據和日誌文件的名字:

sudo /opt/mssql/bin/mssql-conf set filelocation.masterdatafile /var/opt/mssql/data/masternew.mdf

sudo /opt/mssql/bin/mssql-conf set filelocation.mastlogfile /var/opt/mssql/data /mastlognew.ldf

3. 修改master數據庫數據和日誌文件的名字:

sudo mv /var/opt/mssql/data/master.mdf /var/opt/mssql/data/masternew.mdf
sudo mv /var/opt/mssql/data/mastlog.ldf /var/opt/mssql/data/mastlognew.ldf

4. 啟動SQL Server服務:

sudo systemctl start mssql-server


修改默認的DUMP目錄位置

filelocation.defalutdumpdir設置修改當遇到故障時內存和SQL DUMP生成的默認位置。默認,這些文件生成在/var/log/mssql/log目錄。

使用如下命令來配置新的位置:

1. 創建新的DUMP文件的目標目錄。以下示例創建一個新的/tmp/dump目錄:

sudo mkdir /tmp/dump

2. 修改該目錄的所有者和組為mssql:

sudo chown mssql /tmp/dump
sudo chgrp mssql /tmp/dump

3. 使用mssql-conf腳本的set命令修改默認數據目錄:

sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdumpdir /tmp/dump

4. 重啟SQL Server服務:

sudo systemctl restart mssql-server


修改默認錯誤日誌目錄位置

filelocation.errorlogfile設置修改新的錯誤日誌、默認Profiler跟蹤、系統健康會話擴展事件和Hekaton會話擴展事件文件創建的位置。默認位置是/var/opt/mssql/log。SQL錯誤日誌設置的目錄成為其他日誌的默認目錄。

修改這些設置:

1. 對新的錯誤日誌文件創建目標目錄。以下示例創建一個新的/tmp/logs目錄:

sudo mkdir /tmp/logs

2. 修改目錄的所有者和組為mssql:

sudo chown mssql /tmp/logs

sudo chgrp mssql /tmp/logs

3. 使用mssql-conf腳本的set命令修改默認錯誤日誌文件名:

sudo /opt/mssql/bin/mssql-conf set filelocation.errorlogfile /tmp/logs/errorlog

4. 重啟SQL Server服務:

sudo systemctl restart mssql-server


修改默認備份目錄位置

filelocation.defultbackupdir設置修改備份文件生成的位置。默認,這些文件產生於/var/opt/mssql/data。

使用如下命令來配置這個新位置:

1. 對於新的備份文件創建目標目錄。以下示例創建一個新的/tmp/backup目錄:

sudo mkdir /tmp/backup

2. 修改目錄的所有者和組為mssql:

sudo chown mssql /tmp/backup
sudo chgrp mssql /tmp/backup

3. 使用mssql-conf腳本的set命令修改默認備份目錄:

sudo /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /tmp/backup

4. 重啟SQL Server服務:

sudo systemctl restart mssql-server


指定核心DUMP設置

如果一個SQL Server進程發生意外,SQL Server創建一個內存DUMP。


有兩個選項用於控制SQL Server收集的內存DUMP的類型:coredump.coredumptype和coredump.captureminiandfull。這些關系到核心DUMP捕獲的兩個階段。


第一個階段捕獲通過coredump.coredumptype設置來控制,決定了在發生意外時DUMP文件產生的類型。當coredump.captureminiandfull設置時第二個階段啟用。如果coredump.captureminiandfull設置為true,被coredump.coredumptype指定的DUMP文件生成,並生成了一個微型DUMP。設置coredump.captureminiandfull為false禁止第二個捕獲嘗試。


1. 使用coredump.captureminiandfull設置決定是否捕獲微型和完整DUMP。

sudo /opt/mssql/bin/mssql-conf set coredump.captureminiandfull <true or false>

默認值為false

2. 使用coredump.coredumptype設置指定DUMP文件的類型。

sudo /opt/mssql/bin/mssql-conf set coredump.coredumptype <dump_type>

默認值為miniplus


以下列表是可能的coredump.coredumptype的值:

類型

描述

mini

Mini是最小的DUMP文件類型。它使用Linux系統信息決定進程裏的線程和模塊。DUMP只包含主機環境線程棧和模塊。它不包含間接內存參照或全局變量。

miniplus

Miniplus類似於mini,但是它包含其他內存。它理解SQLPAL和主機環境的內幕,添加內存區域到DUMP:

--各種全局變量

--64TB以上內存

--在/proc/$pid/maps發現的所有命名區域

--從線程到棧的間接內存

--線程信息

--相關的Teb’s和Peb’s

--模塊信息

--VMM和VAD數

filtered

Filtered使用基於減法的設計進程中的所有內存位置都包含,除非專門排除。該設計理解SQLPAL的內幕和主機環境,從DUMP排除特定區域。

full

Full是一個位於/proc/$pid/maps的完整進程DUMP包含所有區域。它不受coredump.captureminiandfull設置的控制。


設置默認數據庫郵件配置

Sqlpagent.databasemailprofile允許你對於郵件告警設置默認數據庫郵件配置。

sudo /opt/mssq/bin/mssql-conf set sqlagent.databasemailprofile <profile_name>

高可用性

hadr.hadrenabled選項在SQL Server實例上啟用可用性組。以下命令通過設置hadr.hardenabled為1啟用可用性組。你必須重啟SQL Server使配置生效。

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server


設置本地審核目錄

telemetry.userrequestedlocalauditdirectory設置啟用本地審核,讓你本地審核日誌創建的目錄。

1. 對於新的本地審核日誌創建目標目錄。以下示例創建一個/tmp/audit目錄:

sudo mkdir /tmp/audit

2. 修改所有者和組為mssql:

sudo chown mssql /tmp/audit
sudo chgrp mssql /tmp/audit

3. 對於telemetry.userrequestedlocalauditdirectory,以root運行mssql-conf腳本的set命令:

sudo /opt/mssql/bin/mssql-conf set telemetry.userrequestedlocalauditdirectory /tmp/audit

4. 重啟SQL Server服務:

sudo systemctl restart mssql-server


修改SQL Server本地化

Language.lcid設置修改SQL Server本地化為任何支持的語言標識(LCID)。

1. 以下示例修改本地化為法語(1036):

sudo /opt/mssql/bin/mssql-conf set language.lcid 1036

2. 重啟SQL Server服務來應用修改:

sudo systemctl restart mssql-server


設置內存限制

Memory.memorylimitmb設置控制SQL Server可用物理內存數量。默認是物理內存的80%。

1. 對memory.memorylimitmb以root運行mssql-conf腳本的set命令。以下示例修改可用內存為3.25GB(3328MB)。

sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3328

2. 重啟SQL Server服務來應用修改:

sudo systemctl restart mssql-server


修改TCP端口

Network.tcpport設置修改SQL Server連接監聽的TCP端口。默認,該端口設置為1433。運行如下命令修改這個端口:

1. 對於network.tcpport運行mssql-conf腳本的set命令:

sudo /opt/mssql/bin/mssql-conf set network.tcpport <new_tcp_port>

2. 重啟SQL Server服務:

sudo systemctl restart mssql-server

3. 當現在連接到SQL Server,你必需用英文輸入法下的逗號分隔在主機名或IP地址後來指定客戶端口。例如,使用SQLCMD連接,你需要使用如下命令:

sqlcmd -S localhost,<new_tcp_port> -U test -P test


指定TLS設置

以下選項為運行在Linux上的SQL Server實例配置TLS。

選項

描述

Network.forceencryption

如果為1,SQL Server強制加密所有連接。默認,該選項為0.

Network.tlscert

SQL Server用於TLS的證書的完整路徑。例如:/etc/ssl/certs/mssql.pem。證書必需通過mssql帳戶訪問。微軟推薦使用chown mssql:mssql <file>; chmod 400 <file>限制訪問文件。

Network.tlskey

SQL Server用於TLS的私鑰文件的完整路徑。例如:/etc/ssl/private/mssql.key。證書必需通過mssql帳戶訪問。微軟推薦使用chown mssql:mssql <file>; chmod 400 <file>限制訪問文件。

Network.tlsprotocols

SQL Server運行使用的以逗號分隔的TLS協議列表。SQL Server總是嘗試協商最強允許的協議。如果客戶端不支持任何允許的協議,SQL Server拒絕連接嘗試。為了兼容性,默認允許所有支持的協議(1.2,1.1,1.0)。如果客戶端支持TLS 1.2,微軟推薦只允許TLS 1.2。

Network.tlsciphers

指定對於TLS,SQL Server允許的密碼。該字符串必需以OpenSSL的密碼列表格式格式化。通常,你不需要修改該選項。

默認,允許以下密碼:

ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA

Network.kerberoskeytabfile

Kerberos keytab文件路徑


啟用/禁用跟蹤標誌

Traceflag選項對於SQL Server服務啟動啟用和禁用跟蹤標誌。使用如下命令啟用/禁用跟蹤標誌:

1. 使用如下命令啟用啟用跟蹤標誌。例如,對於跟蹤標誌1234:

sudo /opt/mssql/bin/mssql-conf traceflag 1234 on

2. 你可以通過分別制定它們來啟用多個跟蹤標誌:

sudo /opt/mssql/bin/mssql-conf traceflag 2345 3456 on

3. 以類似的方式,你可以通過制定它們並添加off參數來禁用一個或多個啟用的跟蹤標誌:

sudo /opt/mssql/bin/mssql-conf traceflag 1234 2345 3456 off

4. 重啟SQL Server服務來應用修改:

sudo systemctl restart mssql-server


移除一個設置

為了移除使用mssql-conf set的設置,使用unset選項和設置名稱調用mssql-conf。它清理設置,有效的設為默認值。

1. 以下示例清理network.tcpport選項。

sudo /opt/mssql/bin/mssql-conf unset network.tcpport

2. 重啟SQL Server服務。

sudo systemctl restart mssql-server


查看當前設置

為了查看任何配置設置,運行如下腳本輸出mssql.conf文件的內容:

sudo cat /var/opt/mssql/mssql.conf

註意,任何使用默認值的設置不會顯示在這個文件。


Mssql.conf格式


以下/var/opt/mssql/mssql.conf文件提供了對每個設置的一個示例。你可以使用這個格式手工按需修改mssql.conf文件。如果手工修改這個文件,你必需重啟SQL Server服務來應用。為了在Docker使用mssql.conf文件,你必需有Docker持久化你的數據。首先添加一個完整的mssql.conf文件到你的主機目錄並運行這個容器。

[EULA]
accepteula = Y
[coredump]
captureminiandfull = true
coredumptype = full
[filelocation]
defaultbackupdir = /var/opt/mssql/data/
defaultdatadir = /var/opt/mssql/data/
defaultdumpdir = /var/opt/mssql/data/
defaultlogdir = /var/opt/mssql/data/
[hadr]
hadrenabled = 0
[language]
lcid = 1033
[memory]
memorylimitmb = 4096
[network]
forceencryption = 0
ipaddress = 10.192.0.0
kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
tcpport = 1401
tlscert = /etc/ssl/certs/mssql.pem
tlsciphers = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA
tlskey = /etc/ssl/private/mssql.key
tlsprotocols = 1.2,1.1,1.0
[sqlagent]
databasemailprofile = default
errorlogfile = /var/opt/mssql/log/sqlagentlog.log
errorlogginglevel = 7
[telemetry]
customerfeedback = true
userrequestedlocalauditdirectory = /tmp/audit
[traceflag]
traceflag0 = 1204
traceflag1 = 2345
traceflag = 3456


在Linux上使用mssql-conf工具配置SQL Server 2017