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 |
Network.tlskey |
SQL Server用于TLS的私钥文件的完整路径。例如:/etc/ssl/private/mssql.key。证书必需通过mssql帐户访问。微软推荐使用chown mssql:mssql |
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