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

适用于:SQL Server - Linux

mssql-conf 是在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server 和 Ubuntu 中随 SQL Server 2017 (14.x) 安装的配置脚本。 它会修改存储配置值的 mssql.conf 文件。 可使用 mssql-conf 实用工具设置以下参数:

参数 描述
代理 启用 SQL Server 代理。
向 Windows 进行身份验证 Windows Server Active Directory 身份验证的设置。
排序规则 为 Linux 上的 SQL Server 设置新排序规则。
客户反馈 选择 SQL Server 是否向 Microsoft 发送反馈。
数据库邮件配置文件 为 Linux 上的 SQL Server 设置默认数据库邮件配置文件。
默认数据目录 更改新 SQL Server 数据库数据文件 (.mdf) 的默认目录。
默认日志目录 更改新 SQL Server 数据库日志 (.ldf) 文件的默认目录。
默认 master 数据库目录 更改 master 数据库和日志文件的默认目录。
默认 master 数据库文件名 更改 master 数据库文件的名称。
默认转储目录 更改新内存转储和其他故障诊断文件的默认目录。
默认错误日志目录 更改新 SQL Server 错误日志、默认探查器跟踪、系统健康状况会话 XE 和 Hekaton 会话 XE 文件的默认目录。
默认备份目录 更改新备份文件的默认目录。
转储类型 选择要收集的转储内存转储文件的类型。
版本(Edition) 设置 SQL Server 的版本。
高可用性 启用可用性组。
本地审核目录 设置目录以添加本地审核文件。
区域设置 设置 SQL Server 要使用的区域设置。
内存限制 设置 SQL Server 的内存限制。
网络设置 SQL Server 的其他网络设置。
Microsoft 分布式事务处理协调器 在 Linux 上配置 MSDTC 并对其进行故障排除。
TCP 端口 更改 SQL Server 侦听连接的端口。
TLS 配置传输级别安全性。
跟踪标志 设置服务要使用的跟踪标志。

mssql-conf 是随 SQL Server 2019 (15.x) for Red Hat Enterprise Linux、SUSE Linux Enterprise Server 和 Ubuntu 安装的配置脚本。 可以使用此实用工具设置以下参数:

参数 描述
代理 启用 SQL Server 代理
向 Windows 进行身份验证 Windows Server Active Directory 身份验证的设置。
排序规则 为 Linux 上的 SQL Server 设置新排序规则。
客户反馈 选择 SQL Server 是否向 Microsoft 发送反馈。
数据库邮件配置文件 为 Linux 上的 SQL Server 设置默认数据库邮件配置文件。
默认数据目录 更改新 SQL Server 数据库数据文件 (.mdf) 的默认目录。
默认日志目录 更改新 SQL Server 数据库日志 (.ldf) 文件的默认目录。
默认 master 数据库文件目录 更改现有 SQL 安装中 master 数据库文件的默认目录。
默认 master 数据库文件名 更改 master 数据库文件的名称。
默认转储目录 更改新内存转储和其他故障诊断文件的默认目录。
默认错误日志目录 更改新 SQL Server 错误日志、默认探查器跟踪、系统健康状况会话 XE 和 Hekaton 会话 XE 文件的默认目录。
默认备份目录 更改新备份文件的默认目录。
转储类型 选择要收集的转储内存转储文件的类型。
版本(Edition) 设置 SQL Server 的版本。
高可用性 启用可用性组。
本地审核目录 设置目录以添加本地审核文件。
区域设置 设置 SQL Server 要使用的区域设置。
内存限制 设置 SQL Server 的内存限制。
Microsoft 分布式事务处理协调器 在 Linux 上配置 MSDTC 并对其进行故障排除。
机器学习服务 EULA 对于 mlservices 包,接受 R 和 Python EULA。 仅适用于 SQL Server 2019 (15.x)。
网络设置 SQL Server 的其他网络设置。
outboundnetworkaccess 机器学习服务 R、Python 和 Java 扩展启用出站网络访问。
TCP 端口 更改 SQL Server 侦听连接的端口。
TLS 配置传输级别安全性。
跟踪标志 设置服务要使用的跟踪标志。

mssql-conf 是随 SQL Server 2022 (16.x) for Red Hat Enterprise Linux 和 Ubuntu 安装的配置脚本。 可以使用此实用工具设置以下参数:

参数 描述
代理 启用 SQL Server 代理
使用 Microsoft Entra ID 进行身份验证 设置用于使用 Microsoft Entra ID(以前称为 Azure Active Directory)进行身份验证。
向 Windows 进行身份验证 Windows Server Active Directory 身份验证的设置。
排序规则 为 Linux 上的 SQL Server 设置新排序规则。
客户反馈 选择 SQL Server 是否向 Microsoft 发送反馈。
数据库邮件配置文件 为 Linux 上的 SQL Server 设置默认数据库邮件配置文件。
默认数据目录 更改新 SQL Server 数据库数据文件 (.mdf) 的默认目录。
默认日志目录 更改新 SQL Server 数据库日志 (.ldf) 文件的默认目录。
默认 master 数据库文件目录 更改现有 SQL 安装中 master 数据库文件的默认目录。
默认 master 数据库文件名 更改 master 数据库文件的名称。
默认转储目录 更改新内存转储和其他故障诊断文件的默认目录。
默认错误日志目录 更改新 SQL Server 错误日志、默认探查器跟踪、系统健康状况会话 XE 和 Hekaton 会话 XE 文件的默认目录。
默认备份目录 更改新备份文件的默认目录。
转储类型 选择要收集的转储内存转储文件的类型。
版本(Edition) 设置 SQL Server 的版本。
高可用性 启用可用性组。
本地审核目录 设置目录以添加本地审核文件。
区域设置 设置 SQL Server 要使用的区域设置。
内存限制 设置 SQL Server 的内存限制。
Microsoft 分布式事务处理协调器 在 Linux 上配置 MSDTC 并对其进行故障排除。
机器学习服务 EULA 对于 mlservices 包,接受 R 和 Python EULA。 仅适用于 SQL Server 2019 (15.x)。
网络设置 SQL Server 的其他网络设置。
出站网络访问 机器学习服务 R、Python 和 Java 扩展启用出站网络访问。
TCP 端口 更改 SQL Server 侦听连接的端口。
TLS 配置传输级别安全性。
跟踪标志 设置服务要使用的跟踪标志。

提示

还可以使用环境变量配置其中某些设置。 有关详细信息,请参阅在 Linux 上使用环境变量配置 SQL Server 设置

使用提示

  • 对于 Always On 可用性组和共享磁盘群集,始终在每个节点上进行相同的配置更改。

  • 对于共享磁盘群集方案,请勿尝试重新启动 mssql-server 服务以应用更改。 SQL Server 作为应用程序运行。 应将资源脱机,然后重新联机。

  • 这些示例通过指定以下完整路径来运行 mssql-conf:/opt/mssql/bin/mssql-conf。 如果选择改为导航到该路径,请在当前目录 ./mssql-conf 的上下文中运行 mssql-conf。

  • 如果想要修改容器内部的 mssql.conf 文件,请在以所需配置运行容器的主机上创建 mssql.conf 文件,然后重新部署容器。 例如,对 mssql.conf 文件完成以下添加后,将启用 SQL Server 代理。

    [sqlagent]
    enabled = true
    

    可以使用以下命令部署容器:

    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
    -p 5433:1433 --name sql1 \
    -v /container/sql1:/var/opt/mssql \
    -d mcr.microsoft.com/mssql/server:2019-latest
    

    有关详细信息,请参阅创建 SQL Server 容器要使用的 config 文件

启用 SQL Server 代理

sqlagent.enabled 设置可启用 SQL Server 代理。 默认情况下,SQL Server 代理处于禁用状态。 如果 mssql.conf 设置文件中不存在 sqlagent.enabled,则 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
    

为 Linux 上的 SQL Server 设置默认数据库邮件配置文件

通过 sqlagent.databasemailprofile,可为电子邮件警报设置默认的 DB 邮件配置文件。

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

SQL 代理错误日志

通过 sqlagent.errorlogfilesqlagent.errorlogginglevel 设置,可分别设置 SQL 代理日志文件路径和日志记录级别。

sudo /opt/mssql/bin/mssql-conf set sqlagent.errorlogfile <path>

SQL 代理日志记录级别是位掩码值,等于:

  • 1 = 错误
  • 2 = 警告
  • 4 = 信息

如果要捕获所有级别,请使用 7 作为值。

sudo /opt/mssql/bin/mssql-conf set sqlagent.errorlogginglevel <level>

配置 Microsoft Entra 身份验证

从 SQL Server 2022 (16.x) 开始,可以为 SQL Server 配置 Microsoft Entra ID。 若要配置 Microsoft Entra ID,必须在安装 SQL Server 之后安装用于 SQL Server 的 Azure 扩展。 有关如何配置 Microsoft Entra ID 的信息,请参阅教程:为 SQL Server 设置 Microsoft Entra 身份验证

更改默认的 Microsoft Entra ID 证书路径

默认情况下,Microsoft Entra 证书文件存储在 /var/opt/mssql/aadsecrets/ 中。 如果使用证书存储或加密驱动器,则可以更改此路径。 若要更改路径,可以使用以下命令:

sudo /opt/mssql/bin/mssql-conf set network.aadcertificatefilepath /path/to/new/location.pfx

在前面的示例中,/path/to/new/location.pfx 是首选路径,包括证书名称。

用于 SQL Server 的 Azure 扩展下载的 Microsoft Entra 身份验证的证书存储在此位置。 你无法将其更改为 /var/opt/mssql/secrets

注意

安装 SQL Server 后,虽然可以随时更改默认的 Microsoft Entra ID 证书路径,但必须在启用 Microsoft Entra ID“之前”更改。

Microsoft Entra ID 配置选项

Microsoft Entra 身份验证将以下选项用于 Linux 上运行的 SQL Server 实例。

警告

Microsoft Entra ID 参数由用于 SQL Server 的 Azure 扩展配置,不应手动重新配置。 此处列出的选项仅供参考。

选项 说明
network.aadauthenticationendpoint 用于 Microsoft Entra 身份验证的端点
network.aadcertificatefilepath 对 Microsoft Entra ID 进行身份验证的证书文件的路径
network.aadclientcertblacklist Microsoft Entra ID 客户端证书阻止列表
network.aadclientid Microsoft Entra 客户端 GUID
network.aadfederationmetadataendpoint Microsoft Entra 联盟元数据的端点
network.aadgraphapiendpoint Azure AD Graph API 的终结点
network.aadgraphendpoint Azure AD Graph 终结点:
network.aadissuerurl Microsoft Entra 发卡机构 URL
network.aadmsgraphendpoint Microsoft Entra MS 绘入图表端点
network.aadonbehalfofauthority Microsoft Entra ID 代表授权机构
network.aadprimarytenant Microsoft Entra 主租户 GUID
network.aadsendx5c Microsoft Entra ID Send X5C
network.aadserveradminname 将作为 sysadmin 的 Microsoft Entra 帐户的名称
network.aadserveradminsid 将作为 sysadmin 的 Microsoft Entra 帐户的 SID
network.aadserveradmintype 将作为 sysadmin 的 Microsoft Entra 帐户的类型
network.aadserviceprincipalname Microsoft Entra 服务主体名称
network.aadserviceprincipalnamenoslash Microsoft Entra 服务主体名称,没有斜杠
network.aadstsurl Microsoft Entra STS URL

配置 Windows Active Directory 身份验证

setup-ad-keytab 选项可用于创建密钥表,但必须创建了用户和服务主体名称 (SPN) 才能使用此选项。 Active Directory 实用工具 adutil 可用于创建用户、SPN 和密钥表。

有关使用 setup-ad-keytab 的选项,请运行以下命令:

sudo /opt/mssql/bin/mssql-conf setup-ad-keytab --help

validate-ad-config 选项验证 Active Directory 身份验证的配置。

更改 SQL Server 排序规则

set-collation 选项可将排序规则值更改为支持的任何排序规则。 若要进行此更改,需要停止 SQL Server 服务。

  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 是否向 Microsoft 发送反馈。 默认情况下,对于所有版本,此值设置为 true。 若要更改该值,请运行以下命令:

重要

无法关闭 SQL Server、Express 和 Developer 免费版本的客户反馈。

  1. 使用 telemetry.customerfeedbackset 命令以 root 身份运行 mssql-conf 脚本。 以下示例通过指定 false 来关闭客户反馈。

    sudo /opt/mssql/bin/mssql-conf set telemetry.customerfeedback false
    
  2. 重启 SQL Server 服务:

    sudo systemctl restart mssql-server
    

有关详细信息,请参阅为 Linux 上的 SQL Server 配置使用情况和诊断数据收集SQL Server 隐私补充

更改默认数据或日志目录位置

使用 filelocation.defaultdatadirfilelocation.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. 现在,为新数据库创建的所有数据库文件都存储在此新位置。 如果要更改新数据库的日志文件 (.ldf) 位置,可以使用下面的 set 命令:

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /tmp/log
    
  6. 此命令还假定存在 /tmp/log 目录,并且它位于用户和组 mssql 下。

更改默认的 master 数据库文件目录位置

使用 filelocation.masterdatafilefilelocation.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. 使用 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.mdfmastlog.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.mdfmastlog.ldf 文件,将在指定目录中自动创建系统数据库的模板化副本,并且 SQL Server 将成功启动。 但是,诸如用户数据库、服务器登录名、服务器证书、加密密钥、SQL 代理作业或旧 SA 登录密码等元数据将不会在新 master 数据库中更新。 必须停止 SQL Server 并将旧的 master.mdfmastlog.ldf 移动到新的指定位置,然后启动 SQL Server 以继续使用现有元数据。

更改 master 数据库文件的名称

使用 filelocation.masterdatafilefilelocation.masterlogfile 设置可更改 SQL Server 数据库引擎查找 master 数据库文件的位置。 还可以使用它来更改 master 数据库和日志文件的名称。

若要更改这些设置,请使用以下步骤:

  1. 停止 SQL Server 服务:

    sudo systemctl stop mssql-server
    
  2. 使用 mssql-conf 通过 set 命令更改 master 数据和日志文件的预期 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
    

    重要

    只能在 SQL Server 成功启动后更改 master 数据库和日志文件的名称。 在初始运行之前,SQL Server 会要求文件命名为 master.mdfmastlog.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
    

更改默认转储目录位置

使用 filelocation.defaultdumpdir 设置可更改每当系统崩溃时生成内存和 SQL 转储的默认位置。 默认情况下,这些文件在 /var/opt/mssql/log 中生成。

若要设置新位置,请使用以下命令:

  1. 为新的转储文件创建目标目录。 以下示例创建新的 /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 设置可更改创建新错误日志、默认探查器跟踪、系统健康状况会话 XE 和 Hekaton 会话 XE 文件的位置。 默认情况下,此位置是 /var/opt/mssql/log。 设置 SQL Server 错误日志文件的目录将成为其他日志的默认日志目录。

若要更改这些设置,请执行以下操作:

  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
    

errorlog.numerrorlogs 设置允许你指定在循环日志之前所维护的错误日志数。

更改默认备份目录位置

使用 filelocation.defaultbackupdir 设置可更改生成备份文件的默认位置。 默认情况下,这些文件在 /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
    

指定核心转储设置

如果某个 SQL Server 进程发生异常或故障,SQL Server 会创建内存转储。 捕获内存转储可能需要很长时间并占用大量空间。 若要保存资源并避免重复内存转储,可使用 coredump.disablecoredump 选项禁用自动转储捕获。

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

当自动核心转储被禁用(coredump.disablecoredump 设置为 true)时,用户仍然可以手动生成内存转储。

可使用两个选项控制 SQL Server 收集的内存转储类型:coredump.coredumptypecoredump.captureminiandfull。 这两个选项与核心转储捕获的两个阶段相关。

第一阶段的捕获由 coredump.coredumptype 设置控制,此设置确定异常期间生成的转储文件类型。 第二阶段由 coredump.captureminiandfull 设置启用。 如果 coredump.captureminiandfull 设置为 true,则会生成 coredump.coredumptype 指定的转储文件,还会生成第二个小型转储。 将 coredump.captureminiandfull 设置为 false 可禁用第二次捕获尝试。

  1. 确定是否使用 coredump.captureminiandfull 设置捕获小型转储和完全转储。

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

    默认:false

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

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

    默认:miniplus

    下表列出了可能的 coredump.coredumptype 值。

    类型 说明
    mini Mini 是最小的转储文件类型。 它使用 Linux 系统信息确定进程中的线程和模块。 转储仅包含主机环境线程堆栈和模块。 不包含间接内存引用或全局变量。
    miniplus MiniPlus 与 mini 相似,但它包括更多内存。 它理解 SQLPAL 的内部机制和主机环境,可将下面的内存区域添加到转储:

    - 各种全局变量
    - 超过 64 TB 的所有内存
    - - 在 /proc/$pid/maps 中找到的所有命名区域
    - 来自线程和堆栈的间接内存
    - 线程信息,包括关联的线程环境块 (TEB) 和进程环境块 (PEB)
    - 模块信息
    - VMM 和 VAD 树
    filtered Filtered 采用基于减法的设计,其中包括进程中的所有内存,除非专门排除某些内存。 此设计理解 SQLPAL 的内部机制和主机环境,从转储中排除某些区域。
    full Full 是完整的过程转储,包括 /proc/$pid/maps 中的所有区域。 这并非由 coredump.captureminiandfull 设置控制。

版本

可以使用 set-edition 选项更改 SQL Server 的版本。 若要更改 SQL Server 的版本,首先需要停止 SQL Server 服务。 有关 Linux 上可用的 SQL Server 版本的详细信息,请参阅 SQL Server 版本

高可用性

使用 hadr.hadrenabled 选项可在 SQL Server 实例上启用可用性组。 下面的命令通过将 hadr.hadrenabled 设置为 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.userrequestedlocalauditdirectoryset 命令以 root 身份运行 mssql-conf 脚本:

    sudo /opt/mssql/bin/mssql-conf set telemetry.userrequestedlocalauditdirectory /tmp/audit
    
  4. 重启 SQL Server 服务:

    sudo systemctl restart mssql-server
    

有关详细信息,请参阅为 Linux 上的 SQL 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 可用的物理内存量(以 MB 为单位)。 默认为物理内存的 80%,以防止内存不足 (OOM) 条件。

重要

memory.memorylimitmb 设置限制 SQL Server 进程的可用物理内存量。 最大服务器内存 (MB) 设置可用于调整 SQL Server 缓冲池的可用内存量,但永远不能超过可用于 SQL Server 的物理内存量。 有关最大服务器内存 (MB) 服务器配置选项的详细信息,请参阅服务器内存配置选项

  1. 使用 memory.memorylimitmbset 命令以 root 身份运行 mssql-conf 脚本。 以下示例将 SQL Server 可用的内存更改为 3.25 GB (3,328 MB)。

    sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3328
    
  2. 重启 SQL Server 服务以应用更改:

    sudo systemctl restart mssql-server
    

其他内存设置

内存设置提供以下选项。

选项 说明
memory.disablememorypressure SQL Server 禁用内存压力。 值可以为 truefalse
memory.memory_optimized 启用或禁用 SQL Server 内存优化功能 - 永久性内存文件启示、内存保护。 值可以为 truefalse
memory.enablecontainersharedmemory 仅适用于 SQL Server 容器。 使用此设置在 SQL Server 容器内启用共享内存。 默认情况下,这设置为 false。 值可以为 truefalse

配置 MSDTC

使用 network.rpcportdistributedtransaction.servertcpport 设置配置 Microsoft 分布式事务处理协调器 (MSDTC)。 要更改这些设置,请运行以下命令:

  1. 使用 network.rpcportset 命令以 root 身份运行 mssql-conf 脚本:

    sudo /opt/mssql/bin/mssql-conf set network.rpcport <rcp_port>
    
  2. 然后设置 distributedtransaction.servertcpport 设置:

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport <servertcpport_port>
    

除了设置这些值之外,还必须为端口 135 配置路由和更新防火墙。 有关如何执行此操作的详细信息,请参阅如何在 Linux 上配置 Microsoft 分布式事务处理协调器 (MSDTC)

可以使用 mssql-conf 的其他几项设置来监视 MSDTC 并对其进行故障排除。 下表简要描述了这些设置。 有关其用法的详细信息,请参阅 Windows 支持文章如何为 MS DTC 启用诊断跟踪了解详细信息。

选项 说明
distributedtransaction.allowonlysecurerpccalls Configure secure only RPC calls for distributed transactions
distributedtransaction.fallbacktounsecurerpcifnecessary 为分布式事务配置“仅安全”的 RPC 调用
distributedtransaction.maxlogsize DTC 事务日志文件大小 (MB)。 默认值为 64 MB
distributedtransaction.memorybuffersize 存储跟踪的循环缓冲区大小。 此大小以 MB 为单位,默认为 10 MB
distributedtransaction.servertcpport MSDTC rpc 服务器端口
distributedtransaction.trace_cm 连接管理器中的跟踪
distributedtransaction.trace_contact 跟踪联系人池和联系人
distributedtransaction.trace_gateway 跟踪网关源
distributedtransaction.trace_log 日志跟踪
distributedtransaction.trace_misc 不能归入其他类别的跟踪
distributedtransaction.trace_proxy MSDTC 代理中生成的跟踪
distributedtransaction.trace_svc 跟踪服务和 .exe 文件启动
distributedtransaction.trace_trace 跟踪基础结构本身
distributedtransaction.trace_util 跟踪从多个位置调用的实用工具例程
distributedtransaction.trace_xa XA 事务管理器 (XATM) 跟踪源
distributedtransaction.tracefilepath 应存储跟踪文件的文件夹
distributedtransaction.turnoffrpcsecurity 为分布式事务启用或禁用 RPC 安全性

接受机器学习服务 EULA

机器学习 R 或 Python 包添加到数据库引擎需要接受 R 和 Python 的开源分发许可条款。 下表枚举了与 mlservices EULA 相关的所有可用命令或选项。 对 R 和 Python 使用相同的 EULA 参数,具体取决于所安装的内容。

# For all packages: database engine and mlservices
# Setup prompts for mlservices EULAs, which you need to accept
sudo /opt/mssql/bin/mssql-conf setup

# Add R or Python to an existing installation
sudo /opt/mssql/bin/mssql-conf setup accept-eula-ml

# Alternative valid syntax
# Adds the EULA section to the INI and sets acceptulam to yes
sudo /opt/mssql/bin/mssql-conf set EULA accepteulaml Y

# Rescind EULA acceptance and removes the setting
sudo /opt/mssql/bin/mssql-conf unset EULA accepteulaml

还可以将接受 EULA 的内容直接添加到 mssql.conf 文件

[EULA]
accepteula = Y
accepteulaml = Y

启用出站网络访问

默认情况下,SQL Server 机器学习服务功能中的 R、Python 和 Java 扩展的出站网络访问处于禁用状态。 若要启用出站请求,请使用 mssql-conf 设置 outboundnetworkaccess 布尔属性。

设置该属性后,重新启动 SQL Server Launchpad 服务以从 INI 文件中读取更新的值。 每当修改与扩展性相关的设置时,都会收到重启消息提醒。

# Adds the extensibility section and property.
# Sets "outboundnetworkaccess" to true.
# This setting is required if you want to access data or operations off the server.
sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1

# Turns off network access but preserves the setting
sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 0

# Removes the setting and rescinds network access
sudo /opt/mssql/bin/mssql-conf unset extensibility.outboundnetworkaccess

还可以将 outboundnetworkaccess 直接添加到 mssql.conf 文件

[extensibility]
outboundnetworkaccess = 1

更改 TCP 端口

使用 network.tcpport 设置可更改 SQL Server 侦听连接的 TCP 端口。 默认情况下,此端口设置为 1433。 若要更改端口,请运行以下命令:

  1. 使用 network.tcpportset 命令以 root 身份运行 mssql-conf 脚本:

    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 帐户访问。 Microsoft 建议使用 chown mssql:mssql <file>; chmod 400 <file> 限制对文件的访问。
network.tlskey SQL Server 用于 TLS 的专用密钥文件的绝对路径。 示例:/etc/ssl/private/mssql.key 证书文件必须可由 mssql 帐户访问。 Microsoft 建议使用 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,Microsoft 建议仅允许 TLS 1.2。
network.tlsciphers 指定 SQL Server 允许将哪些密码用于 TLS。 必须按照 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 文件的路径

有关使用 TLS 设置的示例,请参阅加密与 Linux 上的 SQL Server 的连接

网络设置

请参阅教程:对 Linux 上的 SQL Server 使用 Active Directory 身份验证,以获取有关在 Linux 上的 SQL Server 中使用 Active Directory 身份验证的全面信息。

以下选项是可使用 mssql-conf 配置的其他网络设置。

选项 说明
network.disablesssd 禁用查询 SSSD 来获取 Active Directory 帐户信息,默认为 LDAP 调用。 值可以为 truefalse
network.enablekdcfromkrb5conf 允许从 krb5.conf 查找 KDC 信息。 值可以为 truefalse
network.forcesecureldap 强制使用 LDAPS 联系域控制器。 值可以为 truefalse
network.ipaddress 传入连接的 IP 地址。
network.kerberoscredupdatefrequency 检查需要更新的 kerberos 凭据之间的时间(以秒为单位)。 值是一个整数。
network.privilegedadaccount 用于 Active Directory 身份验证的特权 Active Directory 用户。 值为 <username>。 有关详细信息,请参阅教程:对 Linux 上的 SQL Server 使用 Active Directory 身份验证
uncmapping 将 UNC 路径映射到本地路径。 例如,sudo /opt/mssql/bin/mssql-conf set uncmapping //servername/sharename /tmp/folder
ldaphostcanon 设置 OpenLDAP 是否应在绑定步骤期间规范主机名。 值可以为 truefalse

启用或禁用跟踪标志

使用 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 文件。

查看各种选项

若要查看可以使用 mssql-conf 实用工具配置的各种选项,请运行 help 命令:

sudo /opt/mssql/bin/mssql-conf --help

结果提供各种配置选项和每个设置的简短说明。

mssql.conf format

以下 /var/opt/mssql/mssql.conf 文件提供了每个设置的示例。 可以根据需要使用此格式手动更改 mssql.conf 文件。 如果手动更改文件,则必须在应用更改之前重启 SQL Server。 要将 mssql.conf 文件与 Docker 配合使用,必须让 Docker 保留你的数据。 首先将完整的 mssql.conf 文件添加到主机目录,然后运行容器。 在为 Linux 上的 SQL Server 配置使用情况和诊断数据收集中有一个实例。

[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
[EULA]
accepteula = Y
accepteulaml = Y

[coredump]
captureminiandfull = true
coredumptype = full

[distributedtransaction]
servertcpport = 51999

[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
rpcport = 13500
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

参与编辑 SQL 文档

你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。

有关详细信息,请参阅如何参与 SQL Server 文档编辑