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 

默认值为false

2. 使用coredump.coredumptype设置指定DUMP文件的类型。

sudo /opt/mssql/bin/mssql-conf set coredump.coredumptype 

默认值为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 

高可用性

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 

2. 重启SQL Server服务:

sudo systemctl restart mssql-server

3. 当现在连接到SQL Server,你必需用英文输入法下的逗号分隔在主机名或IP地址后来指定客户端口。例如,使用SQLCMD连接,你需要使用如下命令:

sqlcmd -S localhost, -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 ; chmod 400 限制访问文件。

Network.tlskey

SQL Server用于TLS的私钥文件的完整路径。例如:/etc/ssl/private/mssql.key。证书必需通过mssql帐户访问。微软推荐使用chown mssql:mssql ; chmod 400 限制访问文件。

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