文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  服务器系统变量

7.1.8 服务器系统变量

MySQL 服务器维护许多影响其操作的系统变量。大多数系统变量可以在服务器启动时使用命令行或选项文件中的选项进行设置。大多数可以在运行时使用 SET 语句动态更改,这使您可以修改服务器的操作,而无需停止和重新启动它。一些变量是只读的,它们的值由系统环境、MySQL 在系统上的安装方式或编译 MySQL 时使用的选项决定。大多数系统变量都有一个默认值,但也有一些例外,包括只读变量。您也可以在表达式中使用系统变量值。

设置全局系统变量运行时值通常需要 SYSTEM_VARIABLES_ADMIN 权限(或已弃用的 SUPER 权限)。设置会话系统运行时变量值通常不需要特殊权限,任何用户都可以执行此操作,但也有一些例外。有关更多信息,请参阅 第 7.1.9.1 节,“系统变量权限”

有几种方法可以查看系统变量的名称和值

  • 要查看服务器基于其编译时默认值和读取的任何选项文件使用的值,请使用以下命令

    mysqld --verbose --help
  • 要查看服务器仅基于其编译时默认值使用的值,忽略任何选项文件中的设置,请使用以下命令

    mysqld --no-defaults --verbose --help
  • 要查看正在运行的服务器使用的当前值,请使用 SHOW VARIABLES 语句或 Performance Schema 系统变量表。请参阅 第 29.12.14 节,“性能模式系统变量表”.

本节提供了每个系统变量的描述。有关系统变量摘要表,请参阅 第 7.1.5 节,“服务器系统变量参考”。有关系统变量操作的更多信息,请参阅 第 7.1.9 节,“使用系统变量”.

有关其他系统变量信息,请参阅以下部分

注意

以下一些变量描述指的是 启用禁用 变量。这些变量可以使用 SET 语句通过将它们设置为 ON1 来启用,或通过将它们设置为 OFF0 来禁用。布尔变量可以在启动时设置为 ONTRUEOFFFALSE(不区分大小写),以及 10。请参阅 第 6.2.2.4 节,“程序选项修饰符”.

某些系统变量控制缓冲区或缓存的大小。对于给定的缓冲区,服务器可能需要分配内部数据结构。这些结构通常从分配给缓冲区的总内存中分配,并且所需的空间量可能取决于平台。这意味着,当您为控制缓冲区大小的系统变量分配值时,实际可用的空间量可能与分配的值不同。在某些情况下,该数量可能小于分配的值。服务器也可能向上调整值。例如,如果您为最小值为 1024 的变量分配值 0,则服务器会将该值设置为 1024。

除非另有说明,否则缓冲区大小、长度和堆栈大小的值以字节为单位。

注意

某些系统变量描述包含一个块大小,在这种情况下,不是所述块大小的整数倍的值将在服务器存储之前向下舍入到下一个较低的块大小倍数,即 FLOOR(value) * block_size

示例:假设给定变量的块大小为 4096,并且您将变量的值设置为 100000(我们假设变量的最大值大于此数字)。由于 100000 / 4096 = 24.4140625,服务器会自动在存储之前将该值降低到 98304(24 * 4096)。

在某些情况下,变量的声明最大值是 MySQL 解析器允许的最大值,但不是块大小的精确倍数。在这种情况下,有效最大值是下一个较低的块大小倍数。

示例:一个系统变量的最大值为 4294967295 (232-1),其块大小为 1024。4294967295 / 1024 = 4194303.9990234375,因此,如果您将此变量设置为其声明的最大值,则实际存储的值为 4194303 * 1024 = 4294966272。

某些系统变量采用文件名值。除非另有说明,否则默认文件位置为数据目录(如果该值为相对路径名)。要显式指定位置,请使用绝对路径名。假设数据目录为 /var/mysql/data。如果文件值变量被指定为相对路径名,则它位于 /var/mysql/data 下。如果该值为绝对路径名,则其位置由路径名给出。

  • activate_all_roles_on_login

    命令行格式 --activate-all-roles-on-login[={OFF|ON}]
    系统变量 activate_all_roles_on_login
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否启用在用户登录服务器时自动激活所有授予的角色

    授予的角色包括显式授予用户的角色以及在 mandatory_roles 系统变量值中命名的角色。

    activate_all_roles_on_login 仅在登录时以及在定义器上下文中执行的存储程序和视图的执行开始时应用。要在会话内更改活动角色,请使用 SET ROLE。要更改存储程序的活动角色,程序体应执行 SET ROLE

  • admin_address

    命令行格式 --admin-address=addr
    系统变量 admin_address
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    用于在管理网络接口上侦听 TCP/IP 连接的 IP 地址(参见 第 7.1.12.1 节,“连接接口”)。没有默认的 admin_address 值。如果在启动时未指定此变量,则服务器不维护任何管理接口。服务器还具有一个 bind_address 系统变量,用于配置常规(非管理)客户端 TCP/IP 连接。参见 第 7.1.12.1 节,“连接接口”

    如果指定了 admin_address,则其值必须满足以下要求

    • 该值必须是单个 IPv4 地址、IPv6 地址或主机名。

    • 该值不能指定通配符地址格式 (*0.0.0.0::)。

    • 该值可能包含网络命名空间说明符。

    IP 地址可以指定为 IPv4 或 IPv6 地址。如果该值为主机名,则服务器会将名称解析为 IP 地址并绑定到该地址。如果主机名解析为多个 IP 地址,则服务器会使用第一个 IPv4 地址(如果有),否则使用第一个 IPv6 地址。

    服务器对不同类型的地址进行如下处理

    • 如果该地址是 IPv4 映射地址,则服务器会接受该地址的 TCP/IP 连接,无论是 IPv4 格式还是 IPv6 格式。例如,如果服务器绑定到 ::ffff:127.0.0.1,则客户端可以使用 --host=127.0.0.1--host=::ffff:127.0.0.1 连接。

    • 如果该地址是 常规 IPv4 或 IPv6 地址(例如 127.0.0.1::1),则服务器仅接受该 IPv4 或 IPv6 地址的 TCP/IP 连接。

    以下规则适用于为地址指定网络命名空间

    • 可以为 IP 地址或主机名指定网络命名空间。

    • 不能为通配符 IP 地址指定网络命名空间。

    • 对于给定地址,网络命名空间是可选的。如果给出,则必须将其指定为紧随地址之后的 /ns 后缀。

    • 没有 /ns 后缀的地址使用主机系统全局命名空间。因此,全局命名空间是默认值。

    • 具有 /ns 后缀的地址使用名为 ns 的命名空间。

    • 主机系统必须支持网络命名空间,并且每个命名命名空间都必须事先设置。命名不存在的命名空间会导致错误。

    有关网络命名空间的更多信息,请参见 第 7.1.14 节,“网络命名空间支持”

    如果绑定到地址失败,则服务器会产生错误并不会启动。

    admin_address 系统变量类似于 bind_address 系统变量,该变量将服务器绑定到用于普通客户端连接的地址,但存在以下区别

  • admin_port

    命令行格式 --admin-port=port_num
    系统变量 admin_port
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 33062
    最小值 0
    最大值 65535

    用于在管理网络接口上进行连接的 TCP/IP 端口号(参见 第 7.1.12.1 节,“连接接口”)。将此变量设置为 0 会导致使用默认值。

    如果未指定 admin_address,则设置 admin_port 不会产生任何影响,因为在这种情况下,服务器不维护任何管理网络接口。

  • admin_ssl_ca

    命令行格式 --admin-ssl-ca=file_name
    系统变量 admin_ssl_ca
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    admin_ssl_ca 系统变量类似于 ssl_ca,不同之处在于它适用于管理连接接口而不是主连接接口。有关配置管理接口的加密支持的信息,请参见 管理接口对加密连接的支持

  • admin_ssl_capath

    命令行格式 --admin-ssl-capath=dir_name
    系统变量 admin_ssl_capath
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 NULL

    admin_ssl_capath 系统变量类似于 ssl_capath,不同之处在于它适用于管理连接接口而不是主连接接口。有关配置管理接口的加密支持的信息,请参见 管理接口对加密连接的支持

  • admin_ssl_cert

    命令行格式 --admin-ssl-cert=file_name
    系统变量 admin_ssl_cert
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    admin_ssl_cert 系统变量类似于 ssl_cert,不同之处在于它适用于管理连接接口而不是主连接接口。有关配置管理接口的加密支持的信息,请参见 管理接口对加密连接的支持

  • admin_ssl_cipher

    命令行格式 --admin-ssl-cipher=name
    系统变量 admin_ssl_cipher
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL

    admin_ssl_cipher 系统变量类似于 ssl_cipher,不同之处在于它适用于管理连接接口而不是主连接接口。有关配置管理接口的加密支持的信息,请参见 管理接口对加密连接的支持

    此变量指定的列表可能包含以下任何值

    • ECDHE-ECDSA-AES128-GCM-SHA256

    • ECDHE-ECDSA-AES256-GCM-SHA384

    • ECDHE-RSA-AES128-GCM-SHA256

    • ECDHE-RSA-AES256-GCM-SHA384

    • ECDHE-ECDSA-CHACHA20-POLY1305

    • ECDHE-RSA-CHACHA20-POLY1305

    • ECDHE-ECDSA-AES256-CCM

    • ECDHE-ECDSA-AES128-CCM

    • DHE-RSA-AES128-GCM-SHA256

    • DHE-RSA-AES256-GCM-SHA384

    • DHE-RSA-AES256-CCM

    • DHE-RSA-AES128-CCM

    • DHE-RSA-CHACHA20-POLY1305

    尝试在设置此变量时在密码列表中包含此处未显示的任何值会导致错误 (ER_BLOCKED_CIPHER).

  • admin_ssl_crl

    命令行格式 --admin-ssl-crl=file_name
    系统变量 admin_ssl_crl
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    系统变量 admin_ssl_crlssl_crl 类似,区别在于它适用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参见 管理接口对加密连接的支持

  • admin_ssl_crlpath

    命令行格式 --admin-ssl-crlpath=dir_name
    系统变量 admin_ssl_crlpath
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 NULL

    系统变量 admin_ssl_crlpathssl_crlpath 类似,区别在于它适用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参见 管理接口对加密连接的支持

  • admin_ssl_key

    命令行格式 --admin-ssl-key=file_name
    系统变量 admin_ssl_key
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    系统变量 admin_ssl_keyssl_key 类似,区别在于它适用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参见 管理接口对加密连接的支持

  • admin_tls_ciphersuites

    命令行格式 --admin-tls-ciphersuites=ciphersuite_list
    系统变量 admin_tls_ciphersuites
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL

    系统变量 admin_tls_ciphersuitestls_ciphersuites 类似,区别在于它适用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参见 管理接口对加密连接的支持

    该值是一个由冒号分隔的密码套件名称列表,这些名称来自以下列表:

    • TLS_AES_128_GCM_SHA256

    • TLS_AES_256_GCM_SHA384

    • TLS_CHACHA20_POLY1305_SHA256

    • TLS_AES_128_CCM_SHA256

    尝试在设置此变量时在密码列表中包含此处未显示的任何值会导致错误 (ER_BLOCKED_CIPHER).

  • admin_tls_version

    命令行格式 --admin-tls-version=protocol_list
    系统变量 admin_tls_version
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 TLSv1.2,TLSv1.3

    系统变量 admin_tls_versiontls_version 类似,区别在于它适用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参见 管理接口对加密连接的支持

    重要
    • MySQL 8.4 不支持 TLSv1 和 TLSv1.1 连接协议。有关更多信息,请参见 对 TLSv1 和 TLSv1.1 协议的支持移除

    • MuySQL 8.4 支持 TLSv1.3 协议,前提是 MySQL 服务器是使用 OpenSSL 1.1.1 或更高版本编译的。服务器在启动时会检查 OpenSSL 的版本,如果版本低于 1.1.1,则会从系统变量的默认值中删除 TLSv1.3。在这种情况下,默认值为 TLSv1.2

  • authentication_policy

    命令行格式 --authentication-policy=value
    系统变量 authentication_policy
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 *,,

    此变量用于管理多因素身份验证 (MFA) 功能。它适用于 CREATE USERALTER USER 语句中与身份验证因素相关的子句,用于管理 MySQL 帐户定义,其中 factor 对应于与帐户关联的身份验证方法或插件。

    • authentication_policy 控制帐户可以拥有的身份验证因素数量。也就是说,它控制哪些因素是必需的或允许的。

    • authentication_policy 还控制每个因素允许使用哪些插件(或方法)。

    • authentication_policy 确定没有显式命名插件的身份验证规范的默认身份验证插件。

    由于 authentication_policy 仅在创建或更改帐户时适用,因此更改其值不会影响现有用户帐户。

    注意

    虽然系统变量 authentication_policyCREATE USERALTER USER 语句的身份验证相关子句施加了某些限制,但拥有 AUTHENTICATION_POLICY_ADMIN 权限的用户不受这些限制的影响。(对于原本不允许的语句,会发出警告。)

    authentication_policy 的值为 1、2 或 3 个逗号分隔的元素列表。每个存在的元素可以是身份验证插件名称、星号 (*)、空或缺失。(例外:元素 1 不能为空或缺失。)在所有情况下,元素都可以用空格字符包围,整个列表都用单引号括起来。

    为列表中元素 N 指定的值类型会影响是否必须在帐户定义中存在因素 N,以及可以使用的身份验证插件。

    • 如果元素 N 是身份验证插件名称,则需要一个因素 N 的身份验证方法,并且必须使用命名的插件。

      此外,该插件将成为没有显式命名插件的因素 N 身份验证方法的默认插件。有关详细信息,请参见 默认身份验证插件

      使用内部凭据存储的身份验证插件只能指定为第一个元素,并且不能重复。例如,以下设置不允许:

      • authentication_policy = 'caching_sha2_password, sha256_password'

      • authentication_policy = 'caching_sha2_password, authentication_webauthn, sha256_password'

    • 如果元素 N 是星号 (*),则需要一个因素 N 的身份验证方法。它可以使用任何对元素 N 有效的身份验证插件(如后面所述)。

    • 如果元素 N 为空,则因素 N 的身份验证方法是可选的。如果给出,它可以使用任何对元素 N 有效的身份验证插件(如后面所述)。

    • 如果元素 N 缺少列表(也就是说,值中小于 N−1 个逗号),则不允许因素 N 的身份验证方法。例如,值为 '*' 仅允许一个因素,因此为使用 CREATE USER 创建的新帐户或使用 ALTER USER 对现有帐户进行的更改强制执行单因素身份验证 (1FA)。在这种情况下,此类语句不能为因素 2 或 3 指定身份验证。

    authentication_policy 元素命名身份验证插件时,元素允许的插件名称受以下条件约束:

    • 元素 1 必须命名一个不需要注册步骤的插件。例如,不能命名 authentication_webauthn

    • 元素 2 和 3 必须命名一个不使用内部凭据存储的插件。

      有关哪些身份验证插件使用内部凭据存储的信息,请参见 第 8.2.15 节,“密码管理”

    authentication_policy 元素 N* 时,帐户定义中因素 N 允许的插件名称受以下条件约束:

    • 对于因素 1,帐户定义可以使用任何插件。默认身份验证插件规则适用于没有命名插件的身份验证规范。请参见 默认身份验证插件

    • 对于因素 2 和 3,帐户定义不能命名使用内部凭据存储的插件。例如,使用 '*,*'、'*,*,*'、'*,'、'*,,' authentication_policy 设置,使用内部凭据存储的插件仅允许用于第一个因素,并且不能重复。

    authentication_policy 元素 N 为空时,帐户定义中因素 N 允许的插件名称受以下条件约束:

    • 对于因素 1,这并不适用,因为元素 1 不能为空。

    • 对于因素 2 和 3,帐户定义不能命名使用内部凭据存储的插件。

    空元素必须出现在列表的末尾,位于非空元素之后。换句话说,第一个元素不能为空,并且要么没有元素为空,要么最后一个元素为空,要么最后两个元素为空。例如,值 ',,' 不允许,因为它表示所有因素都是可选的。这不可能;帐户必须至少有一个身份验证因素。

    authentication_policy 的默认值为 '*,,'。这意味着因素 1 在帐户定义中是必需的,并且可以使用任何身份验证插件,而因素 2 和 3 是可选的,并且每个因素可以使用任何不使用内部凭据存储的身份验证插件。

    下表显示了一些 authentication_policy 值以及每个值建立的创建或更改帐户的策略。

    表 7.4 示例 authentication_policy 值

    authentication_policy 值 有效策略
    '*' 仅允许创建或更改具有一个因素的帐户。
    '*,*' 仅允许创建或更改具有两个因素的帐户。
    '*,*,*' 仅允许创建或更改具有三个因素的帐户。
    '*,' 允许创建或更改具有一个或两个因素的帐户。
    '*,,' 允许创建或更改具有一个、两个或三个因素的帐户。
    '*,*,' 允许创建或更改具有两个或三个因素的帐户。
    '*,auth_plugin' 允许创建或更改具有两个因素的帐户,其中第一个因素可以是任何身份验证方法,第二个因素必须是命名的插件。
    'auth_plugin,*,' 允许使用两个或三个因素创建或更改帐户,其中第一个因素必须是指定的插件。
    'auth_plugin,' 允许使用一个或两个因素创建或更改帐户,其中第一个因素必须是指定的插件。
    'auth_plugin,auth_plugin,auth_plugin' 允许使用三个因素创建或更改帐户,这些因素必须使用指定的插件。

  • authentication_windows_log_level

    命令行格式 --authentication-windows-log-level=#
    系统变量 authentication_windows_log_level
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2
    最小值 0
    最大值 4

    此变量仅在启用authentication_windows Windows 身份验证插件且启用调试代码时可用。请参见第 8.4.1.6 节,“Windows 可插拔身份验证”

    此变量设置 Windows 身份验证插件的日志记录级别。下表显示了允许的值。

    描述
    0 不记录
    1 仅记录错误消息
    2 记录级别 1 消息和警告消息
    3 记录级别 2 消息和信息说明
    4 记录级别 3 消息和调试消息
  • authentication_windows_use_principal_name

    命令行格式 --authentication-windows-use-principal-name[={OFF|ON}]
    系统变量 authentication_windows_use_principal_name
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    此变量仅在启用authentication_windows Windows 身份验证插件时可用。请参见第 8.4.1.6 节,“Windows 可插拔身份验证”

    使用InitSecurityContext() 函数进行身份验证的客户端应提供一个字符串,用于标识它连接到的服务 (targetName)。MySQL 使用服务器运行所在帐户的主体名称 (UPN)。UPN 的格式为user_id@computer_name,无需在任何地方注册即可使用。此 UPN 由服务器在身份验证握手开始时发送。

    此变量控制服务器是否在初始质询中发送 UPN。默认情况下,此变量处于启用状态。出于安全原因,可以将其禁用以避免将服务器的帐户名称以明文形式发送到客户端。如果此变量被禁用,服务器始终在第一个质询中发送0x00 字节,客户端不会指定targetName,因此,将使用 NTLM 身份验证。

    如果服务器无法获取其 UPN(这主要发生在不支持 Kerberos 身份验证的环境中),则服务器不会发送 UPN,并且将使用 NTLM 身份验证。

  • autocommit

    命令行格式 --autocommit[={OFF|ON}]
    系统变量 autocommit
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    自动提交模式。如果设置为 1,则对表的更改会立即生效。如果设置为 0,则必须使用COMMIT 接受事务,或使用ROLLBACK 取消事务。如果autocommit 为 0 且您将其更改为 1,则 MySQL 会对任何打开的事务执行自动COMMIT。开始事务的另一种方法是使用START TRANSACTIONBEGIN 语句。请参见第 15.3.1 节,“START TRANSACTION、COMMIT 和 ROLLBACK 语句”

    默认情况下,客户端连接从autocommit 设置为 1 开始。要使客户端从默认值 0 开始,请通过使用--autocommit=0 选项启动服务器来设置全局autocommit 值。要使用选项文件设置此变量,请包含以下行

    [mysqld]
    autocommit=0
  • automatic_sp_privileges

    命令行格式 --automatic-sp-privileges[={OFF|ON}]
    系统变量 automatic_sp_privileges
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    当此变量的值为 1(默认值)时,服务器会自动向存储例程的创建者授予EXECUTEALTER ROUTINE 权限,如果用户之前不能执行和更改或删除该例程。(删除例程需要ALTER ROUTINE 权限。)服务器还会在删除例程时自动从创建者那里删除这些权限。如果automatic_sp_privileges 为 0,则服务器不会自动添加或删除这些权限。

    例程的创建者是用于执行其CREATE 语句的帐户。这可能与例程定义中名为DEFINER 的帐户不同。

    如果使用mysqld 启动时使用--skip-new,则automatic_sp_privileges 设置为OFF

    另请参见第 27.2.2 节,“存储例程和 MySQL 权限”

  • auto_generate_certs

    命令行格式 --auto-generate-certs[={OFF|ON}]
    系统变量 auto_generate_certs
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    此变量控制服务器是否在数据目录中自动生成 SSL 密钥和证书文件,如果它们尚不存在。

    在启动时,如果auto_generate_certs 系统变量已启用,并且服务器端 SSL 文件不存在于数据目录中,则服务器会自动在数据目录中生成服务器端和客户端端 SSL 证书和密钥文件。这些证书在这种情况下始终会生成,无论其他 TLS 选项的值如何。证书和密钥文件允许使用 SSL 安全地建立客户端连接;请参见第 8.3.1 节,“配置 MySQL 以使用加密连接”

    有关 SSL 文件自动生成的更多信息,包括文件名和特性,请参见第 8.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”

    sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys 系统变量是相关的,但控制着为通过未加密连接使用 RSA 进行安全密码交换而自动生成所需的 RSA 密钥对文件。

  • back_log

    命令行格式 --back-log=#
    系统变量 back_log
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 -1(表示自动调整;请勿分配此字面值)
    最小值 1
    最大值 65535

    MySQL 可以拥有的未完成连接请求数。当主 MySQL 线程在很短的时间内收到非常多的连接请求时,就会用到这个值。然后,主线程需要一些时间(虽然很少)来检查连接并启动一个新线程。这back_log 值表示在此短时间内可以堆叠多少个请求,然后 MySQL 会暂时停止响应新的请求。仅当您预计在短时间内会有大量连接时,才需要增加此值。

    换句话说,此值是传入 TCP/IP 连接的监听队列的大小。您的操作系统对该队列的大小有自己的限制。Unix listen() 系统调用的手册页应该提供更多详细信息。查看您的操作系统文档以了解此变量的最大值。back_log 无法设置为超过您的操作系统限制。

    默认值为max_connections 的值,这使得允许的积压可以调整到允许的最大连接数。

  • basedir

    命令行格式 --basedir=dir_name
    系统变量 basedir
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 mysqld 安装目录的父目录

    MySQL 安装基本目录的路径。

  • big_tables

    命令行格式 --big-tables[={OFF|ON}]
    系统变量 big_tables
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果已启用,则服务器会将所有临时表存储在磁盘上,而不是存储在内存中。这可以防止大多数The table tbl_name is full 错误,这些错误与需要大型临时表的SELECT 操作有关,但也减慢了需要使用内存中表的查询速度。

    新连接的默认值为OFF(使用内存中临时表)。通常,应该永远不需要启用此变量。当内存中内部 临时表由TempTable 存储引擎(默认值)管理时,如果TempTable 存储引擎可以占用的最大内存量超出了,则TempTable 存储引擎会开始将数据存储到磁盘上的临时文件。当内存中临时表由MEMORY 存储引擎管理时,内存中表会根据需要自动转换为基于磁盘的表。有关更多信息,请参见第 10.4.4 节,“MySQL 中的内部临时表使用”

  • bind_address

    命令行格式 --bind-address=addr
    系统变量 bind_address
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 *

    MySQL 服务器在一个或多个网络套接字上监听 TCP/IP 连接。每个套接字都绑定到一个地址,但一个地址可以映射到多个网络接口。要指定服务器应如何监听 TCP/IP 连接,请在服务器启动时设置bind_address 系统变量。服务器还具有一个admin_address 系统变量,该变量允许在专用接口上进行管理连接。请参见第 7.1.12.1 节,“连接接口”

    如果指定了bind_address,它会接受一个或多个地址值的列表,每个值都可以指定单个非通配符 IP 地址或主机名。每个地址都可以包含网络命名空间说明符。如果仅指定一个地址,则它可以使用允许在多个网络接口上监听的通配符地址格式之一 (*0.0.0.0::)。多个地址由逗号分隔。当列出多个值时,每个值必须指定单个非通配符 IP 地址(IPv4 或 IPv6)或主机名,并且不允许使用通配符地址格式 (*0.0.0.0::)。

    IP 地址可以指定为 IPv4 或 IPv6 地址。对于任何主机名值,服务器都会将名称解析为 IP 地址,并绑定到该地址。如果主机名解析为多个 IP 地址,则服务器会使用第一个 IPv4 地址(如果有),否则使用第一个 IPv6 地址。

    服务器对不同类型的地址进行如下处理

    • 如果地址是 *,服务器将在所有服务器主机 IPv4 接口上接受 TCP/IP 连接,并且如果服务器主机支持 IPv6,则在所有 IPv6 接口上接受连接。使用此地址允许在所有服务器接口上进行 IPv4 和 IPv6 连接。此值是默认值。如果变量指定多个值的列表,则不允许此值。

    • 如果地址是 0.0.0.0,服务器将在所有服务器主机 IPv4 接口上接受 TCP/IP 连接。如果变量指定多个值的列表,则不允许此值。

    • 如果地址是 ::,服务器将在所有服务器主机 IPv4 和 IPv6 接口上接受 TCP/IP 连接。如果变量指定多个值的列表,则不允许此值。

    • 如果该地址是 IPv4 映射地址,则服务器会接受该地址的 TCP/IP 连接,无论是 IPv4 格式还是 IPv6 格式。例如,如果服务器绑定到 ::ffff:127.0.0.1,则客户端可以使用 --host=127.0.0.1--host=::ffff:127.0.0.1 连接。

    • 如果该地址是 常规 IPv4 或 IPv6 地址(例如 127.0.0.1::1),则服务器仅接受该 IPv4 或 IPv6 地址的 TCP/IP 连接。

    以下规则适用于为地址指定网络命名空间

    • 可以为 IP 地址或主机名指定网络命名空间。

    • 不能为通配符 IP 地址指定网络命名空间。

    • 对于给定地址,网络命名空间是可选的。如果给出,则必须将其指定为紧随地址之后的 /ns 后缀。

    • 没有 /ns 后缀的地址使用主机系统全局命名空间。因此,全局命名空间是默认值。

    • 具有 /ns 后缀的地址使用名为 ns 的命名空间。

    • 主机系统必须支持网络命名空间,并且每个命名命名空间都必须事先设置。命名不存在的命名空间会导致错误。

    • 如果变量值指定多个地址,则可以包括全局命名空间中的地址、命名命名空间中的地址或混合地址。

    有关网络命名空间的更多信息,请参见 第 7.1.14 节,“网络命名空间支持”

    如果绑定到任何地址失败,服务器将产生错误并且不会启动。

    示例

    • bind_address=*

      服务器在所有 IPv4 或 IPv6 地址上监听,如 * 通配符指定。

    • bind_address=198.51.100.20

      服务器仅在 198.51.100.20 IPv4 地址上监听。

    • bind_address=198.51.100.20,2001:db8:0:f101::1

      服务器在 198.51.100.20 IPv4 地址和 2001:db8:0:f101::1 IPv6 地址上监听。

    • bind_address=198.51.100.20,*

      这会导致错误,因为当 bind_address 指定多个值的列表时,不允许使用通配符地址。

    • bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

      服务器在 red 命名空间中的 198.51.100.20 IPv4 地址、blue 命名空间中的 2001:db8:0:f101::1 IPv6 地址和全局命名空间中的 192.0.2.50 IPv4 地址上监听。

    bind_address 指定单个值(通配符或非通配符)时,服务器将在单个套接字上监听,对于通配符地址,该套接字可能绑定到多个网络接口。当 bind_address 指定多个值的列表时,服务器将在每个值上监听一个套接字,每个套接字绑定到单个网络接口。套接字的数量与指定的值数量成线性关系。根据操作系统的连接接受效率,较长的值列表可能会导致接受 TCP/IP 连接的性能下降。

    由于为监听套接字和网络命名空间文件分配了文件描述符,因此可能需要增加 open_files_limit 系统变量。

    如果您打算将服务器绑定到特定地址,请确保 mysql.user 系统表中包含具有管理权限的帐户,您可以使用该帐户连接到该地址。否则,您将无法关闭服务器。例如,如果您将服务器绑定到 *,您可以使用所有现有帐户连接到它。但是,如果您将服务器绑定到 ::1,它只接受该地址上的连接。在这种情况下,首先确保 'root'@'::1' 帐户存在于 mysql.user 表中,以便您仍然可以连接到服务器以关闭它。

  • block_encryption_mode

    命令行格式 --block-encryption-mode=#
    系统变量 block_encryption_mode
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 aes-128-ecb

    此变量控制基于块的算法(如 AES)的块加密模式。它影响 AES_ENCRYPT()AES_DECRYPT() 的加密。

    block_encryption_mode 采用 aes-keylen-mode 格式的值,其中 keylen 是以位为单位的密钥长度,mode 是加密模式。该值不区分大小写。允许的 keylen 值是 128、192 和 256。允许的 mode 值是 ECBCBCCFB1CFB8CFB128OFB

    例如,此语句导致 AES 加密函数使用 256 位的密钥长度和 CBC 模式

    SET block_encryption_mode = 'aes-256-cbc';

    如果尝试将 block_encryption_mode 设置为包含不受支持的密钥长度或 SSL 库不支持的模式的值,则会发生错误。

  • build_id

    系统变量 build_id
    范围 全局
    动态
    SET_VAR 提示适用
    平台特定 Linux

    这是一个 160 位 SHA1 签名,它是在 Linux 系统上使用 -DWITH_BUILD_ID=ON(默认情况下启用)编译服务器时由链接器生成的,并转换为十六进制字符串。此只读值用作唯一的构建 ID,并在启动时写入服务器日志。

    build_id 在 Linux 以外的平台上不受支持。

  • bulk_insert_buffer_size

    命令行格式 --bulk-insert-buffer-size=#
    系统变量 bulk_insert_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8388608
    最小值 0
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295
    单位 字节/线程

    MyISAM 使用特殊的树状缓存来加快 INSERT ... SELECTINSERT ... VALUES (...), (...), ...LOAD DATA 的速度,这些语句用于向非空表中添加数据。此变量限制了每个线程缓存树的大小(以字节为单位)。将其设置为 0 将禁用此优化。默认值为 8MB。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • caching_sha2_password_digest_rounds

    命令行格式 --caching-sha2-password-digest-rounds=#
    系统变量 caching_sha2_password_digest_rounds
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 5000
    最小值 5000
    最大值 4095000

    caching_sha2_password 身份验证插件用于密码存储的哈希轮次次数。

    将哈希轮次次数增加到默认值以上会导致与增加量相关的性能下降

    • 创建使用 caching_sha2_password 插件的帐户不会影响创建帐户的客户端会话,但服务器必须执行哈希轮次才能完成操作。

    • 对于使用该帐户的客户端连接,服务器必须执行哈希轮次并将结果保存在缓存中。第一次客户端连接的登录时间会更长,但后续连接不会。此行为在每次服务器重启后都会发生。

  • caching_sha2_password_auto_generate_rsa_keys

    命令行格式 --caching-sha2-password-auto-generate-rsa-keys[={OFF|ON}]
    系统变量 caching_sha2_password_auto_generate_rsa_keys
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    服务器使用此变量来确定是否在数据目录中自动生成 RSA 私钥/公钥对文件(如果它们不存在)。

    在启动时,如果满足以下所有条件,服务器将在数据目录中自动生成 RSA 私钥/公钥对文件:sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys 系统变量已启用;未指定任何 RSA 选项;RSA 文件在数据目录中丢失。这些密钥对文件使用 RSA 通过非加密连接进行安全密码交换,用于由 sha256_password(已弃用)或 caching_sha2_password 插件验证的帐户;请参阅 第 8.4.1.3 节,“SHA-256 可插拔身份验证”第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”

    有关 RSA 文件自动生成的更多信息,包括文件名和特征,请参阅 第 8.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”

    auto_generate_certs 系统变量相关,但控制自动生成 SSL 证书和密钥文件,这些文件需要使用 SSL 进行安全连接。

  • caching_sha2_password_private_key_path

    命令行格式 --caching-sha2-password-private-key-path=file_name
    系统变量 caching_sha2_password_private_key_path
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 private_key.pem

    此变量指定 caching_sha2_password 身份验证插件的 RSA 私钥文件的路径名。如果文件名指定为相对路径,则将其解释为相对于服务器数据目录的相对路径。该文件必须是 PEM 格式。

    重要

    由于此文件存储私钥,因此应限制其访问模式,以便只有 MySQL 服务器可以读取它。

    有关 caching_sha2_password 的信息,请参阅 第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”

  • caching_sha2_password_public_key_path

    命令行格式 --caching-sha2-password-public-key-path=file_name
    系统变量 caching_sha2_password_public_key_path
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 public_key.pem

    此变量指定 caching_sha2_password 身份验证插件的 RSA 公钥文件的路径名。如果文件名指定为相对路径,则将其解释为相对于服务器数据目录的相对路径。该文件必须是 PEM 格式。

    有关 caching_sha2_password 的信息,包括客户端如何请求 RSA 公钥的信息,请参阅 第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”

  • character_set_client

    系统变量 character_set_client
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb4

    来自客户端的语句的字符集。此变量的会话值使用客户端连接到服务器时客户端请求的字符集进行设置。(许多客户端支持 --default-character-set 选项来启用显式指定此字符集。另请参阅 第 12.4 节,“连接字符集和排序规则”。)如果客户端请求的值未知或不可用,或者服务器配置为忽略客户端请求,则变量的全局值用于设置会话值。这可能发生在客户端请求服务器未知的字符集时,例如,当启用日语的客户端请求连接到未配置 sjis 支持的服务器时的 sjis 时。

    某些字符集不能用作客户端字符集。尝试将它们用作 character_set_client 值会导致错误。请参阅 不允许的客户端字符集

  • character_set_connection

    系统变量 character_set_connection
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb4

    用于未指定字符集引入符的文字和数字到字符串转换的字符集。有关引入符的信息,请参见第 12.3.8 节,“字符集引入符”

  • character_set_database

    系统变量 character_set_database
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb4
    脚注 此选项是动态的,但应仅由服务器设置。您不应该手动设置此变量。

    默认数据库使用的字符集。服务器在默认数据库发生更改时设置此变量。如果没有默认数据库,该变量的值与character_set_server相同。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

    全局character_set_databasecollation_database系统变量已弃用;预计它们将在未来的 MySQL 版本中删除。

    为会话character_set_databasecollation_database系统变量赋值已弃用,赋值会产生警告。预计会话变量将在未来的 MySQL 版本中变为只读(赋值将产生错误),在该版本中,仍然可以访问会话变量以确定默认数据库的数据库字符集和排序规则。

  • character_set_filesystem

    命令行格式 --character-set-filesystem=name
    系统变量 character_set_filesystem
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 binary

    文件系统字符集。此变量用于解释引用文件名的字符串文字,例如在LOAD DATASELECT ... INTO OUTFILE语句以及LOAD_FILE()函数中。在尝试打开文件之前,此类文件名将从character_set_client转换为character_set_filesystem。默认值为binary,这意味着不会进行转换。对于允许使用多字节文件名的系统,其他值可能更合适。例如,如果系统使用 UTF-8 表示文件名,请将character_set_filesystem设置为'utf8mb4'

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • character_set_results

    系统变量 character_set_results
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb4

    用于将查询结果返回给客户端的字符集。这包括结果数据(例如列值)、结果元数据(例如列名)和错误消息。

  • character_set_server

    命令行格式 --character-set-server=name
    系统变量 character_set_server
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb4

    服务器的默认字符集。请参见第 12.15 节,“字符集配置”。如果设置此变量,还应设置collation_server以指定字符集的排序规则。

  • character_set_system

    系统变量 character_set_system
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb3

    服务器用于存储标识符的字符集。该值始终为utf8mb3

  • character_sets_dir

    命令行格式 --character-sets-dir=dir_name
    系统变量 character_sets_dir
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名

    安装字符集的目录。请参见第 12.15 节,“字符集配置”

  • check_proxy_users

    命令行格式 --check-proxy-users[={OFF|ON}]
    系统变量 check_proxy_users
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    一些身份验证插件为自身实现代理用户映射(例如,PAM 和 Windows 身份验证插件)。其他身份验证插件默认不支持代理用户。在这些插件中,有些可以请求 MySQL 服务器本身根据授予的代理权限映射代理用户:mysql_native_password(已弃用)、sha256_password(已弃用)。

    如果check_proxy_users系统变量已启用,服务器将为任何发出此类请求的身份验证插件执行代理用户映射。但是,也可能需要启用特定于插件的系统变量才能利用服务器代理用户映射支持

    有关用户代理的信息,请参见第 8.2.19 节,“代理用户”

  • collation_connection

    系统变量 collation_connection
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串

    连接字符集的排序规则。 collation_connection对于文字字符串的比较很重要。对于具有列值的字符串的比较,collation_connection无关紧要,因为列有自己的排序规则,该排序规则具有更高的排序规则优先级(请参见第 12.8.4 节,“表达式中的排序规则强制性”)。

    对该变量使用用户定义排序规则的名称会引发警告。

  • collation_database

    系统变量 collation_database
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb4_0900_ai_ci
    脚注 此选项是动态的,但应仅由服务器设置。您不应该手动设置此变量。

    默认数据库使用的排序规则。服务器在默认数据库发生更改时设置此变量。如果没有默认数据库,该变量的值与collation_server相同。

    全局character_set_databasecollation_database系统变量已弃用;预计它们将在未来的 MySQL 版本中删除。

    为会话character_set_databasecollation_database系统变量赋值已弃用,赋值会产生警告。预计会话变量将在未来的 MySQL 版本中变为只读(赋值将产生错误),在该版本中,仍然可以访问会话变量以确定默认数据库的数据库字符集和排序规则。

    collation_database使用用户定义排序规则的名称会引发警告。

  • collation_server

    命令行格式 --collation-server=name
    系统变量 collation_server
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 utf8mb4_0900_ai_ci

    服务器的默认排序规则。请参见第 12.15 节,“字符集配置”

    将其设置为用户定义排序规则的名称会引发警告。

  • completion_type

    命令行格式 --completion-type=#
    系统变量 completion_type
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 NO_CHAIN
    有效值

    NO_CHAIN

    CHAIN

    RELEASE

    0

    1

    2

    事务完成类型。此变量可以采用下表中所示的值。可以使用名称值或相应的整数值来分配变量。

    描述
    NO_CHAIN(或 0) COMMITROLLBACK不受影响。这是默认值。
    CHAIN(或 1) COMMITROLLBACK分别等效于COMMIT AND CHAINROLLBACK AND CHAIN。(新事务立即以与刚刚结束的事务相同的隔离级别启动。)
    RELEASE(或 2) COMMITROLLBACK分别等效于COMMIT RELEASEROLLBACK RELEASE。(服务器在终止事务后断开连接。)

    completion_type影响以START TRANSACTIONBEGIN开头并以COMMITROLLBACK结束的事务。它不适用于执行第 15.3.3 节,“导致隐式提交的语句”中列出的语句而导致的隐式提交。它也不适用于XA COMMITXA ROLLBACKautocommit=1时。

  • component_scheduler.enabled

    命令行格式 --component-scheduler.enabled[=value]
    系统变量 component_scheduler.enabled
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    启动时设置为OFF时,后台线程不会启动。任务仍然可以调度,但直到启用component_scheduler才会运行。启动时设置为ON时,组件将全面运行。

    也可以动态设置该值以获得以下效果

    • ON启动后台线程,该线程立即开始为队列提供服务。

    • OFF表示后台线程的终止,该线程等待它结束。后台线程在访问队列以检查要执行的任务之前,会检查终止标志。

  • concurrent_insert

    命令行格式 --concurrent-insert[=value]
    系统变量 concurrent_insert
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 AUTO
    有效值

    NEVER

    AUTO

    ALWAYS

    0

    1

    2

    如果为AUTO(默认值),MySQL 允许INSERTSELECT语句在没有数据文件中间的空闲块的MyISAM表上并发运行。

    此变量可以采用下表中所示的值。可以使用名称值或相应的整数值来分配变量。

    描述
    NEVER(或 0) 禁用并发插入
    AUTO(或 1) (默认值)为没有空洞的MyISAM表启用并发插入
    ALWAYS(或 2) 为所有MyISAM表启用并发插入,即使是包含空洞的表。对于包含空洞的表,如果它正在被另一个线程使用,新行将插入到表的末尾。否则,MySQL 将获取一个正常的写锁并将该行插入到空洞中。

    如果您使用 mysqld 启动 --skip-newconcurrent_insert 将被设置为 NEVER

    另请参阅 第 10.11.3 节“并发插入”

  • connect_timeout

    命令行格式 --connect-timeout=#
    系统变量 connect_timeout
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 10
    最小值 2
    最大值 31536000
    单位

    mysqld 服务器等待连接数据包的时间(以秒为单位),在此时间之后将使用 Bad handshake 进行响应。默认值为 10 秒。

    如果客户端经常遇到以下形式的错误,则增加 connect_timeout 值可能会有所帮助:Lost connection to MySQL server at 'XXX', system error: errno

  • connection_memory_chunk_size

    命令行格式 --connection-memory-chunk-size=#
    系统变量 connection_memory_chunk_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8192
    最小值 0
    最大值 536870912
    单位 字节

    设置用于更新全局内存使用量计数器 Global_connection_memory 的分块大小。仅当所有用户连接的总内存消耗量变化超过此值时,才会更新状态变量。通过设置 connection_memory_chunk_size = 0 来禁用更新。

    内存计算不包括系统用户(如 MySQL root 用户)使用的任何内存。由 InnoDB 缓冲池使用的内存也不包括在内。

    您必须具有 SYSTEM_VARIABLES_ADMINSUPER 权限才能设置此变量。

  • connection_memory_limit

    命令行格式 --connection-memory-limit=#
    系统变量 connection_memory_limit
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 18446744073709551615
    最小值 2097152
    最大值 18446744073709551615
    单位 字节

    设置单个用户连接可以使用内存的最大数量。如果任何用户连接使用超过此值,则来自该连接的所有查询都将被拒绝(包括当前正在运行的任何查询),并出现 ER_CONN_LIMIT 错误。

    此变量设置的限制不适用于系统用户或 MySQL root 帐户。由 InnoDB 缓冲池使用的内存也不包括在内。

    您必须具有 SYSTEM_VARIABLES_ADMINSUPER 权限才能设置此变量。

  • core_file

    系统变量 core_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果服务器意外退出,是否写入核心文件。此变量由 --core-file 选项设置。

  • create_admin_listener_thread

    命令行格式 --create-admin-listener-thread[={OFF|ON}]
    系统变量 create_admin_listener_thread
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否使用专用监听线程来处理管理网络接口上的客户端连接(请参见 第 7.1.12.1 节“连接接口”)。默认值为 OFF;也就是说,主接口上普通连接的管理器线程也处理管理接口的连接。

    根据平台类型和工作负载等因素,您可能会发现此变量的一种设置比另一种设置的性能更好。

    如果未指定 admin_address,则设置 create_admin_listener_thread 不会产生任何影响,因为在这种情况下,服务器不会维护任何管理网络接口。

  • cte_max_recursion_depth

    命令行格式 --cte-max-recursion-depth=#
    系统变量 cte_max_recursion_depth
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1000
    最小值 0
    最大值 4294967295

    公用表表达式 (CTE) 的最大递归深度。服务器将终止任何递归级别超过此变量值的 CTE 的执行。有关更多信息,请参见 限制公用表表达式递归

  • datadir

    命令行格式 --datadir=dir_name
    系统变量 datadir
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名

    MySQL 服务器数据目录的路径。相对于当前目录解析相对路径。如果您希望服务器自动启动(也就是说,在您无法预先知道当前目录的上下文中),最好将 datadir 值指定为绝对路径。

  • debug

    命令行格式 --debug[=debug_options]
    系统变量 debug
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值(Unix) d:t:i:o,/tmp/mysqld.trace
    默认值(Windows) d:t:i:O,\mysqld.trace

    此变量指示当前调试设置。它仅适用于使用调试支持构建的服务器。初始值来自服务器启动时给定的 --debug 选项实例的值。全局和会话值可以在运行时设置。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

    分配以 +- 开头的值会导致该值加到或减去当前值。

    mysql> SET debug = 'T';
    mysql> SELECT @@debug;
    +---------+
    | @@debug |
    +---------+
    | T       |
    +---------+
    
    mysql> SET debug = '+P';
    mysql> SELECT @@debug;
    +---------+
    | @@debug |
    +---------+
    | P:T     |
    +---------+
    
    mysql> SET debug = '-P';
    mysql> SELECT @@debug;
    +---------+
    | @@debug |
    +---------+
    | T       |
    +---------+

    有关更多信息,请参见 第 7.9.4 节“DBUG 包”

  • debug_sync

    系统变量 debug_sync
    范围 会话
    动态
    SET_VAR 提示适用
    类型 字符串

    此变量是 Debug Sync 功能的用户界面。使用 Debug Sync 要求 MySQL 使用 -DWITH_DEBUG=ON CMake 选项进行配置(请参见 第 2.8.7 节“MySQL 源代码配置选项”);否则,此系统变量将不可用。

    全局变量值是只读的,指示该功能是否启用。默认情况下,Debug Sync 已禁用,debug_sync 的值为 OFF。如果服务器使用 --debug-sync-timeout=N 启动,其中 N 是大于 0 的超时值,则 Debug Sync 已启用,debug_sync 的值为 ON - current signal,后跟信号名称。此外,N 将成为各个同步点的默认超时值。

    任何用户都可以读取会话值,它与全局变量的值相同。可以设置会话值来控制同步点。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

    有关 Debug Sync 功能及其使用同步点的说明,请参见 MySQL 内部:测试同步

  • default_collation_for_utf8mb4

    系统变量 default_collation_for_utf8mb4
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    有效值

    utf8mb4_0900_ai_ci

    utf8mb4_general_ci

    重要

    default_collation_for_utf8mb4 系统变量用于 MySQL Replication 的内部使用。

    此变量由服务器设置为 utf8mb4 字符集的默认排序规则。该变量的值将从源复制到副本,以便副本能够正确处理来自具有不同 utf8mb4 默认排序规则的源的数据。此变量主要用于支持从 MySQL 5.7 或更早版本的复制源服务器到更高版本的 MySQL 副本服务器的复制,或使用 MySQL 5.7 主节点和一个或多个 MySQL 8.0 或更高版本的从属节点的组复制。MySQL 5.7 中 utf8mb4 的默认排序规则是 utf8mb4_general_ci,而在更高版本系列中则是 utf8mb4_0900_ai_ci。该变量在早于 MySQL 8.0 的版本中不存在,因此,如果副本没有收到该变量的值,则假定源来自早期版本,并将该变量的值设置为以前的默认排序规则 utf8mb4_general_ci

    在以下语句中使用默认的 utf8mb4 排序规则

    另请参阅 第 12.9 节“Unicode 支持”

  • default_password_lifetime

    命令行格式 --default-password-lifetime=#
    系统变量 default_password_lifetime
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 65535
    单位

    此变量定义全局自动密码过期策略。默认的 default_password_lifetime 值为 0,这将禁用自动密码过期。如果 default_password_lifetime 的值为正整数 N,则表示允许的密码生存期;密码必须每 N 天更改一次。

    可以使用 CREATE USERALTER USER 语句的密码过期选项,按需为各个帐户覆盖全局密码过期策略。请参见 第 8.2.15 节“密码管理”

  • default_storage_engine

    命令行格式 --default-storage-engine=name
    系统变量 default_storage_engine
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 InnoDB

    表的默认存储引擎。请参见 第 18 章“备用存储引擎”。此变量仅为永久表设置存储引擎。若要为 TEMPORARY 表设置存储引擎,请设置 default_tmp_storage_engine 系统变量。

    若要查看哪些存储引擎可用且已启用,请使用 SHOW ENGINES 语句或查询 INFORMATION_SCHEMA ENGINES 表。

    如果您在服务器启动时禁用默认存储引擎,则必须将永久表和 TEMPORARY 表的默认引擎设置为不同的引擎,否则服务器将无法启动。

  • default_table_encryption

    命令行格式 --default-table-encryption[={OFF|ON}]
    系统变量 default_table_encryption
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    定义在创建模式和通用表空间时应用于它们的默认加密设置,这些设置在没有指定ENCRYPTION子句的情况下创建。

    default_table_encryption变量仅适用于用户创建的模式和通用表空间。 它不控制mysql系统表空间的加密。

    设置default_table_encryption的运行时值需要SYSTEM_VARIABLES_ADMINTABLE_ENCRYPTION_ADMIN权限,或者已弃用的SUPER权限。

    default_table_encryption支持SET PERSISTSET PERSIST_ONLY语法。 请参阅第 7.1.9.3 节,“持久系统变量”

    有关更多信息,请参阅为模式和通用表空间定义加密默认值

  • default_tmp_storage_engine

    命令行格式 --default-tmp-storage-engine=name
    系统变量 default_tmp_storage_engine
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 InnoDB

    TEMPORARY表(使用CREATE TEMPORARY TABLE创建)的默认存储引擎。 若要为永久表设置存储引擎,请设置default_storage_engine系统变量。 还请参阅有关该变量的讨论,了解可能的取值。

    如果您在服务器启动时禁用默认存储引擎,则必须将永久表和 TEMPORARY 表的默认引擎设置为不同的引擎,否则服务器将无法启动。

  • default_week_format

    命令行格式 --default-week-format=#
    系统变量 default_week_format
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 7

    WEEK()函数使用的默认模式值。 请参阅第 14.7 节,“日期和时间函数”

  • delay_key_write

    命令行格式 --delay-key-write[={OFF|ON|ALL}]
    系统变量 delay_key_write
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ON
    有效值

    OFF

    ON

    ALL

    此变量指定如何使用延迟键写入。 它仅适用于MyISAM表。 延迟键写入会导致键缓冲区在写入之间不会刷新。 另请参阅第 18.2.1 节,“MyISAM 启动选项”

    此变量可以具有以下值之一,以影响对CREATE TABLE语句中可使用的DELAY_KEY_WRITE表选项的处理。

    选项 描述
    OFF DELAY_KEY_WRITE被忽略。
    ON MySQL 遵守在CREATE TABLE语句中指定的任何DELAY_KEY_WRITE选项。 这是默认值。
    ALL 所有新打开的表都将被视为已启用DELAY_KEY_WRITE选项创建的表。
    注意

    如果将此变量设置为ALL,则在表使用时,您不应该从另一个程序(例如另一个 MySQL 服务器或myisamchk)中使用MyISAM表。 这样做会导致索引损坏。

    如果为表启用了DELAY_KEY_WRITE,则键缓冲区不会在每次索引更新时为该表刷新,而仅在表关闭时刷新。 这会大大加快键的写入速度,但如果您使用此功能,则应通过以下方式启动服务器来添加对所有MyISAM表的自动检查:myisam_recover_options系统变量设置(例如,myisam_recover_options='BACKUP,FORCE')。 请参阅第 7.1.8 节,“服务器系统变量”第 18.2.1 节,“MyISAM 启动选项”

    如果您使用--skip-new启动mysqld,则delay_key_write将设置为OFF

    警告

    如果您使用--external-locking启用外部锁定,则对于使用延迟键写入的表,不会保护索引免遭损坏。

  • delayed_insert_limit

    命令行格式 --delayed-insert-limit=#
    已弃用
    系统变量 delayed_insert_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 100
    最小值 1
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    此系统变量已弃用(因为DELAYED插入不受支持),您应该预计它将在将来的版本中被删除。

  • delayed_insert_timeout

    命令行格式 --delayed-insert-timeout=#
    已弃用
    系统变量 delayed_insert_timeout
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 300
    最小值 1
    最大值 31536000
    单位

    此系统变量已弃用(因为DELAYED插入不受支持),您应该预计它将在将来的版本中被删除。

  • delayed_queue_size

    命令行格式 --delayed-queue-size=#
    已弃用
    系统变量 delayed_queue_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1000
    最小值 1
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    此系统变量已弃用(因为DELAYED插入不受支持),您应该预计它将在将来的版本中被删除。

  • disabled_storage_engines

    命令行格式 --disabled-storage-engines=engine[,engine]...
    系统变量 disabled_storage_engines
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 空字符串

    此变量指示哪些存储引擎不能用于创建表或表空间。 例如,若要防止创建新的MyISAMFEDERATED表,请在服务器选项文件中使用以下行启动服务器

    [mysqld]
    disabled_storage_engines="MyISAM,FEDERATED"

    默认情况下,disabled_storage_engines为空(没有禁用引擎),但可以将其设置为一个或多个引擎的逗号分隔列表(不区分大小写)。 列表中命名的任何引擎都不能用于使用CREATE TABLECREATE TABLESPACE创建表或表空间,也不能与ALTER TABLE ... ENGINEALTER TABLESPACE ... ENGINE一起使用来更改现有表或表空间的存储引擎。 尝试执行此操作会导致出现ER_DISABLED_STORAGE_ENGINE错误。

    disabled_storage_engines不会限制现有表的其他 DDL 语句,例如CREATE INDEXTRUNCATE TABLEANALYZE TABLEDROP TABLEDROP TABLESPACE。 这允许顺利过渡,以便可以使用已禁用的引擎的现有表或表空间通过ALTER TABLE ... ENGINE permitted_engine等方式迁移到允许的引擎。

    允许将default_storage_enginedefault_tmp_storage_engine系统变量设置为已禁用的存储引擎。 尽管这可能是在开发环境中识别使用已禁用引擎的应用程序的有用技术,但这可能会导致应用程序行为异常或失败,以便可以修改它们。

    如果服务器使用以下任何选项启动,则disabled_storage_engines将被禁用且无效:--initialize--initialize-insecure--skip-grant-tables

  • disconnect_on_expired_password

    命令行格式 --disconnect-on-expired-password[={OFF|ON}]
    系统变量 disconnect_on_expired_password
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    此变量控制服务器如何处理密码已过期的客户端

    有关与已过期密码处理相关的客户端和服务器设置交互的更多信息,请参阅第 8.2.16 节,“服务器处理已过期密码”

  • div_precision_increment

    命令行格式 --div-precision-increment=#
    系统变量 div_precision_increment
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4
    最小值 0
    最大值 30

    此变量指示使用/运算符执行的除法运算结果的比例应增加的位数。 默认值为 4。 最小值和最大值分别为 0 和 30。 以下示例说明了增加默认值的效果。

    mysql> SELECT 1/7;
    +--------+
    | 1/7    |
    +--------+
    | 0.1429 |
    +--------+
    mysql> SET div_precision_increment = 12;
    mysql> SELECT 1/7;
    +----------------+
    | 1/7            |
    +----------------+
    | 0.142857142857 |
    +----------------+
  • dragnet.log_error_filter_rules

    命令行格式 --dragnet.log-error-filter-rules=value
    系统变量 dragnet.log_error_filter_rules
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 IF prio>=INFORMATION THEN drop. IF EXISTS source_line THEN unset source_line.

    控制log_filter_dragnet错误日志过滤器组件操作的过滤器规则。 如果未安装log_filter_dragnet,则dragnet.log_error_filter_rules不可用。 如果log_filter_dragnet已安装但未启用,则对dragnet.log_error_filter_rules的更改不会产生任何影响。

    默认值的效果类似于log_sink_internal过滤器在log_error_verbosity=2设置下的过滤。

    dragnet.Status状态变量可用于确定最近一次对dragnet.log_error_filter_rules的赋值的结果。

  • enterprise_encryption.maximum_rsa_key_size

    命令行格式 --enterprise-encryption.maximum-rsa-key-size=#
    系统变量 enterprise_encryption.maximum_rsa_key_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4096
    最小值 2048
    最大值 16384

    此变量限制 MySQL Enterprise Encryption 生成的 RSA 密钥的最大大小。 仅当安装了 MySQL Enterprise Encryption 组件component_enterprise_encryption时,此变量才可用。

    最低设置是 2048 位,这是当前最佳实践可接受的最小 RSA 密钥长度。默认设置是 4096 位。最高设置是 16384 位。生成更长的密钥会消耗大量的 CPU 资源,因此您可以使用此设置将密钥限制在满足您的安全需求的长度,同时平衡资源使用。有关更多信息,请参阅 第 8.6.2 节,“配置 MySQL 企业版加密”

  • enterprise_encryption.rsa_support_legacy_padding

    命令行格式 --enterprise-encryption.rsa_support_legacy_padding[={OFF|ON}]
    系统变量 enterprise_encryption.rsa_support_legacy_padding
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量控制是否可以解密或验证 MySQL 企业版加密使用旧的 openssl_udf 共享库函数生成的加密数据和签名,由 MySQL 企业版加密组件 (component_enterprise_encryption) 完成。如果安装了 MySQL 企业版加密组件,则该变量可用。

    为了使组件函数支持对由旧的 openssl_udf 共享库函数生成的内容进行解密和验证,您必须将系统变量填充设置为 ON。当设置 ON 时,如果组件函数在假设内容具有 RSAES-OAEP 或 RSASSA-PSS 方案(如组件所用)的情况下无法解密或验证内容,则它们会再次尝试,假设内容具有 RSAES-PKCS1-v1_5 或 RSASSA-PKCS1-v1_5 方案(如 openssl_udf 共享库函数所用)。当设置 OFF 时,如果组件函数无法使用其正常方案解密或验证内容,则它们将返回空输出。有关更多信息,请参阅 第 8.6.2 节,“配置 MySQL 企业版加密”

  • end_markers_in_json

    命令行格式 --end-markers-in-json[={OFF|ON}]
    系统变量 end_markers_in_json
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否应该在优化器 JSON 输出中添加结束标记。请参阅 MySQL 内部:end_markers_in_json 系统变量

  • eq_range_index_dive_limit

    命令行格式 --eq-range-index-dive-limit=#
    系统变量 eq_range_index_dive_limit
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 200
    最小值 0
    最大值 4294967295

    此变量表示当优化器应该从使用索引遍历切换到使用索引统计来估计限定行数时,等式比较条件中的等式范围数量。它适用于对具有以下两种等效形式的表达式的评估,其中优化器使用非唯一索引来查找 col_name

    col_name IN(val1, ..., valN)
    col_name = val1 OR ... OR col_name = valN

    在这两种情况下,表达式都包含 N 个等式范围。优化器可以使用索引遍历或索引统计来进行行估计。如果 eq_range_index_dive_limit 大于 0,则如果存在 eq_range_index_dive_limit 个或更多等式范围,优化器将使用现有索引统计而不是索引遍历。因此,为了允许对多达 N 个等式范围使用索引遍历,请将 eq_range_index_dive_limit 设置为 N + 1。要禁用索引统计的使用并始终使用索引遍历,而不管 N 的值如何,请将 eq_range_index_dive_limit 设置为 0。

    有关更多信息,请参阅 对多值比较的等式范围优化

    要更新表索引统计以获得最佳估计,请使用 ANALYZE TABLE

  • error_count

    由生成消息的最后一条语句导致的错误数量。此变量是只读的。请参阅 第 15.7.7.18 节,“SHOW ERRORS 语句”

  • event_scheduler

    命令行格式 --event-scheduler[=value]
    系统变量 event_scheduler
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ON
    有效值

    ON

    OFF

    DISABLED

    此变量启用或禁用事件调度程序,并启动或停止事件调度程序。可能的运行状况值是 ONOFFDISABLED。将事件调度程序设置为 OFF 与禁用事件调度程序不同,禁用事件调度程序需要将状态设置为 DISABLED。此变量及其对事件调度程序操作的影响在 第 27.4.2 节,“事件调度程序配置” 中进行了更详细的讨论。

  • explain_format

    命令行格式 --explain-format=format
    系统变量 explain_format
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 TRADITIONAL
    有效值

    TRADITIONAL (DEFAULT)

    JSON

    TREE

    此变量确定 EXPLAIN 在显示查询执行计划时,在没有 FORMAT 选项的情况下使用的默认输出格式。这里列出了可能的值及其影响

    • TRADITIONAL:使用 MySQL 的传统基于表的输出,就像指定了 FORMAT=TRADITIONAL 作为 EXPLAIN 语句的一部分一样。这是变量的默认值。DEFAULT 也作为 TRADITIONAL 的同义词受支持,并且具有完全相同的效果。

      注意

      DEFAULT 不能用作 EXPLAIN 语句的 FORMAT 选项的一部分。

    • JSON:使用 JSON 输出格式,就像指定了 FORMAT=JSON 一样。

    • TREE:使用基于树的输出格式,就像指定了 FORMAT=TREE 一样。

    此变量的设置也会影响 EXPLAIN ANALYZE。为此,DEFAULTTRADITIONAL 被解释为 TREE。如果 explain_format 的值为 JSON,并且发出没有 FORMAT 选项的 EXPLAIN ANALYZE 语句,则该语句会引发错误 (ER_NOT_SUPPORTED_YET)。

    使用具有 EXPLAINEXPLAIN ANALYZE 的格式说明符将覆盖 explain_format 的任何设置。

    当此语句用于显示有关表列的信息时,explain_format 系统变量不会影响 EXPLAIN 输出。

    设置 explain_format 的会话值不需要任何特殊权限;在全局级别设置它需要 SYSTEM_VARIABLES_ADMIN(或已弃用的 SUPER 权限)。请参阅 第 7.1.9.1 节,“系统变量权限”

    有关更多信息和示例,请参阅 获取执行计划信息

  • explain_json_format_version

    命令行格式 --explain-json-format-version=#
    系统变量 explain_json_format_version
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 2

    确定由 EXPLAIN FORMAT=JSON 语句使用的 JSON 输出格式的版本。将此变量设置为 1 将导致服务器使用版本 1,这是在旧版 MySQL 中从此类语句输出的线性格式;这是 MySQL 8.4 中的默认值。将 explain_json_format_version 设置为 2 将导致使用版本 2 格式;此 JSON 输出格式基于访问路径,旨在提供与未来版本的 MySQL 优化器的更好的兼容性。

    有关使用示例,请参阅 获取执行计划信息

  • explicit_defaults_for_timestamp

    命令行格式 --explicit-defaults-for-timestamp[={OFF|ON}]
    已弃用
    系统变量 explicit_defaults_for_timestamp
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    此系统变量确定服务器是否为 TIMESTAMP 列中的默认值和 NULL 值处理启用某些非标准行为。默认情况下,explicit_defaults_for_timestamp 已启用,这将禁用非标准行为。禁用 explicit_defaults_for_timestamp 将导致警告。

    如果 explicit_defaults_for_timestamp 被禁用,服务器将启用非标准行为,并按如下方式处理 TIMESTAMP

    • 未显式声明具有 NULL 属性的 TIMESTAMP 列会自动声明具有 NOT NULL 属性。允许为这样的列分配 NULL 值,并将列设置为当前时间戳。 例外:尝试将 NULL 插入到声明为 TIMESTAMP NOT NULL 的生成列中将被拒绝,并出现错误。

    • 表中的第一个 TIMESTAMP 列,如果未显式声明具有 NULL 属性或显式 DEFAULTON UPDATE 属性,则会自动声明具有 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 属性。

    • 第一个 TIMESTAMP 列之后的 TIMESTAMP 列,如果未显式声明具有 NULL 属性或显式 DEFAULT 属性,则会自动声明为 DEFAULT '0000-00-00 00:00:00' 时间戳)。对于为这样的列未指定显式值的插入行,该列将被分配 '0000-00-00 00:00:00',并且不会出现警告。

      根据是否启用了严格 SQL 模式或 NO_ZERO_DATE SQL 模式,'0000-00-00 00:00:00' 的默认值可能无效。请注意,TRADITIONAL SQL 模式包括严格模式和 NO_ZERO_DATE。请参阅 第 7.1.11 节,“服务器 SQL 模式”

    上面描述的非标准行为已弃用;预计它们将在将来的 MySQL 版本中删除。

    如果 explicit_defaults_for_timestamp 已启用,则服务器将禁用非标准行为,并按如下方式处理 TIMESTAMP

    • 无法为 TIMESTAMP 列分配 NULL 值以将其设置为当前时间戳。要分配当前时间戳,请将列设置为 CURRENT_TIMESTAMP 或其同义词,如 NOW()

    • TIMESTAMP 列没有显式声明 NOT NULL 属性,会自动声明 NULL 属性,并允许 NULL 值。将此类列的值设置为 NULL 将将其设置为 NULL,而不是当前时间戳。

    • TIMESTAMP 列声明了 NOT NULL 属性,不允许 NULL 值。对于为这种列指定 NULL 的插入,结果要么是单行插入在启用严格 SQL 模式下的错误,要么是针对禁用严格 SQL 模式的多行插入插入 '0000-00-00 00:00:00'。在任何情况下,将列的值设置为 NULL 都不会将其设置为当前时间戳。

    • TIMESTAMP 列显式声明了 NOT NULL 属性且没有显式 DEFAULT 属性,将被视为没有默认值。对于没有为这种列指定显式值的插入行,结果取决于 SQL 模式。如果启用严格 SQL 模式,则会发生错误。如果未启用严格 SQL 模式,则该列将声明为具有隐式默认值 '0000-00-00 00:00:00',并会发出警告。这类似于 MySQL 如何处理其他时间类型,例如 DATETIME

    • 没有 TIMESTAMP 列会自动声明 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 属性。这些属性必须显式指定。

    • 表中的第一个 TIMESTAMP 列的处理方式与第一个 TIMESTAMP 列后的 TIMESTAMP 列没有区别。

    如果在服务器启动时禁用了 explicit_defaults_for_timestamp,则错误日志中会出现此警告

    [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
    Please use --explicit_defaults_for_timestamp server option (see
    documentation for more details).

    如警告所示,要禁用已弃用的非标准行为,请在服务器启动时启用 explicit_defaults_for_timestamp 系统变量。

    注意

    explicit_defaults_for_timestamp 本身已弃用,因为它的唯一目的是允许控制在将来的 MySQL 版本中将删除的已弃用的 TIMESTAMP 行为。当删除这些行为时,预计 explicit_defaults_for_timestamp 也将被删除。

    有关更多信息,请参见 第 13.2.5 节“TIMESTAMP 和 DATETIME 的自动初始化和更新”

  • external_user

    系统变量 external_user
    范围 会话
    动态
    SET_VAR 提示适用
    类型 字符串

    在身份验证过程中使用的外部用户名,由用于验证客户端的插件设置。使用本机(内置)MySQL 身份验证,或者如果插件未设置该值,则此变量为 NULL。请参见 第 8.2.19 节“代理用户”

  • flush

    命令行格式 --flush[={OFF|ON}]
    系统变量 flush
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果为 ON,服务器将在每个 SQL 语句之后刷新(同步)所有更改到磁盘。通常,MySQL 只会在每个 SQL 语句之后将所有更改写入磁盘,并让操作系统处理同步到磁盘。请参见 第 B.3.3.3 节“如果 MySQL 持续崩溃怎么办”。如果您使用 --flush 选项启动 mysqld,则此变量将设置为 ON

    注意

    如果启用了 flush,则 flush_time 的值无关紧要,对 flush_time 的更改不会影响刷新行为。

  • flush_time

    命令行格式 --flush-time=#
    系统变量 flush_time
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 31536000
    单位

    如果将其设置为非零值,则每隔 flush_time 秒关闭所有表,以释放资源并将未刷新的数据同步到磁盘。此选项最好仅在资源有限的系统上使用。

    注意

    如果启用了 flush,则 flush_time 的值无关紧要,对 flush_time 的更改不会影响刷新行为。

  • foreign_key_checks

    系统变量 foreign_key_checks
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    如果设置为 1(默认值),则会检查外键约束。如果设置为 0,则会忽略外键约束,但有几个例外。重新创建已删除的表时,如果表定义不符合引用该表的外部键约束,则会返回错误。同样,ALTER TABLE 操作如果外键定义格式错误,也会返回错误。有关更多信息,请参见 第 15.1.20.5 节“外部键约束”

    设置此变量对 NDB 表的影响与对 InnoDB 表的影响相同。通常,您会在正常操作期间启用此设置,以强制执行 参照完整性。禁用外部键检查对于以与父/子关系所需的顺序不同的顺序重新加载 InnoDB 表很有用。请参见 第 15.1.20.5 节“外部键约束”

    foreign_key_checks 设置为 0 还会影响数据定义语句:DROP SCHEMA 会删除架构,即使它包含具有外部键的表,而这些外部键被架构外部的表引用,并且 DROP TABLE 会删除具有被其他表引用的外部键的表。

    注意

    foreign_key_checks 设置为 1 不会触发对现有表数据的扫描。因此,在 foreign_key_checks = 0 时添加到表中的行不会被验证一致性。

    即使 foreign_key_checks=0,也不允许删除外部键约束所需的索引。必须在删除索引之前删除外部键约束。

  • ft_boolean_syntax

    命令行格式 --ft-boolean-syntax=name
    系统变量 ft_boolean_syntax
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 + -><()~*:""&|

    使用 IN BOOLEAN MODE 执行的布尔全文搜索支持的操作符列表。请参见 第 14.9.2 节“布尔全文搜索”

    默认变量值为 '+ -><()~*:""&|'。更改该值的规则如下

    • 运算符的功能由字符串中的位置决定。

    • 替换值必须为 14 个字符。

    • 每个字符必须是 ASCII 非字母数字字符。

    • 第一个或第二个字符必须是空格。

    • 不允许重复,除了位置 11 和 12 中的短语引用运算符。这两个字符不需要相同,但它们是唯一可以相同的两个字符。

    • 位置 10、13 和 14(默认情况下分别设置为 :&|)保留供将来扩展使用。

  • ft_max_word_len

    命令行格式 --ft-max-word-len=#
    系统变量 ft_max_word_len
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 84
    最小值 10
    最大值 84

    要包含在 MyISAM FULLTEXT 索引中的单词的最大长度。

    注意

    更改此变量后,必须重建 MyISAM 表上的 FULLTEXT 索引。使用 REPAIR TABLE tbl_name QUICK

  • ft_min_word_len

    命令行格式 --ft-min-word-len=#
    系统变量 ft_min_word_len
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4
    最小值 1
    最大值 82

    要包含在 MyISAM FULLTEXT 索引中的单词的最小长度。

    注意

    更改此变量后,必须重建 MyISAM 表上的 FULLTEXT 索引。使用 REPAIR TABLE tbl_name QUICK

  • ft_query_expansion_limit

    命令行格式 --ft-query-expansion-limit=#
    系统变量 ft_query_expansion_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 20
    最小值 0
    最大值 1000

    使用 WITH QUERY EXPANSION 执行的全文搜索要使用的最佳匹配数。

  • ft_stopword_file

    命令行格式 --ft-stopword-file=file_name
    系统变量 ft_stopword_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名

    从中读取 MyISAM 表上全文搜索的停用词列表的文件。服务器会在数据目录中查找该文件,除非给出了绝对路径名以指定不同的目录。该文件中的所有单词都会被使用;不会处理注释。默认情况下,会使用内置停用词列表(如 storage/myisam/ft_static.c 文件中定义的那样)。将此变量设置为空字符串 ('') 会禁用停用词过滤。另请参见 第 14.9.4 节“全文停用词”

    注意

    更改此变量或停用词文件的内容后,必须重建 MyISAM 表上的 FULLTEXT 索引。使用 REPAIR TABLE tbl_name QUICK

  • general_log

    命令行格式 --general-log[={OFF|ON}]
    系统变量 general_log
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否启用通用查询日志。该值可以是 0(或 OFF)以禁用日志,也可以是 1(或 ON)以启用日志。日志输出的目标由 log_output 系统变量控制;如果该值为 NONE,则即使启用了日志,也不会写入任何日志条目。

  • general_log_file

    命令行格式 --general-log-file=file_name
    系统变量 general_log_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 host_name.log

    通用查询日志文件的名称。默认值为 host_name.log,但可以使用 --general_log_file 选项更改初始值。

  • generated_random_password_length

    命令行格式 --generated-random-password-length=#
    系统变量 generated_random_password_length
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 20
    最小值 5
    最大值 255

    CREATE USERALTER USERSET PASSWORD 语句生成的随机密码中允许的最大字符数。有关更多信息,请参见 随机密码生成

  • global_connection_memory_limit

    命令行格式 --global-connection-memory-limit=#
    系统变量 global_connection_memory_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 18446744073709551615
    最小值 16777216
    最大值 18446744073709551615
    单位 字节

    设置所有用户连接可使用的总内存量;也就是说,Global_connection_memory 不应超过此值。如果超过,则所有来自普通用户的查询(包括当前正在运行的查询)都会被拒绝,并出现 ER_GLOBAL_CONN_LIMIT 错误。

    系统用户(如 MySQL root 用户)使用的内存包含在此总数中,但不计入断开连接限制;此类用户永远不会因为内存使用而断开连接。

    InnoDB 缓冲池使用的内存不包括在总数中。

    您必须具有 SYSTEM_VARIABLES_ADMINSUPER 权限才能设置此变量。

  • global_connection_memory_tracking

    命令行格式 --global-connection-memory-tracking={TRUE|FALSE}
    系统变量 global_connection_memory_tracking
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 FALSE

    确定服务器是否计算 Global_connection_memory。必须显式启用此变量;否则,不执行内存计算,并且不设置 Global_connection_memory

    您必须具有 SYSTEM_VARIABLES_ADMINSUPER 权限才能设置此变量。

  • group_concat_max_len

    命令行格式 --group-concat-max-len=#
    系统变量 group_concat_max_len
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1024
    最小值 4
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    针对 GROUP_CONCAT() 函数允许的最大结果长度(以字节为单位)。默认值为 1024。

  • have_compress

    如果 zlib 压缩库可供服务器使用,则为 YES,否则为 NO。如果不可用,则无法使用 COMPRESS()UNCOMPRESS() 函数。

  • have_dynamic_loading

    如果 mysqld 支持动态加载插件,则为 YES,否则为 NO。如果值为 NO,则无法使用诸如 --plugin-load 之类的选项在服务器启动时加载插件,也无法使用 INSTALL PLUGIN 语句在运行时加载插件。

  • have_geometry

    如果服务器支持空间数据类型,则为 YES,否则为 NO

  • have_profiling

    如果存在语句分析功能,则为 YES,否则为 NO。如果存在,则 profiling 系统变量控制是否启用或禁用此功能。请参见 第 15.7.7.32 节“SHOW PROFILES 语句”

    此变量已弃用;您应该预期它将在未来的 MySQL 版本中被删除。

  • have_query_cache

    have_query_cache 已弃用,始终值为 NO,您应该预期它将在未来的 MySQL 版本中被删除。

  • have_rtree_keys

    如果 RTREE 索引可用,则为 YES,否则为 NO。(这些用于 MyISAM 表的空间索引。)

  • have_statement_timeout

    系统变量 have_statement_timeout
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值

    语句执行超时功能是否可用(请参见 语句执行时间优化器提示)。如果此功能使用的后台线程无法初始化,则该值为 NO

  • have_symlink

    如果符号链接支持已启用,则为 YES,否则为 NO。在 Unix 上,这对于支持 DATA DIRECTORYINDEX DIRECTORY 表选项是必需的。如果服务器使用 --skip-symbolic-links 选项启动,则该值为 DISABLED

    此变量在 Windows 上没有意义。

    注意

    符号链接支持以及控制它的 --symbolic-links 选项已弃用;预期这些将在未来的 MySQL 版本中被删除。此外,该选项默认情况下被禁用。相关的 have_symlink 系统变量也已弃用,您应该预期它将在未来的 MySQL 版本中被删除。

  • histogram_generation_max_mem_size

    命令行格式 --histogram-generation-max-mem-size=#
    系统变量 histogram_generation_max_mem_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 20000000
    最小值 1000000
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295
    单位 字节

    用于生成直方图统计信息的可用最大内存量。请参见 第 10.9.6 节“优化器统计信息”第 15.7.3.1 节“ANALYZE TABLE 语句”

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • host_cache_size

    命令行格式 --host-cache-size=#
    系统变量 host_cache_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 -1(表示自动调整;请勿分配此字面值)
    最小值 0
    最大值 65536

    MySQL 服务器维护一个内存中的主机缓存,其中包含客户端主机名和 IP 地址信息,用于避免域名系统 (DNS) 查询;请参见 第 7.1.12.3 节“DNS 查询和主机缓存”

    host_cache_size 变量控制主机缓存的大小,以及公开缓存内容的性能架构 host_cache 表的大小。设置 host_cache_size 会产生以下影响

    • 将大小设置为 0 会禁用主机缓存。如果缓存被禁用,服务器将在每次客户端连接时执行 DNS 查询。

    • 在运行时更改大小会导致隐式主机缓存刷新操作,该操作会清除主机缓存,截断 host_cache 表,并解除对任何被阻止主机的阻止。

    默认值为自动调整为 128,再加上 max_connections 值(最多 500)加 1,再加上 max_connections 值中每增加 20 就加 1(超过 500),上限为 2000。

  • hostname

    系统变量 hostname
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    服务器在启动时将此变量设置为服务器主机名。最大长度为 255 个字符。

  • identity

    此变量是 last_insert_id 变量的同义词。它存在是为了与其他数据库系统兼容。可以使用 SELECT @@identity 读取它的值,并使用 SET identity 设置它的值。

  • init_connect

    命令行格式 --init-connect=name
    系统变量 init_connect
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    服务器为每个连接的客户端执行的字符串。该字符串包含一个或多个 SQL 语句,由分号字符分隔。

    对于具有 CONNECTION_ADMIN 特权(或已弃用的 SUPER 特权)的用户,不执行 init_connect 的内容。这样做的目的是为了防止 init_connect 的错误值阻止所有客户端连接。例如,该值可能包含语法错误的语句,从而导致客户端连接失败。对于具有 CONNECTION_ADMINSUPER 特权的用户,不执行 init_connect,使他们能够打开连接并修复 init_connect 值。

    对于任何密码过期的客户端用户,都会跳过 init_connect 执行。这样做的目的是因为此类用户无法执行任意语句,因此 init_connect 执行会失败,导致客户端无法连接。跳过 init_connect 执行使用户能够连接并更改密码。

    服务器会丢弃 init_connect 值中的语句产生的任何结果集。

  • information_schema_stats_expiry

    命令行格式 --information-schema-stats-expiry=#
    系统变量 information_schema_stats_expiry
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 86400
    最小值 0
    最大值 31536000
    单位

    一些 INFORMATION_SCHEMA 表包含提供表统计信息的列

    STATISTICS.CARDINALITY
    TABLES.AUTO_INCREMENT
    TABLES.AVG_ROW_LENGTH
    TABLES.CHECKSUM
    TABLES.CHECK_TIME
    TABLES.CREATE_TIME
    TABLES.DATA_FREE
    TABLES.DATA_LENGTH
    TABLES.INDEX_LENGTH
    TABLES.MAX_DATA_LENGTH
    TABLES.TABLE_ROWS
    TABLES.UPDATE_TIME

    这些列表示动态表元数据;也就是说,随着表内容的变化而变化的信息。

    默认情况下,MySQL 会从 mysql.index_statsmysql.table_stats 字典表中检索这些列的缓存值(在查询这些列时),这比直接从存储引擎检索统计信息更有效率。如果缓存的统计信息不可用或已过期,MySQL 会从存储引擎检索最新的统计信息,并将它们缓存到 mysql.index_statsmysql.table_stats 字典表中。后续查询会检索缓存的统计信息,直到缓存的统计信息过期。服务器重启或首次打开 mysql.index_statsmysql.table_stats 表不会自动更新缓存的统计信息。

    information_schema_stats_expiry 会话变量定义缓存的统计信息过期之前的时间段。默认值为 86400 秒(24 小时),但时间段可以延长至一年。

    要随时更新给定表的缓存值,请使用 ANALYZE TABLE

    要始终直接从存储引擎检索最新的统计信息并绕过缓存的值,请将 information_schema_stats_expiry 设置为 0

    查询统计信息列不会在以下情况下将统计信息存储或更新到 mysql.index_statsmysql.table_stats 字典表中

    在多语句事务提交之前,统计缓存可能会被更新,此时无法确定事务是否会提交。因此,缓存可能包含与已知已提交状态不一致的信息。这可能发生在 autocommit=0 时或在 START TRANSACTION 之后。

    information_schema_stats_expiry 是一个会话变量,每个客户端会话都可以定义自己的过期值。从存储引擎检索并由一个会话缓存的统计信息可供其他会话使用。

    有关相关信息,请参见 第 10.2.3 节,“优化 INFORMATION_SCHEMA 查询”

  • init_file

    命令行格式 --init-file=file_name
    系统变量 init_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名

    如果指定,此变量将命名一个包含 SQL 语句的文件,这些语句将在启动过程中被读取并执行。此文件中语句的允许格式支持以下结构

    • delimiter ;,将语句分隔符设置为 ; 字符。

    • delimiter $$,将语句分隔符设置为 $$ 字符序列。

    • 同一行上的多个语句,以当前分隔符分隔。

    • 多行语句。

    • # 字符到行尾的注释。

    • --  序列到行尾的注释。

    • /* 序列到以下 */ 序列的 C 样式注释,包括跨多行。

    • 用单引号 (') 或双引号 (") 字符括起来的多个多行字符串文字。

    如果服务器使用 --initialize--initialize-insecure 选项启动,则它以引导模式运行,并且某些功能不可用,这限制了文件中允许的语句。这些包括与帐户管理相关的语句(例如 CREATE USERGRANT)、复制和全局事务标识符。请参见 第 19.1.3 节,“使用全局事务标识符的复制”

    在服务器启动期间创建的线程用于执行诸如创建数据字典、运行升级过程和创建系统表之类的任务。为了确保稳定和可预测的环境,这些线程使用服务器内置的某些系统变量的默认值执行,例如 sql_modecharacter_set_servercollation_servercompletion_typeexplicit_defaults_for_timestampdefault_table_encryption

    这些线程还用于在启动服务器时执行使用 init_file 指定的任何文件中的语句,因此这些语句使用服务器为这些系统变量内置的默认值执行。

  • innodb_xxx

    InnoDB 系统变量列在 第 17.14 节,“InnoDB 启动选项和系统变量” 中。这些变量控制 InnoDB 表的存储、内存使用和 I/O 模式,并且在 InnoDB 成为默认存储引擎后变得尤为重要。

  • insert_id

    在插入 AUTO_INCREMENT 值时,以下 INSERTALTER TABLE 语句将使用的值。这主要用于二进制日志。

  • interactive_timeout

    命令行格式 --interactive-timeout=#
    系统变量 interactive_timeout
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 28800
    最小值 1
    最大值 31536000
    单位

    服务器在关闭交互式连接之前等待交互式连接活动的时间(以秒为单位)。交互式客户端被定义为使用 CLIENT_INTERACTIVE 选项连接到 mysql_real_connect() 的客户端。另请参见 wait_timeout

  • internal_tmp_mem_storage_engine

    命令行格式 --internal-tmp-mem-storage-engine=#
    系统变量 internal_tmp_mem_storage_engine
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 TempTable
    有效值

    MEMORY

    TempTable

    内存中内部临时表的存储引擎(请参见 第 10.4.4 节,“MySQL 中的内部临时表使用”)。允许的值是 TempTable(默认值)和 MEMORY

    优化器 使用 internal_tmp_mem_storage_engine 定义的存储引擎用于内存中内部临时表。

    配置 internal_tmp_mem_storage_engine 的会话设置需要 SESSION_VARIABLES_ADMINSYSTEM_VARIABLES_ADMIN 权限。

  • join_buffer_size

    命令行格式 --join-buffer-size=#
    系统变量 join_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最小值 128
    最大值(Windows) 4294967168
    最大值(其他,64 位平台) 18446744073709551488
    最大值(其他,32 位平台) 4294967168
    单位 字节
    块大小 128

    用于简单索引扫描、范围索引扫描和不使用索引因此执行完整表扫描的连接的缓冲区的最小大小。此变量还控制用于哈希连接的内存量。通常,获得快速连接的最佳方法是添加索引。在无法添加索引的情况下,增加 join_buffer_size 的值以获得更快的完整连接。为两个表之间的每个完整连接分配一个连接缓冲区。对于不使用索引的多个表的复杂连接,可能需要多个连接缓冲区。

    默认值为 256KB。join_buffer_size 的最大允许设置为 4GB−1。64 位平台允许更大的值(64 位 Windows 除外,对于 64 位 Windows,更大的值会被截断为 4GB−1,并发出警告)。块大小为 128,MySQL 服务器在存储系统变量的值之前,会将不完全是块大小倍数的值向下舍入到下一个较低的块大小倍数。解析器允许的值最高可达平台的无符号整数最大值(对于 32 位系统,为 4294967295 或 232−1;对于 64 位系统,为 18446744073709551615 或 264−1),但实际最大值是块大小更低的值。

    除非使用块嵌套循环或批量键访问算法,否则将缓冲区设置为大于容纳每个匹配行所需的容量没有意义,并且所有连接至少分配最小大小,因此在将此变量全局设置为较大的值时要谨慎。最好将全局设置保持为较小值,并将会话设置更改为较大的值,仅用于执行大型连接的会话,或者通过使用 SET_VAR 优化器提示在每个查询的基础上更改设置(请参见 第 10.9.3 节,“优化器提示”)。如果全局大小大于使用它的大多数查询所需的容量,则内存分配时间会导致性能大幅下降。

    当使用块嵌套循环时,更大的连接缓冲区可能会有益,直到将第一个表中的所有行所需的列都存储在连接缓冲区中。这取决于查询;最佳大小可能小于容纳第一个表的所有行。

    当使用批量键访问时,join_buffer_size 的值定义了对存储引擎的每个请求中的键批次的大小。缓冲区越大,对连接操作的右手表的顺序访问就越多,这可以显著提高性能。

    有关连接缓冲的更多信息,请参见 第 10.2.1.7 节,“嵌套循环连接算法”。有关批量键访问的信息,请参见 第 10.2.1.12 节,“块嵌套循环和批量键访问连接”。有关哈希连接的信息,请参见 第 10.2.1.4 节,“哈希连接优化”

  • keep_files_on_create

    命令行格式 --keep-files-on-create[={OFF|ON}]
    系统变量 keep_files_on_create
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果创建 MyISAM 表时没有 DATA DIRECTORY 选项,则 .MYD 文件将创建在数据库目录中。默认情况下,如果 MyISAM 在这种情况下发现现有 .MYD 文件,则会覆盖它。对于使用没有 INDEX DIRECTORY 选项创建的表,.MYI 文件也是如此。要抑制此行为,请将 keep_files_on_create 变量设置为 ON (1),在这种情况下,MyISAM 不会覆盖现有文件,而是返回错误。默认值为 OFF (0)。

    如果创建 MyISAM 表时使用了 DATA DIRECTORYINDEX DIRECTORY 选项,并且发现现有 .MYD.MYI 文件,则 MyISAM 始终返回错误。它不会覆盖指定目录中的文件。

  • key_buffer_size

    命令行格式 --key-buffer-size=#
    系统变量 key_buffer_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8388608
    最小值 0
    最大值(64 位平台) OS_PER_PROCESS_LIMIT
    最大值(32 位平台) 4294967295
    单位 字节

    MyISAM 表的索引块被缓冲,并由所有线程共享。key_buffer_size 是用于索引块的缓冲区的大小。键缓冲区也称为键缓存。

    最小允许设置为 0,但不能在运行时将 key_buffer_size 设置为 0。设置为 0 会删除键缓存,这在运行时是不允许的。将 key_buffer_size 设置为 0 仅在启动时允许,在这种情况下,键缓存不会初始化。在运行时将 key_buffer_size 设置从 0 更改为允许的非零值会初始化键缓存。

    key_buffer_size 只能以 4096 字节的增量或倍数增加或减少。以不符合规范的值增加或减少设置会产生警告,并将设置截断为符合规范的值。

    在 32 位平台上,key_buffer_size 的最大允许设置值为 4GB−1。64 位平台允许更大的值。实际的最大大小可能会更小,具体取决于您可用的物理 RAM 和操作系统或硬件平台施加的每个进程的 RAM 限制。此变量的值表示请求的内存量。在内部,服务器会尽可能多地分配内存,直到达到此值,但实际分配的内存可能更少。

    您可以增加该值以获得更好的索引处理,适用于所有读取和多个写入;在一个主要功能是使用 MyISAM 存储引擎运行 MySQL 的系统上,机器总内存的 25% 是此变量的合理值。但是,您应该注意,如果您将该值设置得太大(例如,超过机器总内存的 50%),您的系统可能会开始分页并变得极其缓慢。这是因为 MySQL 依赖于操作系统来执行文件系统缓存以进行数据读取,因此您必须为文件系统缓存留出一些空间。您还应该考虑除 MyISAM 之外您可能正在使用的任何其他存储引擎的内存需求。

    为了在同时写入许多行时获得更快的速度,请使用 LOCK TABLES。参见 第 10.2.5.1 节,“优化 INSERT 语句”

    您可以通过发出 SHOW STATUS 语句并检查 Key_read_requestsKey_readsKey_write_requestsKey_writes 状态变量来检查键缓冲区的性能。(参见 第 15.7.7 节,“SHOW 语句”。)Key_reads/Key_read_requests 比例通常应小于 0.01。Key_writes/Key_write_requests 比例通常接近 1,如果您主要使用更新和删除,但如果倾向于进行影响许多行的更新或使用 DELAY_KEY_WRITE 表选项,则可能要小得多。

    可以使用 key_buffer_size 结合 Key_blocks_unused 状态变量和缓冲区块大小来确定键缓冲区的使用率,缓冲区块大小可从 key_cache_block_size 系统变量获得。

    1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)

    此值只是一个近似值,因为键缓冲区中的一些空间是在内部分配给管理结构的。影响这些结构开销量的因素包括块大小和指针大小。随着块大小的增加,键缓冲区因开销而损失的百分比往往会降低。较大的块会导致读取操作数量减少(因为每次读取都会获得更多键),但相反,也会导致对未检查的键的读取次数增加(如果块中的所有键都不与查询相关)。

    可以创建多个 MyISAM 键缓存。4GB 的大小限制适用于每个缓存,而不是作为一个组。

  • key_cache_age_threshold

    命令行格式 --key-cache-age-threshold=#
    系统变量 key_cache_age_threshold
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 300
    最小值 100
    最大值(64 位平台) 18446744073709551516
    最大值(32 位平台) 4294967196
    块大小 100

    此值控制将缓冲区从键缓存的热子列表降级到暖子列表。较低的值会导致降级更快发生。最小值为 100。默认值为 300。参见 第 10.10.2 节,“MyISAM 键缓存”

  • key_cache_block_size

    命令行格式 --key-cache-block-size=#
    系统变量 key_cache_block_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1024
    最小值 512
    最大值 16384
    单位 字节
    块大小 512

    键缓存中块的大小(以字节为单位)。默认值为 1024。参见 第 10.10.2 节,“MyISAM 键缓存”

  • key_cache_division_limit

    命令行格式 --key-cache-division-limit=#
    系统变量 key_cache_division_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 100
    最小值 1
    最大值 100

    键缓存缓冲区列表的热子列表和暖子列表之间的分割点。该值是用于暖子列表的缓冲区列表百分比。允许的值范围为 1 到 100。默认值为 100。参见 第 10.10.2 节,“MyISAM 键缓存”

  • large_files_support

    系统变量 large_files_support
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值

    是否使用大型文件支持选项编译了 mysqld

  • large_pages

    命令行格式 --large-pages[={OFF|ON}]
    系统变量 large_pages
    范围 全局
    动态
    SET_VAR 提示适用
    平台特定 Linux
    类型 布尔值
    默认值 OFF

    是否启用大型页面支持(通过 --large-pages 选项)。参见 第 10.12.3.3 节,“启用大型页面支持”

  • large_page_size

    系统变量 large_page_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 65535
    单位 字节

    如果启用大型页面支持,则显示内存页的大小。大型内存页面仅在 Linux 上受支持;在其他平台上,此变量的值始终为 0。参见 第 10.12.3.3 节,“启用大型页面支持”

  • last_insert_id

    LAST_INSERT_ID() 返回的值。当您在更新表的语句中使用 LAST_INSERT_ID() 时,该值存储在二进制日志中。设置此变量不会更新 mysql_insert_id() C API 函数返回的值。

  • lc_messages

    命令行格式 --lc-messages=name
    系统变量 lc_messages
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 en_US

    用于错误消息的区域设置。默认值为 en_US。服务器会将参数转换为语言名称,并将其与 lc_messages_dir 的值组合起来,以生成错误消息文件的路径。参见 第 12.12 节,“设置错误消息语言”

  • lc_messages_dir

    命令行格式 --lc-messages-dir=dir_name
    系统变量 lc_messages_dir
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名

    错误消息所在的目录。服务器使用该值与 lc_messages 的值组合起来,以生成错误消息文件的路径。参见 第 12.12 节,“设置错误消息语言”

  • lc_time_names

    命令行格式 --lc-time-names=value
    系统变量 lc_time_names
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串

    此变量指定控制用于显示星期几和月份名称及其缩写的语言的区域设置。此变量会影响 DATE_FORMAT()DAYNAME()MONTHNAME() 函数的输出。区域设置名称是 POSIX 风格的值,例如 'ja_JP''pt_BR'。默认值为 'en_US',无论您的系统的区域设置是什么。有关更多信息,请参见 第 12.16 节,“MySQL 服务器区域设置支持”

  • license

    系统变量 license
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 GPL

    服务器拥有的许可证类型。

  • local_infile

    命令行格式 --local-infile[={OFF|ON}]
    系统变量 local_infile
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量控制服务器端 LOCAL 功能,适用于 LOAD DATA 语句。根据 local_infile 设置,服务器会拒绝或允许客户端加载本地数据,这些客户端在客户端侧启用了 LOCAL

    要显式地使服务器拒绝或允许 LOAD DATA LOCAL 语句(无论客户端程序和库在构建时或运行时如何配置),请使用 local_infile 禁用或启用启动 mysqld。也可以在运行时设置 local_infile。有关更多信息,请参见 第 8.1.6 节,“LOAD DATA LOCAL 的安全注意事项”

  • lock_wait_timeout

    命令行格式 --lock-wait-timeout=#
    系统变量 lock_wait_timeout
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 31536000
    最小值 1
    最大值 31536000
    单位

    此变量指定获取元数据锁的尝试的超时时间(以秒为单位)。允许的值范围为 1 到 31536000(1 年)。默认值为 31536000。

    此超时时间适用于所有使用元数据锁的语句。这些包括对表、视图、存储过程和存储函数的 DML 和 DDL 操作,以及 LOCK TABLESFLUSH TABLES WITH READ LOCKHANDLER 语句。

    此超时时间不适用于对 mysql 数据库中系统表的隐式访问,例如 GRANTREVOKE 语句或表记录语句修改的授权表。该超时时间适用于直接访问的系统表,例如使用 SELECTUPDATE

    超时值对每次元数据锁尝试单独应用。给定的语句可能需要多个锁,因此语句可能在报告超时错误之前阻塞的时间超过 lock_wait_timeout 值。当锁超时发生时,会报告 ER_LOCK_WAIT_TIMEOUT

    lock_wait_timeout 还定义了 LOCK INSTANCE FOR BACKUP 语句在放弃之前等待锁的时间。

  • locked_in_memory

    系统变量 locked_in_memory
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否使用 mysqld--memlock 选项将服务器锁定在内存中。

  • log_error

    命令行格式 --log-error[=file_name]
    系统变量 log_error
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名

    默认的错误日志目标位置。如果目标位置是控制台,则值为 stderr。否则,目标位置为文件,而 log_error 值为文件名。请参阅 第 7.4.2 节,“错误日志”

  • log_error_services

    命令行格式 --log-error-services=value
    系统变量 log_error_services
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 log_filter_internal; log_sink_internal

    要为错误日志启用的组件。该变量可以包含一个列表,其中包含 0 个、1 个或多个元素。在后一种情况下,元素可以用分号或逗号分隔,后面可以选择跟空格。给定的设置不能同时使用分号和逗号分隔符。组件顺序很重要,因为服务器按列表中的顺序执行组件。

    如果 log_error_services 中命名的任何可加载(非内置)组件尚未加载,则会隐式加载该组件。有关更多信息,请参阅 第 7.4.2.1 节,“错误日志配置”

  • log_error_suppression_list

    命令行格式 --log-error-suppression-list=value
    系统变量 log_error_suppression_list
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 空字符串

    log_error_suppression_list 系统变量适用于打算用于错误日志的事件,并指定在优先级为 WARNINGINFORMATION 时要抑制的事件。例如,如果某种类型的警告在错误日志中被认为是不可取的 噪声,因为它经常发生,但并不重要,则可以将其抑制。该变量会影响默认启用的 log_filter_internal 错误日志筛选器组件执行的筛选(请参阅 第 7.5.3 节,“错误日志组件”)。如果禁用了 log_filter_internal,则 log_error_suppression_list 不会产生任何影响。

    log_error_suppression_list 值可以是表示不抑制的空字符串,也可以是一个或多个逗号分隔的值的列表,表示要抑制的错误代码。错误代码可以用符号或数字形式指定。可以用或不用 MY- 前缀指定数字代码。数字部分中的前导零无关紧要。允许的代码格式示例

    ER_SERVER_SHUTDOWN_COMPLETE
    MY-000031
    000031
    MY-31
    31

    出于可读性和可移植性的考虑,符号值优于数字值。有关允许的错误符号和数字的信息,请参阅 MySQL 8.4 错误消息参考

    log_error_suppression_list 的效果与 log_error_verbosity 的效果相结合。有关更多信息,请参阅 第 7.4.2.5 节,“基于优先级的错误日志筛选(log_filter_internal)”

  • log_error_verbosity

    命令行格式 --log-error-verbosity=#
    系统变量 log_error_verbosity
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2
    最小值 1
    最大值 3

    log_error_verbosity 系统变量指定用于处理打算用于错误日志的事件的详细程度。该变量会影响默认启用的 log_filter_internal 错误日志筛选器组件执行的筛选(请参阅 第 7.5.3 节,“错误日志组件”)。如果禁用了 log_filter_internal,则 log_error_verbosity 不会产生任何影响。

    打算用于错误日志的事件的优先级为 ERRORWARNINGINFORMATIONlog_error_verbosity 基于允许写入日志的消息的优先级来控制详细程度,如以下表格所示。

    log_error_verbosity 值 允许的消息优先级
    1 ERROR
    2 ERRORWARNING
    3 ERRORWARNINGINFORMATION

    还有一个优先级为 SYSTEM。无论 log_error_verbosity 值如何,有关非错误情况的系统消息都会打印到错误日志中。这些消息包括启动和关闭消息,以及一些重要的设置更改。

    log_error_verbosity 的效果与 log_error_suppression_list 的效果相结合。有关更多信息,请参阅 第 7.4.2.5 节,“基于优先级的错误日志筛选(log_filter_internal)”

  • log_output

    命令行格式 --log-output=name
    系统变量 log_output
    范围 全局
    动态
    SET_VAR 提示适用
    类型 设置
    默认值 FILE
    有效值

    TABLE

    FILE

    NONE

    通用查询日志和慢速查询日志输出的目标位置。该值是一个包含从 TABLEFILENONE 中选择的用逗号分隔的一个或多个单词的列表。TABLE 选择将日志记录到 mysql 系统架构中的 general_logslow_log 表中。FILE 选择将日志记录到日志文件中。NONE 禁用日志记录。如果该值中包含 NONE,则它优先于任何其他存在的单词。TABLEFILE 都可以指定,以选择两种日志输出目标。

    该变量选择日志输出目标,但不启用日志输出。要启用日志输出,请启用 general_logslow_query_log 系统变量。对于 FILE 日志记录,general_log_fileslow_query_log_file 系统变量确定日志文件位置。有关更多信息,请参阅 第 7.4.1 节,“选择通用查询日志和慢速查询日志输出目标”

  • log_queries_not_using_indexes

    命令行格式 --log-queries-not-using-indexes[={OFF|ON}]
    系统变量 log_queries_not_using_indexes
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用此变量且慢速查询日志已启用,则会记录预计检索所有行的查询。请参阅 第 7.4.5 节,“慢速查询日志”。此选项并不一定表示未使用索引。例如,使用完全索引扫描的查询会使用索引,但也会被记录,因为索引不会限制行数。

  • log_raw

    命令行格式 --log-raw[={OFF|ON}]
    系统变量 log_raw
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    log_raw 系统变量最初设置为 --log-raw 选项的值。有关更多信息,请参阅该选项的说明。还可以运行时设置系统变量,以更改密码掩码行为。

  • log_slow_admin_statements

    命令行格式 --log-slow-admin-statements[={OFF|ON}]
    系统变量 log_slow_admin_statements
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    将慢速管理语句包含在写入慢速查询日志中的语句中。管理语句包括 ALTER TABLEANALYZE TABLECHECK TABLECREATE INDEXDROP INDEXOPTIMIZE TABLEREPAIR TABLE

  • log_slow_extra

    命令行格式 --log-slow-extra[={OFF|ON}]
    系统变量 log_slow_extra
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用了慢速查询日志,并且输出目标包含 FILE,则服务器会在写入日志文件行的末尾添加提供有关慢速语句的信息的额外字段。请参阅 第 7.4.5 节,“慢速查询日志”TABLE 输出不受影响。

  • log_timestamps

    命令行格式 --log-timestamps=#
    系统变量 log_timestamps
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 UTC
    有效值

    UTC

    SYSTEM

    此变量控制写入错误日志的消息中的时间戳,以及写入文件的通用查询日志和慢速查询日志消息中的时间戳。它不影响写入表 (mysql.general_logmysql.slow_log) 的通用查询日志和慢速查询日志消息的时间戳。可以使用 CONVERT_TZ() 从这些表中检索到的行将本地系统时区转换为任何所需时区,或者通过设置会话 time_zone 系统变量来完成。

    允许的 log_timestamps 值为 UTC(默认值)和 SYSTEM(本地系统时区)。

    时间戳使用 ISO 8601 / RFC 3339 格式写入:YYYY-MM-DDThh:mm:ss.uuuuuu 加上表示祖鲁时间(UTC)的 Z 尾部值,或者 ±hh:mm(UTC 的偏移量)。

  • log_throttle_queries_not_using_indexes

    命令行格式 --log-throttle-queries-not-using-indexes=#
    系统变量 log_throttle_queries_not_using_indexes
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295

    如果启用了 log_queries_not_using_indexes,则 log_throttle_queries_not_using_indexes 变量会限制每分钟可以写入慢速查询日志的此类查询数量。值为 0(默认值)表示 无限制。有关更多信息,请参阅 第 7.4.5 节,“慢速查询日志”

  • long_query_time

    命令行格式 --long-query-time=#
    系统变量 long_query_time
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 数字
    默认值 10
    最小值 0
    最大值 31536000
    单位

    如果查询耗时超过此秒数,服务器会将 Slow_queries 状态变量加 1。如果启用了慢查询日志,查询将被记录到慢查询日志文件中。此值以实际时间计量,而不是 CPU 时间,因此在负载较轻的系统中低于阈值的查询可能在负载较重的系统中高于阈值。 long_query_time 的最小值和默认值分别为 0 和 10。最大值为 31536000,相当于 365 天的秒数。该值可以指定为微秒级。请参阅 第 7.4.5 节,“慢查询日志”

    此变量的值越小,被视为长时间运行的语句就越多,导致慢查询日志需要更多空间。对于非常小的值(小于 1 秒),日志可能在很短的时间内变得很大。增加被视为长时间运行的语句的数量也可能导致 MySQL Enterprise Monitor 中对“长时间运行进程过多”警报的误报,尤其是在启用组复制的情况下。因此,非常小的值应仅在测试环境中使用,或者在生产环境中仅在短时间内使用。

    mysqldump 执行全表扫描,这意味着它的查询经常会超过对常规查询有用的 long_query_time 设置。如果要从慢查询日志中排除大多数或所有由 mysqldump 生成的查询,可以使用 --mysqld-long-query-time 将系统变量的会话值更改为更大的值。

  • low_priority_updates

    命令行格式 --low-priority-updates[={OFF|ON}]
    系统变量 low_priority_updates
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果设置为 1,所有 INSERTUPDATEDELETELOCK TABLE WRITE 语句将等待,直到受影响的表上没有待处理的 SELECTLOCK TABLE READ。使用 {INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ... 可以获得相同的效果,只降低一个查询的优先级。此变量只影响仅使用表级锁的存储引擎(例如 MyISAMMEMORYMERGE)。请参阅 第 10.11.2 节,“表锁定问题”

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • lower_case_file_system

    系统变量 lower_case_file_system
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值

    此变量描述数据目录所在文件系统的文件名大小写敏感性。 OFF 表示文件名区分大小写, ON 表示文件名不区分大小写。此变量是只读的,因为它反映了文件系统的属性,设置它不会对文件系统产生任何影响。

  • lower_case_table_names

    命令行格式 --lower-case-table-names[=#]
    系统变量 lower_case_table_names
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值(macOS) 2
    默认值(Unix) 0
    默认值(Windows) 1
    最小值 0
    最大值 2

    如果设置为 0,表名将按指定的方式存储,比较区分大小写。如果设置为 1,表名将以小写形式存储在磁盘上,比较不区分大小写。如果设置为 2,表名将按原样存储,但比较时将转换为小写。此选项也适用于数据库名和表别名。有关更多详细信息,请参阅 第 11.2.3 节,“标识符大小写敏感性”

    此变量的默认值取决于平台(请参阅 lower_case_file_system)。在 Linux 和其他类 Unix 系统上,默认值为 0。在 Windows 上,默认值为 1。在 macOS 上,默认值为 2。在 Linux(和其他类 Unix 系统)上,不支持将值设置为 2;服务器会强制将值改为 0

    如果在数据目录位于不区分大小写文件系统(例如 Windows 或 macOS)的系统上运行 MySQL,则不应将 lower_case_table_names 设置为 0。这是一种不受支持的组合,可能会导致运行 INSERT INTO ... SELECT ... FROM tbl_name 操作时出现挂起,其中 tbl_name 的字母大小写不正确。使用 MyISAM,使用不同字母大小写访问表名可能会导致索引损坏。

    如果尝试在不区分大小写文件系统上使用 --lower_case_table_names=0 启动服务器,则会打印错误消息,服务器退出。

    此变量的设置会影响复制过滤选项在大小写敏感性方面的行为。有关更多信息,请参阅 第 19.2.5 节,“服务器如何评估复制过滤规则”

    禁止使用与初始化服务器时使用的设置不同的 lower_case_table_names 设置启动服务器。该限制是必要的,因为各种数据字典表字段使用的排序规则是由初始化服务器时定义的设置确定的,以不同的设置重新启动服务器会导致标识符排序和比较方式不一致。

    因此,需要在初始化服务器之前将 lower_case_table_names 配置为所需的设置。在大多数情况下,这需要在首次启动 MySQL 服务器之前,在 MySQL 选项文件中配置 lower_case_table_names。但是,对于 Debian 和 Ubuntu 上的 APT 安装,服务器会为您初始化,并且没有机会事先在选项文件中配置设置。因此,您必须在使用 APT 安装 MySQL 之前使用 debconf-set-selection 实用程序启用 lower_case_table_names。为此,请在使用 APT 安装 MySQL 之前运行以下命令

    $> sudo debconf-set-selections <<< "mysql-server mysql-server/lowercase-table-names select Enabled"
  • mandatory_roles

    命令行格式 --mandatory-roles=value
    系统变量 mandatory_roles
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 空字符串

    服务器应视为强制性的角色。实际上,这些角色会自动授予每个用户,尽管设置 mandatory_roles 不会实际更改任何用户帐户,并且授予的角色在 mysql.role_edges 系统表中不可见。

    变量值是一个用逗号分隔的角色名称列表。示例

    SET PERSIST mandatory_roles = '`role1`@`%`,`role2`,role3,role4@localhost';

    设置 mandatory_roles 的运行时值需要 ROLE_ADMIN 权限,此外还需要设置全局系统变量运行时值通常需要的 SYSTEM_VARIABLES_ADMIN 权限(或已弃用的 SUPER 权限)。

    角色名称由 user_name@host_name 格式的用户部分和主机部分组成。主机部分,如果省略,默认为 %。有关更多信息,请参阅 第 8.2.5 节,“指定角色名称”

    mandatory_roles 值是一个字符串,因此用户名称和主机名称,如果被引用,必须以在引用字符串中允许引用的方式编写。

    mandatory_roles 的值中命名的角色不能使用 REVOKE 撤销,也不能使用 DROP ROLEDROP USER 删除。

    要防止会话默认情况下成为系统会话,具有 SYSTEM_USER 权限的角色不能列在 mandatory_roles 系统变量的值中。

    强制性角色,与显式授予的角色一样,只有在激活后才会生效(请参阅 激活角色)。在登录时,如果 activate_all_roles_on_login 系统变量已启用,则会针对所有授予的角色执行角色激活;否则,或针对设置为默认角色的其他角色。在运行时, SET ROLE 会激活角色。

    在分配给 mandatory_roles 时不存在但后来创建的角色可能需要特殊处理才能被视为强制性角色。有关详细信息,请参阅 定义强制性角色

    SHOW GRANTS 根据 第 15.7.7.22 节,“SHOW GRANTS 语句” 中描述的规则显示强制性角色。

  • max_allowed_packet

    命令行格式 --max-allowed-packet=#
    系统变量 max_allowed_packet
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 67108864
    最小值 1024
    最大值 1073741824
    单位 字节
    块大小 1024

    一个数据包或任何生成的/中间字符串的最大大小,或由 mysql_stmt_send_long_data() C API 函数发送的任何参数。默认值为 64MB。

    数据包消息缓冲区初始化为 net_buffer_length 字节,但在需要时可以增长到 max_allowed_packet 字节。此值的默认值较小,以捕获大型(可能不正确)数据包。

    如果您使用大型 BLOB 列或长字符串,则必须增加此值。它应该与您要使用的最大 BLOB 一样大。 max_allowed_packet 的协议限制为 1GB。该值应为 1024 的倍数;非倍数将向下舍入到最接近的倍数。

    当您通过更改 max_allowed_packet 变量的值来更改消息缓冲区大小时,如果您的客户端程序允许,您也应该更改客户端侧的缓冲区大小。客户端库中内置的默认 max_allowed_packet 值为 1GB,但各个客户端程序可能会覆盖此值。例如,mysqlmysqldump 的默认值为 16MB 和 24MB。它们还允许您通过在命令行或选项文件中设置 max_allowed_packet 来更改客户端侧的值。

    此变量的会话值是只读的。客户端最多可以接收与会话值一样多的字节。但是,服务器不会向客户端发送超过当前全局 max_allowed_packet 值的字节。(如果在客户端连接后更改了全局值,则全局值可能小于会话值。)

  • max_connect_errors

    命令行格式 --max-connect-errors=#
    系统变量 max_connect_errors
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 100
    最小值 1
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    如果来自主机的 max_connect_errors 个连续连接请求在没有成功连接的情况下中断,则服务器将阻止该主机进行进一步的连接。如果在先前连接中断后,来自主机的连接在少于 max_connect_errors 次尝试内成功建立,则该主机的错误计数将清除为零。要解除阻止被阻止的主机,请刷新主机缓存;请参阅 刷新主机缓存

  • max_connections

    命令行格式 --max-connections=#
    系统变量 max_connections
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 151
    最小值 1
    最大值 100000

    允许的最大同时客户端连接数。最大有效值为 open_files_limit - 810 的有效值和实际为 max_connections 设置的值中的较小者。

    有关更多信息,请参阅 第 7.1.12.1 节,“连接接口”

  • max_delayed_threads

    命令行格式 --max-delayed-threads=#
    已弃用
    系统变量 max_delayed_threads
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 20
    最小值 0
    最大值 16384

    此系统变量已弃用(因为不支持 DELAYED 插入),并且可能会在将来的 MySQL 版本中删除。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • max_digest_length

    命令行格式 --max-digest-length=#
    系统变量 max_digest_length
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1024
    最小值 0
    最大值 1048576
    单位 字节

    为每个会话保留的用于计算规范化语句摘要的内存字节数的最大值。一旦在摘要计算过程中使用了该数量的空间,就会发生截断:不再收集解析语句中的进一步令牌或将其纳入其摘要值。仅在解析令牌的这么多字节之后不同的语句会产生相同的规范化语句摘要,并且如果进行比较或如果为了摘要统计而聚合,则会被视为相同。

    警告

    max_digest_length 设置为零将禁用摘要生成,这也将禁用需要摘要的服务器功能,例如 MySQL Enterprise Firewall。

    减小 max_digest_length 值会减少内存使用,但会导致更多语句的摘要值变得不可区分,如果它们仅在结尾处不同。增加该值允许更长的语句变得可区分,但会增加内存使用,特别是对于涉及大量同时会话的工作负载(服务器为每个会话分配 max_digest_length 字节)。

    解析器使用此系统变量作为它计算的规范化语句摘要的最大长度限制。如果 Performance Schema 跟踪语句摘要,它会创建摘要值的副本,使用 performance_schema_max_digest_length。系统变量作为它存储的摘要的最大长度限制。因此,如果 performance_schema_max_digest_length 小于 max_digest_length,则存储在 Performance Schema 中的摘要值相对于原始摘要值被截断。

    有关语句摘要的更多信息,请参阅 第 29.10 节,“Performance Schema 语句摘要和采样”

  • max_error_count

    命令行格式 --max-error-count=#
    系统变量 max_error_count
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1024
    最小值 0
    最大值 65535

    要存储以供 SHOW ERRORSSHOW WARNINGS 语句显示的错误、警告和信息消息的最大数量。这与诊断区域中的条件区域数量相同,因此也与可以通过 GET DIAGNOSTICS 检查的条件数量相同。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • max_execution_time

    命令行格式 --max-execution-time=#
    系统变量 max_execution_time
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295
    单位 毫秒

    SELECT 语句的执行超时,以毫秒为单位。如果该值为 0,则不会启用超时。

    max_execution_time 按如下方式应用

  • max_heap_table_size

    命令行格式 --max-heap-table-size=#
    系统变量 max_heap_table_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16777216
    最小值 16384
    最大值(64 位平台) 18446744073709550592
    最大值(32 位平台) 4294966272
    单位 字节
    块大小 1024

    此变量设置用户创建的 MEMORY 表允许增长的最大大小。该变量的值用于计算 MEMORY 表的 MAX_ROWS 值。

    设置此变量对任何现有的 MEMORY 表没有影响,除非该表使用诸如 CREATE TABLE 之类的语句重新创建或使用 ALTER TABLETRUNCATE TABLE 更改。服务器重启也会将现有 MEMORY 表的最大大小设置为全局 max_heap_table_size 值。

    此变量也与 tmp_table_size 一起使用,以限制内部内存中表的尺寸。请参阅 第 10.4.4 节,“MySQL 中的内部临时表使用”

    max_heap_table_size 不会被复制。有关更多信息,请参阅 第 19.5.1.21 节,“复制和 MEMORY 表” 以及 第 19.5.1.39 节,“复制和变量”

  • max_insert_delayed_threads

    已弃用
    系统变量 max_insert_delayed_threads
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 20
    最大值 16384

    此变量是 max_delayed_threads 的同义词。与 max_delayed_threads 一样,它已弃用(因为不支持 DELAYED 插入),并且可能会在将来的 MySQL 版本中删除。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • max_join_size

    命令行格式 --max-join-size=#
    系统变量 max_join_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 18446744073709551615
    最小值 1
    最大值 18446744073709551615

    这表示对连接在基表中访问的行数的最大值限制。如果服务器的估计表明必须从基表中读取的行数超过 max_join_size,则该语句将被拒绝并显示错误。

    将此变量设置为除 DEFAULT 以外的值将重置 sql_big_selects 的值为 0。如果您再次设置 sql_big_selects 值,则将忽略 max_join_size 变量。

  • max_length_for_sort_data

    命令行格式 --max-length-for-sort-data=#
    已弃用
    系统变量 max_length_for_sort_data
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4096
    最小值 4
    最大值 8388608
    单位 字节

    此变量已弃用,在 MySQL 8.4 中没有效果。

  • max_points_in_geometry

    命令行格式 --max-points-in-geometry=#
    系统变量 max_points_in_geometry
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 65536
    最小值 3
    最大值 1048576

    ST_Buffer_Strategy() 函数的 points_per_circle 参数的最大值。

  • max_prepared_stmt_count

    命令行格式 --max-prepared-stmt-count=#
    系统变量 max_prepared_stmt_count
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16382
    最小值 0
    最大值 4194304

    此变量限制服务器中的已准备语句的总数。它可以在存在基于通过准备大量语句来耗尽服务器内存来执行拒绝服务攻击的潜力的环境中使用。如果该值设置为低于当前已准备语句的数量,则现有语句不受影响并且可以使用,但直到当前数量降至限制以下才会准备新的语句。将该值设置为 0 将禁用已准备语句。

  • max_seeks_for_key

    命令行格式 --max-seeks-for-key=#
    系统变量 max_seeks_for_key
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值(Windows) 4294967295
    默认值(其他,64 位平台) 18446744073709551615
    默认值(其他,32 位平台) 4294967295
    最小值 1
    最大值(Windows) 4294967295
    最大值(其他,64 位平台) 18446744073709551615
    最大值(其他,32 位平台) 4294967295

    限制在基于键查找行时假设的最大搜索次数。MySQL 优化器假设在通过扫描索引在表中搜索匹配行时,最多需要此数量的键搜索,而与索引的实际基数无关(请参阅 第 15.7.7.23 节,“SHOW INDEX 语句”)。通过将其设置为较低的值(例如,100),您可以强制 MySQL 首选索引而不是表扫描。

  • max_sort_length

    命令行格式 --max-sort-length=#
    系统变量 max_sort_length
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1024
    最小值 4
    最大值 8388608
    单位 字节

    用于对使用 PAD SPACE 校对规则的字符串值进行排序时要使用的字节数。服务器只使用任何此类值的第一个 max_sort_length 字节,并忽略其余字节。因此,此类值仅在第一个 max_sort_length 字节之后才不同,对于 GROUP BYORDER BYDISTINCT 操作而言,这些值将被视为相等。(此行为与 MySQL 的早期版本不同,在早期版本中,此设置将应用于比较中使用的所有值。)

    如果要增加 max_sort_length 的值,可能还需要增加 sort_buffer_size 的值。有关详细信息,请参见 第 10.2.1.16 节,“ORDER BY 优化”

  • max_sp_recursion_depth

    命令行格式 --max-sp-recursion-depth[=#]
    系统变量 max_sp_recursion_depth
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 255

    任何给定存储过程可以递归调用的次数。此选项的默认值为 0,这将完全禁用存储过程中的递归。最大值为 255。

    存储过程递归会增加对线程堆栈空间的需求。如果您增加了 max_sp_recursion_depth 的值,则可能需要通过增加服务器启动时 thread_stack 的值来增加线程堆栈大小。

  • max_user_connections

    命令行格式 --max-user-connections=#
    系统变量 max_user_connections
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295

    允许任何给定 MySQL 用户帐户同时建立的最大连接数。值为 0(默认值)表示“无限制。

    此变量具有一个全局值,可以在服务器启动或运行时设置。它还具有一个只读会话值,该值指示应用于当前会话关联的帐户的有效同时连接限制。会话值的初始化方式如下:

    帐户资源限制使用 CREATE USERALTER USER 语句指定。请参见 第 8.2.21 节,“设置帐户资源限制”

  • max_write_lock_count

    命令行格式 --max-write-lock-count=#
    系统变量 max_write_lock_count
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值(Windows) 4294967295
    默认值(其他,64 位平台) 18446744073709551615
    默认值(其他,32 位平台) 4294967295
    最小值 1
    最大值(Windows) 4294967295
    最大值(其他,64 位平台) 18446744073709551615
    最大值(其他,32 位平台) 4294967295

    在进行此数量的写锁之后,允许在写锁之间处理一些挂起的读锁请求。写锁请求的优先级高于读锁请求。但是,如果将 max_write_lock_count 设置为某个较低的值(例如 10),如果读锁请求已经被 10 个写锁请求所取代,则读锁请求可能会优先于挂起的写锁请求。通常不会出现这种行为,因为 max_write_lock_count 的默认值非常大。

  • mecab_rc_file

    命令行格式 --mecab-rc-file=file_name
    系统变量 mecab_rc_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名

    mecab_rc_file 选项用于设置 MeCab 全文解析器。

    mecab_rc_file 选项定义了 mecabrc 配置文件(即 MeCab 的配置文件)的路径。该选项是只读的,只能在启动时设置。需要 mecabrc 配置文件来初始化 MeCab。

    有关 MeCab 全文解析器的信息,请参见 第 14.9.9 节,“MeCab 全文解析器插件”

    有关可以在 MeCab mecabrc 配置文件中指定的选项的信息,请参阅 MeCab 文档(位于 Google Developers 网站上)。

  • min_examined_row_limit

    命令行格式 --min-examined-row-limit=#
    系统变量 min_examined_row_limit
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    检查的行数少于此值的查询不会记录到慢查询日志。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • myisam_data_pointer_size

    命令行格式 --myisam-data-pointer-size=#
    系统变量 myisam_data_pointer_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 6
    最小值 2
    最大值 7
    单位 字节

    默认指针大小(以字节为单位),在没有指定 MAX_ROWS 选项的情况下,CREATE TABLE 用于 MyISAM 表时使用。此变量不能小于 2 且不能大于 7。默认值为 6。请参见 第 B.3.2.10 节,“表已满”

  • myisam_max_sort_file_size

    命令行格式 --myisam-max-sort-file-size=#
    系统变量 myisam_max_sort_file_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值(Windows) 2146435072
    默认值(其他,64 位平台) 9223372036853727232
    默认值(其他,32 位平台) 2147483648
    最小值 0
    最大值(Windows) 2146435072
    最大值(其他,64 位平台) 9223372036853727232
    最大值(其他,32 位平台) 2147483648
    单位 字节

    MySQL 在重新创建 MyISAM 索引(在 REPAIR TABLEALTER TABLELOAD DATA 期间)时允许使用的临时文件最大大小。如果文件大小超过此值,则索引将使用键缓存创建,这会更慢。该值以字节为单位给出。

    如果 MyISAM 索引文件超过此大小并且磁盘空间可用,则增加此值可能会提高性能。必须在包含原始索引文件所在的目录的文件系统中提供空间。

  • myisam_mmap_size

    命令行格式 --myisam-mmap-size=#
    系统变量 myisam_mmap_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值(64 位平台) 18446744073709551615
    默认值(32 位平台) 4294967295
    最小值 7
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295
    单位 字节

    用于对压缩的 MyISAM 文件进行内存映射的最大内存量。如果使用了许多压缩的 MyISAM 表,则可以减小该值,以降低出现内存交换问题的可能性。

  • myisam_recover_options

    命令行格式 --myisam-recover-options[=list]
    系统变量 myisam_recover_options
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF

    DEFAULT

    BACKUP

    FORCE

    QUICK

    设置 MyISAM 存储引擎的恢复模式。变量值是 OFFDEFAULTBACKUPFORCEQUICK 的值的任意组合。如果指定多个值,则用逗号分隔它们。在服务器启动时指定变量而不带任何值,与指定 DEFAULT 相同,并且指定显式值为 "" 会禁用恢复(与值为 OFF 相同)。如果启用了恢复,则每次 mysqld 打开一个 MyISAM 表时,它都会检查该表是否被标记为崩溃或是否未正常关闭。(最后一个选项仅在您在禁用外部锁定的情况下运行时有效。)如果是这种情况,mysqld 会对该表进行检查。如果表已损坏,mysqld 会尝试修复它。

    以下选项会影响修复工作的执行方式。

    选项 描述
    OFF 不进行恢复。
    DEFAULT 不进行备份、强制或快速检查的恢复。
    BACKUP 如果数据文件在恢复期间发生了更改,则将 tbl_name.MYD 文件的备份保存为 tbl_name-datetime.BAK
    FORCE 即使我们可能丢失 .MYD 文件中的多个行,也运行恢复。
    QUICK 如果不存在任何删除块,则不要检查表中的行。

    在服务器自动修复表之前,它会将有关修复的说明写入错误日志。如果您希望能够在没有用户干预的情况下从大多数问题中恢复,则应使用选项 BACKUP,FORCE。这会强制修复表,即使可能会删除一些行,但它会将旧数据文件保留为备份,以便您以后可以检查发生了什么情况。

    请参见 第 18.2.1 节,“MyISAM 启动选项”

  • myisam_sort_buffer_size

    命令行格式 --myisam-sort-buffer-size=#
    系统变量 myisam_sort_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8388608
    最小值 4096
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295
    单位 字节

    REPAIR TABLE 期间对 MyISAM 索引进行排序或使用 CREATE INDEXALTER TABLE 创建索引时分配的缓冲区大小。

  • myisam_stats_method

    命令行格式 --myisam-stats-method=name
    系统变量 myisam_stats_method
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 nulls_unequal
    有效值

    nulls_unequal

    nulls_equal

    nulls_ignored

    服务器在收集有关 MyISAM 表的索引值分布的统计信息时,如何处理 NULL 值。此变量有三个可能的值,即 nulls_equalnulls_unequalnulls_ignored。对于 nulls_equal,所有 NULL 索引值都被视为相等,并形成一个大小等于 NULL 值数量的单个值组。对于 nulls_unequalNULL 值被视为不相等,每个 NULL 都会形成一个大小为 1 的不同的值组。对于 nulls_ignoredNULL 值将被忽略。

    用于生成表统计信息的方法会影响优化器为查询执行选择索引的方式,如 第 10.3.8 节,“InnoDB 和 MyISAM 索引统计信息收集” 中所述。

  • myisam_use_mmap

    命令行格式 --myisam-use-mmap[={OFF|ON}]
    系统变量 myisam_use_mmap
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否对读取和写入 MyISAM 表使用内存映射。

  • mysql_native_password_proxy_users

    命令行格式 --mysql-native-password-proxy-users[={OFF|ON}]
    已弃用
    系统变量 mysql_native_password_proxy_users
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量控制 mysql_native_password 内置身份验证插件(已弃用)是否支持代理用户。除非 check_proxy_users 系统变量和 mysql_native_password 插件已启用,否则它不会产生任何影响。有关用户代理的信息,请参见 第 8.2.19 节,“代理用户”

  • named_pipe

    命令行格式 --named-pipe[={OFF|ON}]
    系统变量 named_pipe
    范围 全局
    动态
    SET_VAR 提示适用
    平台特定 Windows
    类型 布尔值
    默认值 OFF

    (仅限 Windows。)指示服务器是否支持通过命名管道建立连接。

  • named_pipe_full_access_group

    命令行格式 --named-pipe-full-access-group=value
    系统变量 named_pipe_full_access_group
    范围 全局
    动态
    SET_VAR 提示适用
    平台特定 Windows
    类型 字符串
    默认值 空字符串
    有效值

    空字符串

    有效的 Windows 本地组名称

    *everyone*

    (仅限 Windows。) 当 named_pipe 系统变量启用以支持命名管道连接时,授予命名管道客户端的访问控制设置为成功通信所需的最低限度。某些 MySQL 客户端软件可以在没有任何额外配置的情况下打开命名管道连接;但是,其他客户端软件可能仍然需要完全访问权限才能打开命名管道连接。

    此变量设置 Windows 本地组的名称,该组的成员被 MySQL 服务器授予使用命名管道客户端的足够访问权限。默认值为一个空字符串,这意味着没有 Windows 用户被授予对命名管道的完全访问权限。

    可以在 Windows 中创建一个新的 Windows 本地组名称(例如,mysql_access_client_users),然后在绝对需要访问权限时使用它来替换默认值。在这种情况下,将组成员资格限制在尽可能少的用户,并在客户端软件升级后从组中删除用户。尝试使用受影响的命名管道客户端打开到 MySQL 的连接的非成员组成员将被拒绝访问,直到 Windows 管理员将用户添加到组中。新添加的用户必须注销并重新登录才能加入组(Windows 要求)。

    将值设置为 '*everyone*' 提供了一种与语言无关的方式来引用 Windows 上的 Everyone 组。默认情况下,Everyone 组不安全。

  • net_buffer_length

    命令行格式 --net-buffer-length=#
    系统变量 net_buffer_length
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16384
    最小值 1024
    最大值 1048576
    单位 字节
    块大小 1024

    每个客户端线程都与一个连接缓冲区和结果缓冲区相关联。两者都以由 net_buffer_length 给出的大小开始,但根据需要动态扩大到 max_allowed_packet 字节。结果缓冲区在每个 SQL 语句之后缩小到 net_buffer_length

    通常不应更改此变量,但是如果您内存很少,可以将其设置为客户端发送的语句的预期长度。如果语句超过此长度,连接缓冲区会自动扩大。net_buffer_length 可以设置的最大值为 1MB。

    此变量的会话值是只读的。

  • net_read_timeout

    命令行格式 --net-read-timeout=#
    系统变量 net_read_timeout
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 30
    最小值 1
    最大值 31536000
    单位

    等待连接中的更多数据的时间(以秒为单位),超时后将中止读取。当服务器从客户端读取时,net_read_timeout 是控制何时中止的超时值。当服务器写入客户端时,net_write_timeout 是控制何时中止的超时值。另请参见 replica_net_timeout.

  • net_retry_count

    命令行格式 --net-retry-count=#
    系统变量 net_retry_count
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 10
    最小值 1
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295

    如果通信端口上的读写操作被中断,则在放弃之前重试此次数。此值应该在 FreeBSD 上设置得相当高,因为内部中断被发送到所有线程。

  • net_write_timeout

    命令行格式 --net-write-timeout=#
    系统变量 net_write_timeout
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 60
    最小值 1
    最大值 31536000
    单位

    等待将块写入连接的时间(以秒为单位),超时后将中止写入。另请参见 net_read_timeout.

  • ngram_token_size

    命令行格式 --ngram-token-size=#
    系统变量 ngram_token_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2
    最小值 1
    最大值 10

    定义 n-gram 全文解析器的 n-gram 令牌大小。 ngram_token_size 选项是只读的,只能在启动时修改。默认值为 2(二元语法)。最大值为 10。

    有关如何配置此变量的更多信息,请参见 第 14.9.8 节,“ngram 全文解析器”.

  • offline_mode

    命令行格式 --offline-mode[={OFF|ON}]
    系统变量 offline_mode
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    在脱机模式下,MySQL 实例会断开客户端用户的连接,除非他们具有相关权限,并且不允许他们启动新的连接。被拒绝访问的客户端会收到一个 ER_SERVER_OFFLINE_MODE 错误。

    要将服务器置于脱机模式,请将 offline_mode 系统变量的值从 OFF 更改为 ON。要恢复正常操作,请将 offline_modeON 更改为 OFF。要控制脱机模式,管理员帐户必须具有 SYSTEM_VARIABLES_ADMIN 权限和 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限,它涵盖了这两个权限)。需要 CONNECTION_ADMIN,以防止意外锁定。

    脱机模式具有以下特点

    • 没有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)的已连接客户端用户将在下一个请求时断开连接,并显示相应的错误。断开连接包括终止正在运行的语句和释放锁。此类客户端也不能启动新的连接,并且会收到相应的错误。

    • 具有 CONNECTION_ADMINSUPER 权限的已连接客户端用户不会断开连接,并且可以启动新的连接来管理服务器。

    • 如果将服务器置于脱机模式的用户没有 SYSTEM_USER 权限,则具有 SYSTEM_USER 权限的已连接客户端用户也不会断开连接。但是,这些用户在服务器处于脱机模式时无法启动到服务器的新连接,除非他们还具有 CONNECTION_ADMINSUPER 权限。只有他们的现有连接无法终止,因为 SYSTEM_USER 权限是终止正在使用 SYSTEM_USER 权限执行的会话或语句所必需的。

    • 复制线程被允许继续将数据应用到服务器。

  • old_alter_table

    命令行格式 --old-alter-table[={OFF|ON}]
    系统变量 old_alter_table
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    当此变量启用时,服务器不使用优化的方法来处理 ALTER TABLE 操作。它恢复使用临时表,将数据复制过去,然后将临时表重命名为原始表,如 MySQL 5.0 及更早版本所使用的那样。有关 ALTER TABLE 操作的更多信息,请参见 第 15.1.9 节,“ALTER TABLE 语句”.

    ALTER TABLE ... DROP PARTITIONold_alter_table=ON 时会重建分区表,并尝试将数据从已删除的分区移动到具有兼容 PARTITION ... VALUES 定义的另一个分区。无法移动到另一个分区的数据将被删除。在早期版本中,ALTER TABLE ... DROP PARTITIONold_alter_table=ON 时会删除存储在分区中的数据并删除分区。

  • open_files_limit

    命令行格式 --open-files-limit=#
    系统变量 open_files_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 5000,可能需要调整
    最小值 0
    最大值 平台相关

    操作系统提供给 mysqld 的文件描述符数量

    • 在启动时,mysqld 使用 setrlimit() 预留描述符,使用通过直接设置此变量或使用 --open-files-limit 选项(对 mysqld_safe)请求的值。如果 mysqld 产生错误 Too many open files,请尝试增加 open_files_limit 值。在内部,此变量的最大值为最大无符号整数值,但实际最大值是平台相关的。

    • 在运行时,open_files_limit 的值表示操作系统实际允许 mysqld 使用的文件描述符数量,这可能与启动时请求的值不同。如果启动期间请求的文件描述符数量无法分配,mysqld 会向错误日志写入警告。

    有效 open_files_limit 值基于在系统启动时指定的值(如果有)以及 max_connectionstable_open_cache 的值,使用以下公式

    • 10 + max_connections + (table_open_cache * 2)。使用这些变量的默认值将产生 8161。

      仅限 Windows,将 2048(C 运行时库文件描述符最大值)添加到此数字。使用所指示的系统变量的默认值,总计为 10209。

    • max_connections * 5

    • 操作系统限制。

    服务器尝试使用这些值的最高值来获取文件描述符的数量,上限为最大无符号整数值。如果无法获得那么多描述符,服务器将尝试获得系统允许的尽可能多的描述符。

    在 MySQL 无法更改打开文件数量的系统上,有效值为 0。

    在 Unix 上,该值不能大于 ulimit -n 命令显示的值。在使用 systemd 的 Linux 系统上,该值不能大于 LimitNOFILE(如果未设置 LimitNOFILE,则为 DefaultLimitNOFILE);否则,在 Linux 上,open_files_limit 的值不能超过 ulimit -n.

  • optimizer_prune_level

    命令行格式 --optimizer-prune-level=#
    系统变量 optimizer_prune_level
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 0
    最大值 1

    控制查询优化过程中应用的启发式算法,用于从优化器搜索空间中修剪掉不太有希望的局部计划。值为 0 将禁用启发式算法,以便优化器执行穷举搜索。值为 1 使优化器根据中间计划检索的行数来修剪计划。

  • optimizer_search_depth

    命令行格式 --optimizer-search-depth=#
    系统变量 optimizer_search_depth
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 62
    最小值 0
    最大值 62

    查询优化器执行的搜索的最大深度。大于查询中关系数的值会导致更好的查询计划,但生成查询执行计划需要更长的时间。小于查询中关系数的值会更快地返回执行计划,但生成的计划可能远非最佳。如果设置为 0,系统会自动选择一个合理的值。

  • optimizer_switch

    命令行格式 --optimizer-switch=value
    系统变量 optimizer_switch
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 设置
    有效值

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_condition_pushdown={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    prefer_ordering_index={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    subquery_to_derived={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    prefer_ordering_index={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    subquery_to_derived={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    The optimizer_switch system variable enables control over optimizer behavior. The value of this variable is a set of flags, each of which has a value of on or off to indicate whether the corresponding optimizer behavior is enabled or disabled. This variable has global and session values and can be changed at runtime. The global default can be set at server startup.

    To see the current set of optimizer flags, select the variable value

    mysql> SELECT @@optimizer_switch\G
    *************************** 1. row ***************************
    @@optimizer_switch: index_merge=on,index_merge_union=on,
                        index_merge_sort_union=on,index_merge_intersection=on,
                        engine_condition_pushdown=on,index_condition_pushdown=on,
                        mrr=on,mrr_cost_based=on,block_nested_loop=on,
                        batched_key_access=off,materialization=on,semijoin=on,
                        loosescan=on,firstmatch=on,duplicateweedout=on,
                        subquery_materialization_cost_based=on,
                        use_index_extensions=on,condition_fanout_filter=on,
                        derived_merge=on,use_invisible_indexes=off,skip_scan=on,
                        hash_join=on,subquery_to_derived=off,
                        prefer_ordering_index=on,hypergraph_optimizer=off,
                        derived_condition_pushdown=on,hash_set_operations=on
    1 row in set (0.00 sec)

    For more information about the syntax of this variable and the optimizer behaviors that it controls, see Section 10.9.2, “Switchable Optimizations”.

  • optimizer_trace

    命令行格式 --optimizer-trace=value
    系统变量 optimizer_trace
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串

    This variable controls optimizer tracing. For details, see MySQL Internals: Tracing the Optimizer.

  • optimizer_trace_features

    命令行格式 --optimizer-trace-features=value
    系统变量 optimizer_trace_features
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串

    This variable enables or disables selected optimizer tracing features. For details, see MySQL Internals: Tracing the Optimizer.

  • optimizer_trace_limit

    命令行格式 --optimizer-trace-limit=#
    系统变量 optimizer_trace_limit
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 0
    最大值 2147483647

    The maximum number of optimizer traces to display. For details, see MySQL Internals: Tracing the Optimizer.

  • optimizer_trace_max_mem_size

    命令行格式 --optimizer-trace-max-mem-size=#
    系统变量 optimizer_trace_max_mem_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1048576
    最小值 0
    最大值 4294967295
    单位 字节

    The maximum cumulative size of stored optimizer traces. For details, see MySQL Internals: Tracing the Optimizer.

  • optimizer_trace_offset

    命令行格式 --optimizer-trace-offset=#
    系统变量 optimizer_trace_offset
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 -1
    最小值 -2147483647
    最大值 2147483647

    The offset of optimizer traces to display. For details, see MySQL Internals: Tracing the Optimizer.

  • performance_schema_xxx

    Performance Schema system variables are listed in Section 29.15, “Performance Schema System Variables”. These variables may be used to configure Performance Schema operation.

  • parser_max_mem_size

    命令行格式 --parser-max-mem-size=#
    系统变量 parser_max_mem_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值(64 位平台) 18446744073709551615
    默认值(32 位平台) 4294967295
    最小值 10000000
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295
    单位 字节

    解析器可用的最大内存量。默认值不限制可用内存。可以减小该值以防止由解析长或复杂 SQL 语句引起的内存不足情况。

  • partial_revokes

    命令行格式 --partial-revokes[={OFF|ON}]
    系统变量 partial_revokes
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值

    OFF (如果不存在部分撤销)

    ON (如果存在部分撤销)

    启用此变量可以部分撤销权限。具体来说,对于在全局级别拥有权限的用户,partial_revokes 允许撤销对特定模式的权限,同时保留对其他模式的权限。例如,拥有全局 UPDATE 权限的用户可以被限制在 mysql 系统模式上行使此权限。(或者,换句话说,该用户被允许在除 mysql 模式之外的所有模式上行使 UPDATE 权限。)从这个意义上说,用户的全局 UPDATE 权限被部分撤销。

    一旦启用,如果任何帐户具有权限限制,则无法禁用 partial_revokes。如果存在任何此类帐户,禁用 partial_revokes 会失败

    要在此情况下禁用 partial_revokes,首先修改每个具有部分撤销权限的帐户,方法是重新授予权限或删除帐户。

    注意

    在权限分配中,启用 partial_revokes 会导致 MySQL 将模式名称中未转义的 _% SQL 通配符字符解释为文字字符,就像它们已被转义为 \_\% 一样。因为这会改变 MySQL 解释权限的方式,所以在可能启用 partial_revokes 的安装中,最好避免在权限分配中使用未转义的通配符字符。

    此外,在授权中使用 _% 作为通配符字符已被弃用,您应该预期在 MySQL 的未来版本中将删除对它们的 support。

    有关更多信息,包括删除部分撤销的说明,请参阅 Section 8.2.12, “Privilege Restriction Using Partial Revokes”.

  • password_history

    命令行格式 --password-history=#
    系统变量 password_history
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295

    This variable defines the global policy for controlling reuse of previous passwords based on required minimum number of password changes. For an account password used previously, this variable indicates the number of subsequent account password changes that must occur before the password can be reused. If the value is 0 (the default), there is no reuse restriction based on number of password changes.

    Changes to this variable apply immediately to all accounts defined with the PASSWORD HISTORY DEFAULT option.

    The global number-of-changes password reuse policy can be overridden as desired for individual accounts using the PASSWORD HISTORY option of the CREATE USER and ALTER USER statements. See Section 8.2.15, “Password Management”.

  • password_require_current

    命令行格式 --password-require-current[={OFF|ON}]
    系统变量 password_require_current
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    This variable defines the global policy for controlling whether attempts to change an account password must specify the current password to be replaced.

    Changes to this variable apply immediately to all accounts defined with the PASSWORD REQUIRE CURRENT DEFAULT option.

    The global verification-required policy can be overridden as desired for individual accounts using the PASSWORD REQUIRE option of the CREATE USER and ALTER USER statements. See Section 8.2.15, “Password Management”.

  • password_reuse_interval

    命令行格式 --password-reuse-interval=#
    系统变量 password_reuse_interval
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295
    单位

    This variable defines the global policy for controlling reuse of previous passwords based on time elapsed. For an account password used previously, this variable indicates the number of days that must pass before the password can be reused. If the value is 0 (the default), there is no reuse restriction based on time elapsed.

    Changes to this variable apply immediately to all accounts defined with the PASSWORD REUSE INTERVAL DEFAULT option.

    The global time-elapsed password reuse policy can be overridden as desired for individual accounts using the PASSWORD REUSE INTERVAL option of the CREATE USER and ALTER USER statements. See Section 8.2.15, “Password Management”.

  • persisted_globals_load

    命令行格式 --persisted-globals-load[={OFF|ON}]
    系统变量 persisted_globals_load
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    Whether to load persisted configuration settings from the mysqld-auto.cnf file in the data directory. The server normally processes this file at startup after all other option files (see Section 6.2.2.2, “Using Option Files”). Disabling persisted_globals_load causes the server startup sequence to skip mysqld-auto.cnf.

    To modify the contents of mysqld-auto.cnf, use the SET PERSIST, SET PERSIST_ONLY, and RESET PERSIST statements. See Section 7.1.9.3, “Persisted System Variables”.

  • persist_only_admin_x509_subject

    命令行格式 --persist-only-admin-x509-subject=string
    系统变量 persist_only_admin_x509_subject
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 空字符串

    SET PERSISTSET PERSIST_ONLY 允许将系统变量持久化到数据目录中的 mysqld-auto.cnf 选项文件(参见 第 15.7.6.1 节,“SET 语法用于变量赋值”)。持久化系统变量可以使运行时配置更改影响后续的服务器重启,这对不需要直接访问 MySQL 服务器主机选项文件的远程管理很有用。但是,某些系统变量不可持久化,或者只能在某些限制性条件下持久化。

    persist_only_admin_x509_subject 系统变量指定用户必须具有的 SSL 证书 X.509 主题值才能持久化持久化限制的系统变量。默认值为空字符串,这将禁用主题检查,因此任何用户都不能持久化持久化限制的系统变量。

    如果 persist_only_admin_x509_subject 非空,使用加密连接连接到服务器并提供具有指定主题值的 SSL 证书的用户,可以使用 SET PERSIST_ONLY 持久化持久化限制的系统变量。有关持久化限制的系统变量的信息以及配置 MySQL 以启用 persist_only_admin_x509_subject 的说明,请参见 第 7.1.9.4 节,“不可持久化和持久化限制的系统变量”

  • persist_sensitive_variables_in_plaintext

    命令行格式 --persist_sensitive_variables_in_plaintext[={OFF|ON}]
    系统变量 persist_sensitive_variables_in_plaintext
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    persist_sensitive_variables_in_plaintext 控制服务器是否允许以未加密格式存储敏感系统变量的值,如果在使用 SET PERSIST 设置系统变量的值时,密钥环组件支持不可用。它还控制服务器是否可以在无法解密加密值的情况下启动。请注意,密钥环插件不支持对敏感系统变量进行安全存储;必须在 MySQL 服务器实例上启用密钥环组件(参见 第 8.4.4 节,“MySQL 密钥环”)才能支持安全存储。

    默认设置 ON 在密钥环组件支持可用时加密值,如果不可用则以未加密形式持久化它们(并发出警告)。下次设置任何持久化的系统变量时,如果此时密钥环支持可用,服务器将加密任何未加密的敏感系统变量的值。如果无法解密加密的系统变量值,ON 设置还允许服务器启动,在这种情况下,将发出警告并使用系统变量的默认值。在这种情况下,它们的价值无法更改,直到它们能够被解密。

    最安全的设置 OFF 表示如果密钥环组件支持不可用,则无法持久化敏感的系统变量值。OFF 设置还意味着如果无法解密加密的系统变量值,则服务器不会启动。

    有关更多信息,请参见 持久化敏感系统变量

  • pid_file

    命令行格式 --pid-file=file_name
    系统变量 pid_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名

    服务器写入其进程 ID 的文件的路径名。服务器在数据目录中创建该文件,除非给出绝对路径名以指定不同的目录。如果指定此变量,则必须指定一个值。如果未指定此变量,MySQL 使用默认值 host_name.pid,其中 host_name 是主机名。

    进程 ID 文件由 mysqld_safe 等其他程序用于确定服务器的进程 ID。在 Windows 上,此变量还会影响默认错误日志文件名。参见 第 7.4.2 节,“错误日志”

  • plugin_dir

    命令行格式 --plugin-dir=dir_name
    系统变量 plugin_dir
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 BASEDIR/lib/plugin

    插件目录的路径名。

    如果插件目录可由服务器写入,则用户可能可以使用 SELECT ... INTO DUMPFILE 将可执行代码写入目录中的文件。可以通过使 plugin_dir 对服务器只读或通过将 secure_file_priv 设置为 SELECT 可安全写入的目录来防止这种情况。

  • port

    命令行格式 --port=port_num
    系统变量 port
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 3306
    最小值 0
    最大值 65535

    服务器监听 TCP/IP 连接的端口号。可以使用 --port 选项设置此变量。

  • preload_buffer_size

    命令行格式 --preload-buffer-size=#
    系统变量 preload_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 32768
    最小值 1024
    最大值 1073741824
    单位 字节

    预加载索引时分配的缓冲区大小。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • print_identified_with_as_hex

    命令行格式 --print-identified-with-as-hex[={OFF|ON}]
    系统变量 print_identified_with_as_hex
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    SHOW CREATE USER 输出的 IDENTIFIED WITH 子句中显示的密码哈希值可能包含不可打印字符,这些字符会对终端显示和其他环境产生不利影响。启用 print_identified_with_as_hex 将使 SHOW CREATE USER 以十六进制字符串而不是常规字符串文字显示此类哈希值。即使启用了此变量,不包含不可打印字符的哈希值仍将显示为常规字符串文字。

  • profiling

    如果设置为 0 或 OFF(默认值),则禁用语句分析。如果设置为 1 或 ON,则启用语句分析,并且 SHOW PROFILESHOW PROFILES 语句提供对分析信息的访问。参见 第 15.7.7.32 节,“SHOW PROFILES 语句”

    此变量已弃用;预计将在未来的 MySQL 版本中删除。

  • profiling_history_size

    如果启用 profiling,则要维护分析信息的语句数。默认值为 15。最大值为 100。将该值设置为 0 会有效地禁用分析。参见 第 15.7.7.32 节,“SHOW PROFILES 语句”

    此变量已弃用;预计将在未来的 MySQL 版本中删除。

  • protocol_compression_algorithms

    命令行格式 --protocol-compression-algorithms=value
    系统变量 protocol_compression_algorithms
    范围 全局
    动态
    SET_VAR 提示适用
    类型 设置
    默认值 zlib,zstd,uncompressed
    有效值

    zlib

    zstd

    uncompressed

    服务器允许用于传入连接的压缩算法。这些包括客户端程序的连接以及参与源/副本复制或组复制的服务器的连接。压缩不适用于 FEDERATED 表的连接。

    protocol_compression_algorithms 不控制 X 协议的连接压缩。有关其操作方式的信息,请参见 第 22.5.5 节,“使用 X 插件进行连接压缩”

    变量值是一个或多个以逗号分隔的压缩算法名称的列表,可以按任何顺序排列,从以下项目中选择(不区分大小写)

    • zlib:允许使用 zlib 压缩算法的连接。

    • zstd:允许使用 zstd 压缩算法的连接。

    • uncompressed:允许未压缩的连接。如果 protocol_compression_algorithms 值中不包含此算法名称,则服务器不允许未压缩的连接。它只允许使用值中指定的任何其他算法进行压缩连接,并且没有回退到未压缩连接。

    默认值为 zlib,zstd,uncompressed 表示服务器允许所有压缩算法。

    有关更多信息,请参见 第 6.2.8 节,“连接压缩控制”

  • protocol_version

    系统变量 protocol_version
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 10
    最小值 0
    最大值 4294967295

    MySQL 服务器使用的客户端/服务器协议版本。

  • proxy_user

    系统变量 proxy_user
    范围 会话
    动态
    SET_VAR 提示适用
    类型 字符串

    如果当前客户端是另一个用户的代理,则此变量是代理用户帐户名。否则,此变量为 NULL。参见 第 8.2.19 节,“代理用户”

  • pseudo_replica_mode

    系统变量 pseudo_replica_mode
    范围 会话
    动态
    SET_VAR 提示适用
    类型 布尔值

    pseudo_replica_mode 用于服务器内部使用。它有助于正确处理来自比当前处理它们的服务器更旧或更新的服务器的交易。 mysqlbinlog 在执行任何 SQL 语句之前将 pseudo_replica_mode 的值设置为 true。

    设置 pseudo_replica_mode 的会话值是一个受限制的操作。会话用户必须具有 REPLICATION_APPLIER 权限(参见 第 19.3.3 节,“复制权限检查”),或者具有设置受限会话变量的足够权限(参见 第 7.1.9.1 节,“系统变量权限”)。但是,请注意,该变量并非供用户设置;它由复制基础结构自动设置。

    pseudo_replica_mode 对处理预备 XA 事务具有以下影响,这些事务可以附加到或分离到处理会话(默认情况下,发出 XA START 的会话)

    • 如果为真,并且处理会话已执行内部使用的 BINLOG 语句,则 XA 事务将在事务的第一部分(直至 XA PREPARE 完成)完成后自动从会话中分离,以便任何具有 XA_RECOVER_ADMIN 权限的会话都可以提交或回滚这些事务。

    • 如果为假,XA 事务将一直附加到处理会话,直到该会话处于活动状态,在此期间,其他会话无法提交事务。准备好的事务只有在会话断开连接或服务器重新启动时才会分离。

    pseudo_replica_modeoriginal_commit_timestamp 复制延迟时间戳和 original_server_version 系统变量具有以下影响

    • 如果为真,则假定未显式设置 original_commit_timestamporiginal_server_version 的事务源于另一个未知的服务器,因此时间戳和系统变量都被分配为 0,表示未知。

    • 如果为假,则假定未显式设置 original_commit_timestamporiginal_server_version 的事务源于当前服务器,因此时间戳和系统变量分别被分配为当前时间戳和当前服务器的版本。

    pseudo_replica_mode 对处理设置一个或多个不受支持(已删除或未知)SQL 模式的语句具有以下影响

    • 如果为真,则服务器将忽略不受支持的模式并发出警告。

    • 如果为假,则服务器将使用 ER_UNSUPPORTED_SQL_MODE 拒绝该语句。

  • pseudo_slave_mode

    已弃用
    系统变量 pseudo_slave_mode
    范围 会话
    动态
    SET_VAR 提示适用
    类型 布尔值

    pseudo_replica_mode 的过时别名。

  • pseudo_thread_id

    系统变量 pseudo_thread_id
    范围 会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2147483647
    最小值 0
    最大值 2147483647

    此变量用于服务器内部使用。

    警告

    更改 pseudo_thread_id 系统变量的会话值会更改 CONNECTION_ID() 函数返回的值。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • query_alloc_block_size

    命令行格式 --query-alloc-block-size=#
    系统变量 query_alloc_block_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8192
    最小值 1024
    最大值 4294966272
    单位 字节
    块大小 1024

    为在语句解析和执行期间创建的对象分配的内存块的分配大小(以字节为单位)。如果您遇到内存碎片问题,增加此参数可能会有所帮助。

    字节数的块大小为 1024。MySQL Server 在存储系统变量的值之前,会将不是块大小的精确倍数的值向下舍入到下一个较小的块大小的倍数。解析器允许的值最多为平台上的最大无符号整数(对于 32 位系统,为 4294967295 或 232−1;对于 64 位系统,为 18446744073709551615 或 264−1),但实际最大值要小一个块大小。

  • query_prealloc_size

    命令行格式 --query-prealloc-size=#
    已弃用
    系统变量 query_prealloc_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8192
    最小值 8192
    最大值(64 位平台) 18446744073709550592
    最大值(32 位平台) 4294966272
    单位 字节
    块大小 1024

    query_prealloc_size 已弃用,设置它不会有任何影响;您应该预期它将在 MySQL 的未来版本中被删除。

  • rand_seed1

    系统变量 rand_seed1
    范围 会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 N/A
    最小值 0
    最大值 4294967295

    rand_seed1rand_seed2 变量仅存在于会话变量中,可以设置但不能读取。这些变量(但不是它们的值)会在 SHOW VARIABLES 的输出中显示。

    这些变量的目的是支持 RAND() 函数的复制。对于调用 RAND() 的语句,源服务器将向副本传递两个值,然后用这两个值来播种随机数生成器。副本使用这些值来设置会话变量 rand_seed1rand_seed2,以便副本上的 RAND() 生成与源服务器上的值相同的随机数。

  • rand_seed2

    参见 rand_seed1 的描述。

  • range_alloc_block_size

    命令行格式 --range-alloc-block-size=#
    系统变量 range_alloc_block_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4096
    最小值 4096
    最大值(64 位平台) 18446744073709550592
    最大值 4294966272
    单位 字节
    块大小 1024

    执行范围优化时分配的块的大小(以字节为单位)。

    字节数的块大小为 1024。MySQL Server 在存储系统变量的值之前,会将不是块大小的精确倍数的值向下舍入到下一个较小的块大小的倍数。解析器允许的值最多为平台上的最大无符号整数(对于 32 位系统,为 4294967295 或 232−1;对于 64 位系统,为 18446744073709551615 或 264−1),但实际最大值要小一个块大小。

  • range_optimizer_max_mem_size

    命令行格式 --range-optimizer-max-mem-size=#
    系统变量 range_optimizer_max_mem_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8388608
    最小值 0
    最大值 18446744073709551615
    单位 字节

    范围优化器内存消耗的限制。值为 0 表示 无限制。 如果优化器考虑的执行计划使用范围访问方法,但优化器估计使用此方法所需的内存量将超过限制,则优化器将放弃该计划并考虑其他计划。有关更多信息,请参见 限制范围优化的内存使用

  • rbr_exec_mode

    系统变量 rbr_exec_mode
    范围 会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 STRICT
    有效值

    STRICT

    IDEMPOTENT

    mysqlbinlog 内部使用。此变量在 IDEMPOTENT 模式和 STRICT 模式之间切换服务器。 IDEMPOTENT 模式会导致 mysqlbinlog 生成的 BINLOG 语句中抑制重复键错误和未找到键错误。此模式在将基于行的二进制日志重播到与现有数据发生冲突的服务器上时非常有用。 mysqlbinlog 在您指定 --idempotent 选项时会设置此模式,方法是将以下内容写入输出

    SET SESSION RBR_EXEC_MODE=IDEMPOTENT;
  • read_buffer_size

    命令行格式 --read-buffer-size=#
    系统变量 read_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 131072
    最小值 8192
    最大值 2147479552
    单位 字节
    块大小 4096

    每个执行 MyISAM 表的顺序扫描的线程都会为其扫描的每个表分配一个大小为(以字节为单位)的缓冲区。如果您执行许多顺序扫描,则可能需要增加此值,该值默认为 131072。此变量的值应为 4KB 的倍数。如果将其设置为不是 4KB 的倍数的值,则其值将向下舍入到最接近的 4KB 的倍数。

    此选项还在以下情况下用于除 InnoDB 之外的所有其他存储引擎:

    • ORDER BY 中排序行时,用于将索引缓存在临时文件(而不是临时表)中。

    • 用于将数据批量插入分区。

    • 用于缓存嵌套查询的结果。

    read_buffer_size 还以一种其他存储引擎特定的方式使用:为 MEMORY 表确定内存块的大小。

    select_into_buffer_size 用于 SELECT INTO DUMPFILESELECT INTO OUTFILE 语句的 I/O 缓存缓冲区。(read_buffer_size 用于所有其他情况下的 I/O 缓存缓冲区大小。)

    有关在不同操作期间内存使用的更多信息,请参见 第 10.12.3.1 节,“MySQL 如何使用内存”

  • read_only

    命令行格式 --read-only[={OFF|ON}]
    系统变量 read_only
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用了 read_only 系统变量,则服务器不允许客户端更新,除非来自具有 CONNECTION_ADMIN 权限(或过时的 SUPER 权限)的用户。此变量默认情况下处于禁用状态。

    服务器还支持 super_read_only 系统变量(默认情况下处于禁用状态),它具有以下影响

    read_only 启用并且 super_read_only 启用时,服务器仍允许以下操作

    • 如果服务器是副本,则复制线程执行的更新。在复制设置中,在副本服务器上启用 read_only 可能会有用,以确保副本仅从源服务器接收更新,而不是从客户端接收更新。

    • 写入系统表 mysql.gtid_executed,该表存储在当前二进制日志文件中不存在的已执行事务的 GTID。

    • 使用 ANALYZE TABLEOPTIMIZE TABLE 语句。只读模式的目的是防止对表结构或内容进行更改。分析和优化不属于此类更改。这意味着,例如,可以使用 mysqlcheck --all-databases --analyze 对只读副本执行一致性检查。

    • 使用 FLUSH STATUS 语句,这些语句始终写入二进制日志。

    • TEMPORARY 表的操作。

    • 插入日志表(mysql.general_logmysql.slow_log);请参见 第 7.4.1 节,“选择通用查询日志和慢速查询日志输出目标”

    • 更新性能模式表,例如 UPDATETRUNCATE TABLE 操作。

    对复制源服务器上的 read_only 的更改不会复制到副本服务器。可以在副本上独立设置该值,而与源上的设置无关。

    以下条件适用于尝试启用 read_only(包括启用 super_read_only 导致的隐式尝试)。

    • 如果您有任何显式锁(使用 LOCK TABLES 获取)或有挂起的交易,则尝试失败并发生错误。

    • 在其他客户端有任何正在进行的语句、活动的 LOCK TABLES WRITE 或正在进行的提交之前,尝试会阻塞,直到锁被释放以及语句和事务结束。在尝试启用 read_only 挂起时,其他客户端对表锁的请求或开始事务的请求也会阻塞,直到 read_only 设置完毕。

    • 如果存在持有元数据锁的活动事务,则尝试会阻塞,直到这些事务结束。

    • 当您持有全局读锁(使用 FLUSH TABLES WITH READ LOCK 获取)时,可以启用 read_only,因为这不会涉及表锁。

  • read_rnd_buffer_size

    命令行格式 --read-rnd-buffer-size=#
    系统变量 read_rnd_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最小值 1
    最大值 2147483647
    单位 字节

    此变量用于从 MyISAM 表读取,以及对于任何存储引擎,用于多范围读取优化。

    MyISAM 表中按排序顺序读取行,以遵循键排序操作,行是通过此缓冲区读取的,以避免磁盘查找。参见 第 10.2.1.16 节,“ORDER BY 优化”。将变量设置为较大的值可以显着提高 ORDER BY 的性能。但是,这是为每个客户端分配的缓冲区,因此您不应将全局变量设置为较大的值。相反,仅在需要运行大型查询的客户端内更改会话变量。

    有关在不同操作期间内存使用的更多信息,请参见 第 10.12.3.1 节,“MySQL 如何使用内存”。有关多范围读取优化的信息,请参见 第 10.2.1.11 节,“多范围读取优化”

  • regexp_stack_limit

    命令行格式 --regexp-stack-limit=#
    系统变量 regexp_stack_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8000000
    最小值 0
    最大值 2147483647
    单位 字节

    用于由 REGEXP_LIKE() 和类似函数(参见 第 14.8.2 节,“正则表达式”)执行的正则表达式匹配操作使用的内部堆栈的可用最大内存(以字节为单位)。

  • regexp_time_limit

    命令行格式 --regexp-time-limit=#
    系统变量 regexp_time_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 32
    最小值 0
    最大值 2147483647

    REGEXP_LIKE() 和类似函数(参见 第 14.8.2 节,“正则表达式”)执行的正则表达式匹配操作的时间限制。此限制表示匹配引擎执行的最大允许步骤数,因此仅间接影响执行时间。通常,它大约在毫秒级。

  • require_row_format

    系统变量 require_row_format
    范围 会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量供复制和 mysqlbinlog 的内部服务器使用。它将会话中执行的 DML 事件限制为仅以基于行的二进制日志记录格式编码的事件,并且不能创建临时表。不符合限制的查询将失败。

    将此系统变量的会话值设置为 ON 不需要任何权限。将此系统变量的会话值设置为 OFF 是受限操作,会话用户必须拥有足够的权限来设置受限的会话变量。参见 第 7.1.9.1 节,“系统变量权限”

  • require_secure_transport

    命令行格式 --require-secure-transport[={OFF|ON}]
    系统变量 require_secure_transport
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    客户端连接到服务器是否需要使用某种形式的安全传输。启用此变量后,服务器仅允许使用 TLS/SSL 加密的 TCP/IP 连接,或使用套接字文件(在 Unix 上)或共享内存(在 Windows 上)的连接。服务器拒绝不安全的连接尝试,这些尝试会因 ER_SECURE_TRANSPORT_REQUIRED 错误而失败。

    此功能补充了每个帐户的 SSL 要求,这些要求具有优先级。例如,如果帐户的定义包含 REQUIRE SSL,启用 require_secure_transport 不会使使用该帐户进行连接成为可能使用 Unix 套接字文件。

    服务器可能没有可用的安全传输。例如,如果 Windows 上的服务器在没有指定任何 SSL 证书或密钥文件,并且 shared_memory 系统变量被禁用的情况下启动,则该服务器不支持任何安全传输。在这种情况下,尝试在启动时启用 require_secure_transport 会导致服务器向错误日志写入消息并退出。尝试在运行时启用该变量会导致 ER_NO_SECURE_TRANSPORTS_CONFIGURED 错误。

    另请参见 将加密连接配置为强制性

  • restrict_fk_on_non_standard_key

    命令行格式 --restrict-fk-on-non-standard-key
    已弃用
    系统变量 restrict_fk_on_non_standard_key
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    此变量在设置为 ON(默认值)时,会阻止使用非唯一键或部分键作为外键。要允许在当前会话中使用此类键作为外键,请使用 SET @@session.restrict_fk_on_non_standard_key=OFF;要允许全局使用它们,请设置全局变量或在启动服务器时使用 --skip-restrict-fk-on-non-standard-key

    CREATE TABLEALTER TABLE 语句中使用非唯一键或部分键作为外键已弃用,您应该预期在 MySQL 的未来版本中将删除对它的支持。当 restrict_fk_on_non_standard_keyON 时,尝试执行此操作会导致 ER_FK_NO_INDEX_PARENT;当它为 OFF 时,此用法将被允许,但仍会作为警告发出 ER_WARN_DEPRECATED_NON_STANDARD_KEY

    restrict_fk_on_non_standard_key 已弃用,并将在 MySQL 的未来版本中删除。设置它会发出弃用警告。

    对 MySQL 复制的影响。当在主服务器上创建非标准键上的外键,因为 restrict_fk_on_non_standard_keyOFF 时,语句将在副本上成功,而与该变量在副本上的任何设置无关。

  • resultset_metadata

    系统变量 resultset_metadata
    范围 会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 FULL
    有效值

    FULL

    NONE

    对于元数据传输是可选的连接,客户端会设置 resultset_metadata 系统变量来控制服务器是否返回结果集元数据。允许的值为 FULL(返回所有元数据;这是默认值)和 NONE(不返回元数据)。

    对于不是元数据可选的连接,将 resultset_metadata 设置为 NONE 会产生错误。

    有关管理结果集元数据传输的详细信息,请参见 可选结果集元数据

  • secondary_engine_cost_threshold

    系统变量 secondary_engine_cost_threshold
    范围 会话
    动态
    SET_VAR 提示适用
    类型 数字
    默认值 100000.000000
    最小值 0
    最大值 DBL_MAX(最大双精度值)

    将查询卸载到辅助引擎的优化器成本阈值。

    供 HeatWave 使用。参见 HeatWave 用户指南

  • schema_definition_cache

    命令行格式 --schema-definition-cache=#
    系统变量 schema_definition_cache
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义字典对象缓存中可以保留的架构定义对象(已使用和未使用的)的数量限制。

    仅当使用的架构定义对象的数量少于 schema_definition_cache 定义的容量时,未使用的架构定义对象才会保留在字典对象缓存中。

    设置为 0 表示仅在使用期间将架构定义对象保留在字典对象缓存中。

    有关更多信息,请参见 第 16.4 节,“字典对象缓存”

  • secure_file_priv

    命令行格式 --secure-file-priv=dir_name
    系统变量 secure_file_priv
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 平台特定
    有效值

    空字符串

    dirname

    NULL

    此变量用于限制数据导入和导出操作的影响,例如由 LOAD DATASELECT ... INTO OUTFILE 语句以及 LOAD_FILE() 函数执行的操作。这些操作仅允许对拥有 FILE 权限的用户执行。

    secure_file_priv 可以按以下方式设置

    • 如果为空,则变量无效。这不是安全设置。

    • 如果设置为目录的名称,则服务器将导入和导出操作限制为仅对该目录中的文件操作。该目录必须存在;服务器不会创建它。

    • 如果设置为 NULL,则服务器将禁用导入和导出操作。

    默认值是平台特定的,并且取决于 INSTALL_LAYOUT CMake 选项的值,如以下表格所示。如果您是从源代码构建,要显式指定默认 secure_file_priv 值,请使用 INSTALL_SECURE_FILE_PRIVDIR CMake 选项。

    INSTALL_LAYOUT 默认 secure_file_priv
    STANDALONE
    DEBRPMSVR4 /var/lib/mysql-files
    其他 CMAKE_INSTALL_PREFIX 值下的 mysql-files

    服务器在启动时检查secure_file_priv的值,如果该值不安全,则会向错误日志写入警告。非NULL值被认为是不安全的,如果它是空的,或者该值是数据目录或其子目录,或者所有用户都可以访问的目录。如果secure_file_priv设置为不存在的路径,服务器会向错误日志写入错误消息并退出。

  • select_into_buffer_size

    命令行格式 --select-into-buffer-size=#
    系统变量 select_into_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 131072
    最小值 8192
    最大值 2147479552
    单位 字节
    块大小 4096

    使用SELECT INTO OUTFILESELECT INTO DUMPFILE将数据转储到一个或多个文件中以进行备份创建、数据迁移或其他目的时,写入操作通常可以缓冲,然后触发大量写入 I/O 活动到磁盘或其他存储设备,并使其他对延迟更敏感的查询停顿。可以使用此变量来控制用于将数据写入存储设备的缓冲区的大小,以确定何时应进行缓冲区同步,从而防止上述类型的写入停顿。

    select_into_buffer_size会覆盖为read_buffer_size设置的任何值。(select_into_buffer_sizeread_buffer_size具有相同的默认值、最大值和最小值。)还可以使用select_into_disk_sync_delay来设置每次同步后要观察的超时。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • select_into_disk_sync

    命令行格式 --select-into-disk-sync={ON|OFF}
    系统变量 select_into_disk_sync
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF
    有效值

    OFF

    ON

    设置为ON时,将启用通过长时间运行的SELECT INTO OUTFILESELECT INTO DUMPFILE语句对输出文件进行写入的缓冲区同步,使用select_into_buffer_size

  • select_into_disk_sync_delay

    命令行格式 --select-into-disk-sync-delay=#
    系统变量 select_into_disk_sync_delay
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 31536000
    单位 毫秒

    当通过长时间运行的SELECT INTO OUTFILESELECT INTO DUMPFILE语句对输出文件进行写入的缓冲区同步由select_into_disk_sync启用时,此变量将设置一个可选的延迟(以毫秒为单位),该延迟在同步后发生。0(默认值)表示没有延迟。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • session_track_gtids

    命令行格式 --session-track-gtids=value
    系统变量 session_track_gtids
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF

    OWN_GTID

    ALL_GTIDS

    控制服务器是否将 GTID 返回给客户端,使客户端能够使用它们来跟踪服务器状态。根据变量的值,在执行完每个事务后,服务器的 GTID 将被捕获并作为确认的一部分返回给客户端。对于session_track_gtids,可能的取值如下

    • OFF:服务器不将 GTID 返回给客户端。这是默认值。

    • OWN_GTID:服务器返回自上次确认以来,在当前会话中此客户端成功提交的所有事务的 GTID。通常,这是最后一个提交事务的单个 GTID,但如果单个客户端请求导致多个事务,则服务器将返回包含所有相关 GTID 的 GTID 集。

    • ALL_GTIDS:服务器返回其gtid_executed系统变量的全局值,它在事务成功提交后读取该值。除了刚刚提交的事务的 GTID 外,此 GTID 集还包含任何客户端在服务器上提交的所有事务,并且可能包含在确认当前正在处理的事务提交的时刻后提交的事务。

    session_track_gtids不能在事务上下文中设置。

    有关会话状态跟踪的更多信息,请参见第 7.1.18 节,“服务器跟踪客户端会话状态”

  • session_track_schema

    命令行格式 --session-track-schema[={OFF|ON}]
    系统变量 session_track_schema
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    控制服务器是否跟踪在当前会话中设置默认模式(数据库)的时间,并通知客户端使模式名称可用。

    如果模式名称跟踪器已启用,则每次设置默认模式时都会发生名称通知,即使新模式名称与旧模式名称相同。

    有关会话状态跟踪的更多信息,请参见第 7.1.18 节,“服务器跟踪客户端会话状态”

  • session_track_state_change

    命令行格式 --session-track-state-change[={OFF|ON}]
    系统变量 session_track_state_change
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    控制服务器是否跟踪对当前会话状态的更改,并在发生状态更改时通知客户端。可以报告有关客户端会话状态的以下属性的更改

    • 默认模式(数据库)。

    • 系统变量的特定于会话的值。

    • 用户定义的变量。

    • 临时表。

    • 准备好的语句。

    如果会话状态跟踪器已启用,则会为涉及跟踪的会话属性的每个更改发出通知,即使新属性值与旧属性值相同。例如,将用户定义的变量设置为其当前值会导致发出通知。

    session_track_state_change变量仅控制何时发生更改的通知,而不是更改的内容。例如,在设置默认模式或分配跟踪的会话系统变量时会发生状态更改通知,但通知不包括模式名称或变量值。要接收模式名称或会话系统变量值的通知,请分别使用session_track_schemasession_track_system_variables系统变量。

    注意

    将值分配给session_track_state_change本身不被视为状态更改,也不会作为状态更改进行报告。但是,如果其名称列在session_track_system_variables的值中,对其进行任何分配都会导致对新值的通知。

    有关会话状态跟踪的更多信息,请参见第 7.1.18 节,“服务器跟踪客户端会话状态”

  • session_track_system_variables

    命令行格式 --session-track-system-variables=#
    系统变量 session_track_system_variables
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 time_zone, autocommit, character_set_client, character_set_results, character_set_connection

    控制服务器是否跟踪对会话系统变量的分配,并通知客户端每个分配的变量的名称和值。变量值是一个逗号分隔的列表,用于跟踪分配的变量。默认情况下,为time_zoneautocommitcharacter_set_clientcharacter_set_resultscharacter_set_connection启用通知。(后三个变量是受SET NAMES影响的变量。)

    要启用对每个处理的语句显示语句 ID,请使用statement_id变量。例如

    mysql>  SET @@SESSION.session_track_system_variables='statement_id'
    mysql>  SELECT 1;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    1 row in set (0.0006 sec)
    Statement ID: 603835

    特殊值*(星号)会导致服务器跟踪对所有会话变量的分配。如果给出,此值必须单独指定,不带特定的系统变量名称。此值还会启用对每个成功处理的语句显示语句 ID。

    要禁用对会话变量分配的通知,请将session_track_system_variables设置为空字符串。

    如果启用了会话系统变量跟踪,则会为对跟踪的会话变量的所有分配发出通知,即使新值与旧值相同。

    有关会话状态跟踪的更多信息,请参见第 7.1.18 节,“服务器跟踪客户端会话状态”

  • session_track_transaction_info

    命令行格式 --session-track-transaction-info=value
    系统变量 session_track_transaction_info
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF

    STATE

    CHARACTERISTICS

    控制服务器是否跟踪当前会话中事务的状态和特征,并通知客户端使此信息可用。这些session_track_transaction_info值是允许的

    • OFF:禁用事务状态跟踪。这是默认值。

    • STATE:启用事务状态跟踪,但不跟踪特征。状态跟踪使客户端能够确定事务是否正在进行,以及是否可以在不回滚的情况下将其移至其他会话。

    • CHARACTERISTICS:启用事务状态跟踪,包括特征跟踪。特征跟踪使客户端能够确定如何在另一个会话中重新启动事务,以便它具有与原始会话中相同的特征。以下特征与此目的相关

      ISOLATION LEVEL
      READ ONLY
      READ WRITE
      WITH CONSISTENT SNAPSHOT

    为了使客户端能够安全地将事务重新定位到另一个会话,它不仅必须跟踪事务状态,还必须跟踪事务特征。此外,客户端必须跟踪transaction_isolationtransaction_read_only系统变量,以正确确定会话默认值。(要跟踪这些变量,请将它们列在session_track_system_variables系统变量的值中。)

    有关会话状态跟踪的更多信息,请参见第 7.1.18 节,“服务器跟踪客户端会话状态”

  • set_operations_buffer_size

    命令行格式 --set-operations-buffer-size=#
    系统变量 set_operations_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256K
    最小值 16K
    最大值 1 GB

    设置INTERSECTEXCEPT操作的缓冲区大小,这些操作在hash_set_operations优化器开关为ON时使用哈希表。通常,增加此缓冲区的大小会提高这些操作在启用哈希优化时的性能。

  • sha256_password_auto_generate_rsa_keys

    命令行格式 --sha256-password-auto-generate-rsa-keys[={OFF|ON}]
    已弃用
    系统变量 sha256_password_auto_generate_rsa_keys
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    服务器使用此变量来确定是否在数据目录中自动生成 RSA 私钥/公钥对文件(如果它们不存在)。

    在启动时,如果满足以下所有条件,服务器将在数据目录中自动生成 RSA 私钥/公钥对文件:sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys 系统变量已启用;未指定任何 RSA 选项;RSA 文件在数据目录中丢失。这些密钥对文件使用 RSA 通过非加密连接进行安全密码交换,用于由 sha256_password(已弃用)或 caching_sha2_password 插件验证的帐户;请参阅 第 8.4.1.3 节,“SHA-256 可插拔身份验证”第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”

    有关 RSA 文件自动生成的更多信息,包括文件名和特征,请参阅 第 8.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”

    auto_generate_certs 系统变量相关,但控制自动生成 SSL 证书和密钥文件,这些文件需要使用 SSL 进行安全连接。

  • sha256_password_private_key_path

    命令行格式 --sha256-password-private-key-path=file_name
    已弃用
    系统变量 sha256_password_private_key_path
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 private_key.pem

    此变量的值是用于sha256_password(已弃用)身份验证插件的 RSA 私钥文件的路径名。如果文件被命名为相对路径,则它将相对于服务器数据目录进行解释。该文件必须采用 PEM 格式。

    重要

    由于此文件存储私钥,因此应限制其访问模式,以便只有 MySQL 服务器可以读取它。

    有关sha256_password的信息,请参见第 8.4.1.3 节,“SHA-256 可插拔身份验证”

  • sha256_password_proxy_users

    命令行格式 --sha256-password-proxy-users[={OFF|ON}]
    已弃用
    系统变量 sha256_password_proxy_users
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量控制sha256_password(已弃用)内置身份验证插件是否支持代理用户。除非check_proxy_users系统变量已启用,否则此变量无效。有关用户代理的更多信息,请参见第 8.2.19 节,“代理用户”

  • sha256_password_public_key_path

    命令行格式 --sha256-password-public-key-path=file_name
    已弃用
    系统变量 sha256_password_public_key_path
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 public_key.pem

    此变量的值是sha256_password(已弃用)身份验证插件的 RSA 公钥文件路径名。如果文件被命名为相对路径,它将被解释为相对于服务器数据目录。该文件必须采用 PEM 格式。由于此文件存储公钥,因此副本可以自由分发给客户端用户。(显式指定使用 RSA 密码加密连接到服务器的公钥的客户端必须使用与服务器使用的相同的公钥。)

    有关sha256_password(已弃用)的更多信息,包括有关客户端如何指定 RSA 公钥的信息,请参见第 8.4.1.3 节,“SHA-256 可插拔身份验证”

  • shared_memory

    命令行格式 --shared-memory[={OFF|ON}]
    系统变量 shared_memory
    范围 全局
    动态
    SET_VAR 提示适用
    平台特定 Windows
    类型 布尔值
    默认值 OFF

    (仅限 Windows。)服务器是否允许共享内存连接。

  • shared_memory_base_name

    命令行格式 --shared-memory-base-name=name
    系统变量 shared_memory_base_name
    范围 全局
    动态
    SET_VAR 提示适用
    平台特定 Windows
    类型 字符串
    默认值 MYSQL

    (仅限 Windows。)用于共享内存连接的共享内存的名称。当在单个物理机上运行多个 MySQL 实例时,这很有用。默认名称为MYSQL。该名称区分大小写。

    此变量仅在服务器使用启用了shared_memory系统变量来支持共享内存连接的情况下适用。

  • show_create_table_skip_secondary_engine

    命令行格式 --show-create-table-skip-secondary-engine[={OFF|ON}]
    系统变量 show_create_table_skip_secondary_engine
    范围 会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    启用show_create_table_skip_secondary_engine会导致SECONDARY ENGINE 子句从SHOW CREATE TABLE 输出中排除,并且从CREATE TABLE 语句中排除(由mysqldump 实用程序转储)。

    mysqldump 提供了--show-create-skip-secondary-engine 选项。当指定时,它将为转储操作的持续时间启用show_create_table_skip_secondary_engine 系统变量。

    供 HeatWave 使用。参见 HeatWave 用户指南

  • show_create_table_verbosity

    命令行格式 --show-create-table-verbosity[={OFF|ON}]
    系统变量 show_create_table_verbosity
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    SHOW CREATE TABLE 通常不会显示ROW_FORMAT 表选项(如果行格式为默认格式)。启用此变量会导致SHOW CREATE TABLE 显示ROW_FORMAT(无论它是否为默认格式)。

  • show_gipk_in_create_table_and_information_schema

    命令行格式 --show-gipk-in-create-table-and-information-schema[={OFF|ON}]
    系统变量 show_gipk_in_create_table_and_information_schema
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    生成的不可见主键是否在SHOW 语句的输出和 Information Schema 表中可见。当此变量设置为OFF 时,不会显示此类键。

    此变量不会复制。

    有关更多信息,请参见第 15.1.20.11 节,“生成的不可见主键”

  • skip_external_locking

    命令行格式 --skip-external-locking[={OFF|ON}]
    系统变量 skip_external_locking
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    如果mysqld 使用外部锁定(系统锁定),则为OFF,如果禁用外部锁定,则为ON。这仅影响MyISAM 表访问。

    此变量由--external-locking--skip-external-locking 选项设置。默认情况下禁用外部锁定。

    外部锁定仅影响MyISAM 表访问。有关更多信息(包括可以使用和不能使用的条件),请参见第 10.11.5 节,“外部锁定”

  • skip_name_resolve

    命令行格式 --skip-name-resolve[={OFF|ON}]
    系统变量 skip_name_resolve
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否在检查客户端连接时解析主机名。如果此变量为OFFmysqld 会在检查客户端连接时解析主机名。如果为ONmysqld 仅使用 IP 号码;在这种情况下,授予表中的所有Host 列值必须是 IP 地址。请参见第 7.1.12.3 节,“DNS 查找和主机缓存”

    根据系统网络配置和帐户的Host 值,客户端可能需要使用显式--host 选项连接,例如--host=127.0.0.1--host=::1

    尝试连接到主机127.0.0.1 通常会解析为localhost 帐户。但是,如果服务器使用启用了skip_name_resolve 的情况下运行,则会失败。如果您计划这样做,请确保存在可以接受连接的帐户。例如,要能够使用--host=127.0.0.1--host=::1root 身份连接,请创建这些帐户

    CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
    CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
  • skip_networking

    命令行格式 --skip-networking[={OFF|ON}]
    系统变量 skip_networking
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量控制服务器是否允许 TCP/IP 连接。默认情况下,它被禁用(允许 TCP 连接)。如果启用,服务器仅允许本地(非 TCP/IP)连接,并且与mysqld 的所有交互必须使用命名管道或共享内存(在 Windows 上)或 Unix 套接字文件(在 Unix 上)进行。对于仅允许本地客户端的系统,此选项强烈推荐。请参见第 7.1.12.3 节,“DNS 查找和主机缓存”

    由于使用--skip-grant-tables 启动服务器会禁用身份验证检查,因此服务器在这种情况下也会通过启用skip_networking 来禁用远程连接。

  • skip_show_database

    命令行格式 --skip-show-database
    系统变量 skip_show_database
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    这可以防止人们使用SHOW DATABASES 语句(如果他们没有SHOW DATABASES 权限)。如果您担心用户能够看到属于其他用户的数据库,这可以提高安全性。其效果取决于SHOW DATABASES 权限:如果变量值为ON,则SHOW DATABASES 语句仅允许具有SHOW DATABASES 权限的用户使用,并且该语句显示所有数据库名称。如果该值为OFF,则SHOW DATABASES 允许所有用户使用,但仅显示用户具有SHOW DATABASES 或其他权限的那些数据库的名称。

    注意

    由于任何静态全局权限都被视为所有数据库的权限,因此任何静态全局权限都允许用户使用SHOW DATABASES 或通过检查INFORMATION_SCHEMASCHEMATA 表来查看所有数据库名称,除了那些在数据库级别被部分撤销限制的数据库。

  • slow_launch_time

    命令行格式 --slow-launch-time=#
    系统变量 slow_launch_time
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2
    最小值 0
    最大值 31536000
    单位

    如果创建线程花费的时间超过这么多秒,服务器会增加Slow_launch_threads 状态变量。

  • slow_query_log

    命令行格式 --slow-query-log[={OFF|ON}]
    系统变量 slow_query_log
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    慢查询日志是否已启用。该值可以是 0(或OFF)以禁用日志,或者 1(或ON)以启用日志。日志输出的目标由log_output 系统变量控制;如果该值为NONE,则即使启用了日志,也不会写入任何日志条目。

    long_query_time 变量的值确定。请参见第 7.4.5 节,“慢查询日志”

  • slow_query_log_file

    命令行格式 --slow-query-log-file=file_name
    系统变量 slow_query_log_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 host_name-slow.log

    慢查询日志文件的名称。默认值为host_name-slow.log,但可以使用--slow_query_log_file 选项更改初始值。

  • socket

    命令行格式 --socket={file_name|pipe_name}
    系统变量 socket
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值(Windows) MySQL
    默认值(其他) /tmp/mysql.sock

    在 Unix 平台上,此变量是用于本地客户端连接的套接字文件的名称。默认值为/tmp/mysql.sock。(对于某些发行版格式,目录可能有所不同,例如 RPM 的/var/lib/mysql。)

    在 Windows 上,此变量是用于本地客户端连接的命名管道的名称。默认值为MySQL(不区分大小写)。

  • sort_buffer_size

    命令行格式 --sort-buffer-size=#
    系统变量 sort_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最小值 32768
    最大值(Windows) 4294967295
    最大值(其他,64 位平台) 18446744073709551615
    最大值(其他,32 位平台) 4294967295
    单位 字节

    每个需要执行排序的会话都会分配一个大小为该值 的缓冲区。 sort_buffer_size 不特定于任何存储引擎,而是用于优化的一般方式。至少 sort_buffer_size 值必须足够大以容纳排序缓冲区中的 15 个元组。此外,增加 max_sort_length 的值可能需要增加 sort_buffer_size 的值。有关详细信息,请参阅 第 10.2.1.16 节,“ORDER BY 优化”

    如果您在 SHOW GLOBAL STATUS 输出中看到每秒出现许多 Sort_merge_passes,您可以考虑增加 sort_buffer_size 的值,以加速无法通过查询优化或改进索引来改进的 ORDER BYGROUP BY 操作。

    优化器会尝试计算出需要多少空间,但可以分配更多空间,直至达到限制。在全局范围内将其设置为大于所需的大小会减慢执行排序的大多数查询。最好将其作为会话设置来增加,并且仅针对需要更大大小的会话增加。在 Linux 上,存在 256KB 和 2MB 的阈值,在这些阈值之上,更大的值可能会显着减慢内存分配速度,因此您应该考虑保持在这些值之下。进行实验以找到最适合您的工作负载的值。请参阅 第 B.3.3.5 节,“MySQL 在哪里存储临时文件”

    sort_buffer_size 的最大允许设置是 4GB−1。对于 64 位平台,允许使用更大的值(64 位 Windows 除外,对于 64 位 Windows,较大的值会被截断为 4GB−1,并发出警告)。

  • sql_auto_is_null

    系统变量 sql_auto_is_null
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用此变量,则在成功插入自动生成的 AUTO_INCREMENT 值的语句之后,您可以通过发出以下形式的语句来查找该值

    SELECT * FROM tbl_name WHERE auto_col IS NULL

    如果语句返回一行,则返回的值与调用 LAST_INSERT_ID() 函数时的值相同。有关详细信息(包括多行插入后的返回值),请参阅 第 14.15 节,“信息函数”。如果未成功插入任何 AUTO_INCREMENT 值,则 SELECT 语句不会返回任何行。

    使用 IS NULL 比较来检索 AUTO_INCREMENT 值的行为由一些 ODBC 程序(如 Access)使用。请参阅 获取自动增量值。通过将 sql_auto_is_null 设置为 OFF 可以禁用此行为。

    sql_auto_is_null 的默认值为 OFF

  • sql_big_selects

    系统变量 sql_big_selects
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    如果设置为 OFF,则 MySQL 会中止可能需要很长时间才能执行的 SELECT 语句(即,优化器估计已检查的行数超过 max_join_size 值的语句)。这在发出不合适的 WHERE 语句时很有用。新连接的默认值为 ON,允许所有 SELECT 语句。

    如果将 max_join_size 系统变量设置为除 DEFAULT 之外的值,则 sql_big_selects 将设置为 OFF

  • sql_buffer_result

    系统变量 sql_buffer_result
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用,则 sql_buffer_result 会强制将 SELECT 语句的结果放入临时表中。这有助于 MySQL 及早释放表锁,并且在将结果发送到客户端需要很长时间的情况下可能会有益。默认值为 OFF

  • sql_generate_invisible_primary_key

    命令行格式 --sql-generate-invisible-primary-key[={OFF|ON}]
    系统变量 sql_generate_invisible_primary_key
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此服务器是否会向任何没有主鍵的 InnoDB 表添加一个生成的不可见主鍵。

    此变量不会复制。此外,即使在副本上设置了此变量,它也会被复制应用线程忽略;这意味着,默认情况下,副本不会为任何复制表生成主鍵,这些表在源上是在没有主鍵的情况下创建的。您可以通过将 REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE 设置为 CHANGE REPLICATION SOURCE TO 语句的一部分(可选地指定复制通道)来使副本为这些表生成不可见主鍵。

    有关详细信息和示例,请参阅 第 15.1.20.11 节,“生成的不可见主鍵”

  • sql_log_off

    系统变量 sql_log_off
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF
    有效值

    OFF (启用日志记录)

    ON (禁用日志记录)

    此变量控制是否为当前会话禁用到一般查询日志的日志记录(假设一般查询日志本身已启用)。默认值为 OFF(即,启用日志记录)。要禁用或启用当前会话的一般查询日志记录,请将会话 sql_log_off 变量设置为 ONOFF

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • sql_mode

    命令行格式 --sql-mode=name
    系统变量 sql_mode
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 设置
    默认值 ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
    有效值

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    当前服务器 SQL 模式,可以动态设置。有关详细信息,请参阅 第 7.1.11 节,“服务器 SQL 模式”

    注意

    MySQL 安装程序可以在安装过程中配置 SQL 模式。

    如果 SQL 模式与默认模式或与您的预期不同,请检查服务器在启动时读取的选项文件中是否有设置。

  • sql_notes

    系统变量 sql_notes
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    如果启用(默认情况下),服务器会诊断 Note 级别的增量 warning_count,并记录它们。如果禁用,则 Note 诊断不会增加 warning_count,服务器也不会记录它们。 mysqldump 包括禁用此变量的输出,以便重新加载转储文件不会为不影响重新加载操作完整性的事件产生警告。

  • sql_quote_show_create

    系统变量 sql_quote_show_create
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    如果启用(默认情况下),服务器会为 SHOW CREATE TABLESHOW CREATE DATABASE 语句引用标识符。如果禁用,则禁用引用。此选项默认启用,以便复制适用于需要引用的标识符。请参阅 第 15.7.7.11 节,“SHOW CREATE TABLE 语句”第 15.7.7.7 节,“SHOW CREATE DATABASE 语句”

  • sql_require_primary_key

    命令行格式 --sql-require-primary-key[={OFF|ON}]
    系统变量 sql_require_primary_key
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否强制创建新表或更改现有表结构的语句要求表具有主鍵。

    设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

    启用此变量有助于避免在基于行的复制中可能发生的性能问题,这些问题可能在表没有主鍵时出现。假设表没有主鍵,并且更新或删除修改了多行。在复制源服务器上,此操作可以使用单个表扫描来执行,但使用基于行的复制进行复制时,会针对副本上的每行进行表扫描,以修改这些行。有了主鍵,这些表扫描就不会发生。

    sql_require_primary_key 适用于基表和 TEMPORARY 表,并且对其值的更改会复制到副本服务器。表必须使用可以参与复制的 MySQL 存储引擎。

    启用后,sql_require_primary_key 会产生以下影响

    • 尝试创建没有主鍵的新表会失败,并出现错误。这包括 CREATE TABLE ... LIKE。它还包括 CREATE TABLE ... SELECT,除非 CREATE TABLE 部分包含主鍵定义。

    • 尝试从现有表中删除主鍵会失败,并出现错误,但允许在同一个 ALTER TABLE 语句中删除主鍵并添加主鍵。

      即使表也包含 UNIQUE NOT NULL 索引,删除主鍵也会失败。

    • 尝试导入没有主鍵的表会失败,并出现错误。

    CHANGE REPLICATION SOURCE TO 语句中,REQUIRE_TABLE_PRIMARY_KEY_CHECK 选项允许副本选择自己的主键检查策略。当为复制通道设置该选项为 ON 时,副本在复制操作中始终将 sql_require_primary_key 系统变量的值设置为 ON,要求主键。当该选项设置为 OFF 时,副本在复制操作中始终将 sql_require_primary_key 系统变量的值设置为 OFF,因此即使源要求主键,也不会要求主键。当 REQUIRE_TABLE_PRIMARY_KEY_CHECK 选项设置为 STREAM(默认值)时,副本将使用从源复制的每个事务的值。对于 REQUIRE_TABLE_PRIMARY_KEY_CHECK 选项的 STREAM 设置,如果复制通道使用权限检查,则 PRIVILEGE_CHECKS_USER 帐户需要足够的权限来设置受限会话变量,以便它可以设置 sql_require_primary_key 系统变量的会话值。对于 ONOFF 设置,该帐户不需要这些权限。有关更多信息,请参见 第 19.3.3 节,“复制权限检查”

  • sql_safe_updates

    系统变量 sql_safe_updates
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用了此变量,则不使用 WHERE 子句中的键或 LIMIT 子句的 UPDATEDELETE 语句将产生错误。这使得能够捕获 UPDATEDELETE 语句,其中键未被正确使用,并且可能会更改或删除大量行。默认值为 OFF

    对于 mysql 客户端,可以使用 --safe-updates 选项启用 sql_safe_updates。有关更多信息,请参见 使用安全更新模式 (--safe-updates)

  • sql_select_limit

    系统变量 sql_select_limit
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 18446744073709551615
    最小值 0
    最大值 18446744073709551615

    SELECT 语句返回的最大行数。有关更多信息,请参见 使用安全更新模式 (--safe-updates)

    新连接的默认值为服务器允许每个表返回的最大行数。典型的默认值为 (232)−1 或 (264)−1。如果已更改限制,则可以通过分配 DEFAULT 值来恢复默认值。

    如果 SELECT 包含 LIMIT 子句,则 LIMIT 优先于 sql_select_limit 的值。

  • sql_warnings

    系统变量 sql_warnings
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量控制单行 INSERT 语句是否在发生警告时生成信息字符串。默认值为 OFF。将该值设置为 ON 以生成信息字符串。

  • ssl_ca

    命令行格式 --ssl-ca=file_name
    系统变量 ssl_ca
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    证书颁发机构 (CA) 证书文件的路径名,以 PEM 格式。该文件包含受信任的 SSL 证书颁发机构列表。

    此变量可以在运行时修改,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为新建立的连接使用的 TLS 上下文。请参见 加密连接的服务器端运行时配置和监控

  • ssl_capath

    命令行格式 --ssl-capath=dir_name
    系统变量 ssl_capath
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 NULL

    包含以 PEM 格式的受信任 SSL 证书颁发机构 (CA) 证书文件的目录的路径名。

    此变量可以在运行时修改,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为新建立的连接使用的 TLS 上下文。请参见 加密连接的服务器端运行时配置和监控

  • ssl_cert

    命令行格式 --ssl-cert=file_name
    系统变量 ssl_cert
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    服务器 SSL 公钥证书文件的路径名,以 PEM 格式。

    如果服务器启动时 ssl_cert 设置为使用任何受限密码或密码类别的证书,则服务器启动时禁用对加密连接的支持。有关密码限制的信息,请参见 连接密码配置

    此变量可以在运行时修改,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为新建立的连接使用的 TLS 上下文。请参见 加密连接的服务器端运行时配置和监控

  • ssl_cipher

    命令行格式 --ssl-cipher=name
    系统变量 ssl_cipher
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL

    使用 TLSv1.2 的连接允许的加密密码列表。如果列表中没有支持的密码,则使用此 TLS 协议的加密连接将无法正常工作。

    该列表可以包括以下任何值

    • ECDHE-ECDSA-AES128-GCM-SHA256

    • ECDHE-ECDSA-AES256-GCM-SHA384

    • ECDHE-RSA-AES128-GCM-SHA256

    • ECDHE-RSA-AES256-GCM-SHA384

    • ECDHE-ECDSA-CHACHA20-POLY1305

    • ECDHE-RSA-CHACHA20-POLY1305

    • ECDHE-ECDSA-AES256-CCM

    • ECDHE-ECDSA-AES128-CCM

    • DHE-RSA-AES128-GCM-SHA256

    • DHE-RSA-AES256-GCM-SHA384

    • DHE-RSA-AES256-CCM

    • DHE-RSA-AES128-CCM

    • DHE-RSA-CHACHA20-POLY1305

    尝试在设置此变量时在密码列表中包含此处未显示的任何值会导致错误 (ER_BLOCKED_CIPHER).

    为了获得最大的可移植性,密码列表应包含一个或多个密码名称,并用冒号分隔。以下示例显示了用冒号分隔的两个密码名称

    [mysqld]
    ssl_cipher="DHE-RSA-AES128-GCM-SHA256:AES128-SHA"

    OpenSSL 支持 https://www.openssl.org/docs/manmaster/man1/ciphers.html 中描述的密码指定语法。

    有关 MySQL 支持哪些加密密码的信息,请参见 第 8.3.2 节,“加密连接 TLS 协议和密码”

    此变量可以在运行时修改,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为新建立的连接使用的 TLS 上下文。请参见 加密连接的服务器端运行时配置和监控

  • ssl_crl

    命令行格式 --ssl-crl=file_name
    系统变量 ssl_crl
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    包含以 PEM 格式的证书吊销列表的文件的路径名。

    此变量可以在运行时修改,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为新建立的连接使用的 TLS 上下文。请参见 加密连接的服务器端运行时配置和监控

  • ssl_crlpath

    命令行格式 --ssl-crlpath=dir_name
    系统变量 ssl_crlpath
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 NULL

    包含以 PEM 格式的证书吊销列表文件的目录的路径。

    此变量可以在运行时修改,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为新建立的连接使用的 TLS 上下文。请参见 加密连接的服务器端运行时配置和监控

  • ssl_fips_mode

    命令行格式 --ssl-fips-mode={OFF|ON|STRICT}
    已弃用
    系统变量 ssl_fips_mode
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF (或 0)

    ON (或 1)

    STRICT (或 2)

    控制是否在服务器端启用 FIPS 模式。 ssl_fips_mode 系统变量不同于其他 ssl_xxx 系统变量,因为它不用于控制服务器是否允许加密连接,而是影响允许哪些加密操作。请参见 第 8.8 节,“FIPS 支持”

    允许以下 ssl_fips_mode

    • OFF (或 0): 禁用 FIPS 模式。

    • ON (或 1): 启用 FIPS 模式。

    • STRICT (或 2): 启用 严格 FIPS 模式。

    注意

    如果 OpenSSL FIPS 对象模块不可用,则 ssl_fips_mode 的唯一允许值为 OFF。在这种情况下,在启动时将 ssl_fips_mode 设置为 ONSTRICT 会导致服务器生成错误消息并退出。

    此选项已弃用并设置为只读。预计将在未来版本的 MySQL 中删除它。

  • ssl_key

    命令行格式 --ssl-key=file_name
    系统变量 ssl_key
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    服务器 SSL 私钥文件的路径名,以 PEM 格式。为了获得更好的安全性,请使用 RSA 密钥大小至少为 2048 位的证书。

    如果密钥文件受密码保护,则服务器会提示用户输入密码。密码必须以交互方式提供;它不能存储在文件中。如果密码不正确,程序将继续执行,就好像无法读取密钥一样。

    此变量可以在运行时修改,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为新建立的连接使用的 TLS 上下文。请参见 加密连接的服务器端运行时配置和监控

  • ssl_session_cache_mode

    命令行格式 --ssl_session_cache_mode={ON|OFF}
    系统变量 ssl_session_cache_mode
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON
    有效值

    ON

    OFF

    控制是否在服务器端启用内存中的会话缓存和服务器生成的会话票证。默认模式为 ON(启用会话缓存模式)。更改 ssl_session_cache_mode 系统变量只会影响在执行 ALTER INSTANCE RELOAD TLS 语句后或在重新启动后(如果变量值已持久化)产生的效果。

    允许以下 ssl_session_cache_mode

    • ON: 启用会话缓存模式。

    • OFF: 禁用会话缓存模式。

    如果此系统变量的值为 OFF,则服务器不会宣传其对会话恢复的支持。在 OpenSSL 1.0.x 上运行时,会话票证始终会生成,但当 ssl_session_cache_mode 启用时,这些票证不可用。

    可以使用 Ssl_session_cache_mode 状态变量观察 ssl_session_cache_mode 的当前生效值。

  • ssl_session_cache_timeout

    命令行格式 --ssl_session_cache_timeout
    系统变量 ssl_session_cache_timeout
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 300
    最小值 0
    最大值 84600
    单位

    设置在建立与服务器的新加密连接时允许使用先前会话的时间段,前提是 ssl_session_cache_mode 系统变量已启用并且先前会话数据可用。如果会话超时过期,则会话将无法再次使用。

    默认值为 300 秒,最大值为 84600(或以秒为单位的一天)。对 ssl_session_cache_timeout 系统变量的更改仅在执行 ALTER INSTANCE RELOAD TLS 语句后或在持久化变量值后重新启动后才生效。可以使用 Ssl_session_cache_timeout 状态变量观察 ssl_session_cache_timeout 的当前有效值。

  • statement_id

    系统变量 statement_id
    范围 会话
    动态
    SET_VAR 提示适用
    类型 整数

    在当前会话中执行的每个语句都会被分配一个序列号。这可以与 session_track_system_variables 系统变量一起使用,以在 Performance Schema 表(如 events_statements_history 表)中标识该语句。

  • stored_program_cache

    命令行格式 --stored-program-cache=#
    系统变量 stored_program_cache
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 16
    最大值 524288

    为每个连接设置存储的例程缓存数量的软上限。此变量的值以 MySQL Server 为存储过程和存储函数分别维护的两个缓存中存储的例程数量来指定。

    每当执行存储例程时,都会在解析例程中的第一个或顶层语句之前检查此缓存大小;如果相同类型(根据执行的存储过程或存储函数)的例程数量超过此变量指定的限制,则相应的缓存将被刷新,以前分配给缓存对象的内存将被释放。这允许安全地刷新缓存,即使存储例程之间存在依赖关系。

    存储过程和存储函数缓存与 数据字典对象缓存 的存储程序定义缓存分区并行存在。存储过程和存储函数缓存是每个连接的,而存储程序定义缓存是共享的。存储过程和存储函数缓存中是否存在对象与存储程序定义缓存中是否存在对象无关,反之亦然。有关更多信息,请参阅 第 16.4 节“数据字典对象缓存”

  • stored_program_definition_cache

    命令行格式 --stored-program-definition-cache=#
    系统变量 stored_program_definition_cache
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义数据字典对象缓存中可以保留的存储程序定义对象(已使用和未使用)的数量限制。

    只有在使用中的存储程序定义对象数量小于 stored_program_definition_cache 定义的容量时,未使用的存储程序定义对象才会保留在数据字典对象缓存中。

    设置为 0 意味着存储程序定义对象仅在使用时保留在数据字典对象缓存中。

    存储程序定义缓存分区与使用 stored_program_cache 选项配置的存储过程和存储函数缓存并行存在。

    stored_program_cache 选项为每个连接设置缓存的存储过程或函数数量的软上限,并且每次连接执行存储过程或函数时都会检查此限制。另一方面,存储程序定义缓存分区是一个共享缓存,用于存储存储程序定义对象以供其他目的使用。存储程序定义缓存分区中是否存在对象与存储过程缓存或存储函数缓存中是否存在对象无关,反之亦然。

    有关相关信息,请参阅 第 16.4 节“数据字典对象缓存”

  • super_read_only

    命令行格式 --super-read-only[={OFF|ON}]
    系统变量 super_read_only
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果 read_only 系统变量已启用,则服务器不允许客户端更新,除非来自具有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)的用户。如果 super_read_only 系统变量也已启用,则服务器会禁止客户端更新,即使来自具有 CONNECTION_ADMINSUPER 的用户。有关只读模式的描述以及 read_onlysuper_read_only 如何交互的信息,请参阅 read_only 系统变量的描述。

    启用 super_read_only 时阻止的客户端更新包括并非一定看起来是更新的操作,例如 CREATE FUNCTION(安装可加载函数)、INSTALL PLUGININSTALL COMPONENT。这些操作被禁止,因为它们涉及对 mysql 系统模式中的表的更改。

    同样,如果事件调度程序已启用,启用 super_read_only 系统变量会阻止它更新事件 上次执行 时间戳 events 数据字典表中的时间戳。这会导致事件调度程序在下一次尝试执行计划事件(在写入服务器错误日志后)时停止。(在这种情况下,event_scheduler 系统变量不会从 ON 更改为 OFF。这意味着此变量拒绝 DBA 意图 使事件调度程序启用或禁用,而其实际启动或停止状态可能不同)。如果在启用 super_read_only 后随后禁用它,则服务器会根据需要自动重新启动事件调度程序。

    对复制源服务器上的 super_read_only 的更改不会复制到副本服务器。该值可以在副本上设置,独立于源上的设置。

  • syseventlog.facility

    命令行格式 --syseventlog.facility=value
    系统变量 syseventlog.facility
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 daemon

    写入 syslog 的错误日志输出的设施(发送消息的程序类型)。除非安装了 log_sink_syseventlog 错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误日志记录到系统日志”

    允许的值可能因操作系统而异;请查阅您的系统 syslog 文档。

    此变量在 Windows 上不存在。

  • syseventlog.include_pid

    命令行格式 --syseventlog.include-pid[={OFF|ON}]
    系统变量 syseventlog.include_pid
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    是否在写入 syslog 的错误日志输出的每一行中包含服务器进程 ID。除非安装了 log_sink_syseventlog 错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误日志记录到系统日志”

    此变量在 Windows 上不存在。

  • syseventlog.tag

    命令行格式 --syseventlog.tag=tag
    系统变量 syseventlog.tag
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 空字符串

    要添加到写入 syslog 或 Windows 事件日志的错误日志输出中的服务器标识符的标签。除非安装了 log_sink_syseventlog 错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误日志记录到系统日志”

    默认情况下,未设置标签,因此服务器标识符在 Windows 上仅为 MySQL,而在其他平台上为 mysqld。如果指定了标签值为 tag,则将其附加到服务器标识符,并在前面加上连字符,从而导致 syslog 标识符为 mysqld-tag(或 Windows 上的 MySQL-tag)。

    在 Windows 上,要使用尚不存在的标签,服务器必须从具有管理员权限的帐户运行,以允许创建标签的注册表项。如果标签已存在,则不需要提升的权限。

  • system_time_zone

    系统变量 system_time_zone
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    服务器系统时区。当服务器开始执行时,它会从机器默认值继承时区设置,这些设置可能由用于运行服务器的帐户的环境或启动脚本修改。该值用于设置 system_time_zone。要显式指定系统时区,请设置 TZ 环境变量或使用 --timezone 选项 mysqld_safe 脚本。

    除了启动时初始化外,如果服务器主机时区发生变化(例如,由于夏令时),system_time_zone 会反映该变化,这对应用程序有以下影响

    • 引用 system_time_zone 的查询将在夏令时变化之前获得一个值,在变化之后获得另一个值。

    • 对于在夏令时变化之前开始执行并在变化之后结束的查询,system_time_zone 在查询中保持不变,因为该值通常在执行开始时被缓存。

    system_time_zone 变量不同于 time_zone 变量。虽然它们的值可能相同,但后者变量用于初始化连接的每个客户端的时区。请参阅 第 7.1.15 节“MySQL 服务器时区支持”

  • table_definition_cache

    命令行格式 --table-definition-cache=#
    系统变量 table_definition_cache
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 -1(表示自动调整;请勿分配此字面值)
    最小值 400
    最大值 524288

    可以存储在表定义缓存中的表定义数量。如果您使用大量表,可以创建一个大型表定义缓存来加快打开表的速度。表定义缓存占用更少的空间,并且不像普通表缓存那样使用文件描述符。最小值为 400。默认值基于以下公式,上限为 2000

    MIN(400 + table_open_cache / 2, 2000)

    对于 InnoDBtable_definition_cache 设置充当数据字典对象缓存中表实例数量和可以一次打开的每表文件表空间数量的软限制。

    如果字典对象缓存中的表实例数量超过 table_definition_cache 限制,则 LRU 机制开始标记表实例以供驱逐,并最终将其从字典对象缓存中删除。由于具有外键关系的表实例不会被放入 LRU 列表,因此具有缓存元数据的打开表的数量可能会高于 table_definition_cache 限制。

    一次可以打开的文件每表表空间的数量受 table_definition_cacheinnodb_open_files 设置的双重限制。如果两个变量都设置了,则使用最高设置。如果两个变量都没有设置,则使用 table_definition_cache 设置,它具有更高的默认值。如果打开的表空间数量超过了 table_definition_cacheinnodb_open_files 定义的限制,则 LRU 机制会在 LRU 列表中搜索已完全刷新且当前未扩展的表空间文件。每次打开新的表空间时都会执行此过程。仅关闭非活动表空间。

    表定义缓存与 字典对象缓存 的表定义缓存分区并行存在。两个缓存都存储表定义,但服务于 MySQL 服务器的不同部分。一个缓存中的对象不依赖于另一个缓存中对象的存在。有关更多信息,请参见 第 16.4 节,“字典对象缓存”

  • table_encryption_privilege_check

    命令行格式 --table-encryption-privilege-check[={OFF|ON}]
    系统变量 table_encryption_privilege_check
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    控制 TABLE_ENCRYPTION_ADMIN 特权检查,该检查在创建或更改具有与 default_table_encryption 设置不同的加密的模式或一般表空间时发生,或者在创建或更改具有与默认模式加密不同的加密设置的表时发生。默认情况下,此检查已禁用。

    在运行时设置 table_encryption_privilege_check 需要 SUPER 特权。

    table_encryption_privilege_check 支持 SET PERSISTSET PERSIST_ONLY 语法。请参见 第 7.1.9.3 节,“持久化系统变量”

    有关更多信息,请参阅为模式和通用表空间定义加密默认值

  • table_open_cache

    命令行格式 --table-open-cache=#
    系统变量 table_open_cache
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4000
    最小值 1
    最大值 524288

    所有线程的打开表数。增加此值会增加 mysqld 需要的文件描述符数量。此变量的有效值为 open_files_limit - 10 - max_connections / 2 和 400 中的较大值,即

    MAX(
        (open_files_limit - 10 - max_connections) / 2,
        400
       )

    您可以通过检查 Opened_tables 状态变量来检查是否需要增加表缓存。如果 Opened_tables 的值很大,并且您不经常使用 FLUSH TABLES(这只会强制所有表关闭并重新打开),那么您应该增加 table_open_cache 变量的值。有关表缓存的更多信息,请参见 第 10.4.3.1 节,“MySQL 如何打开和关闭表”

  • table_open_cache_instances

    命令行格式 --table-open-cache-instances=#
    系统变量 table_open_cache_instances
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16
    最小值 1
    最大值 64

    打开表缓存实例的数量。为了通过减少会话之间的争用以提高可扩展性,可以将打开的表缓存划分为几个大小为 table_open_cache / table_open_cache_instances 的较小缓存实例。会话只需要锁定一个实例即可访问它以进行 DML 语句。这会将缓存访问分割到各个实例中,从而允许在许多会话访问表时,针对使用缓存的操作提高性能。(DDL 语句仍然需要锁定整个缓存,但此类语句的频率远低于 DML 语句。)

    建议在经常使用 16 个或更多内核的系统上将此值设置为 8 或 16。但是,如果您在表中有很多大型触发器,导致内存负荷过重,则 table_open_cache_instances 的默认设置可能会导致过度的内存使用。在这种情况下,将 table_open_cache_instances 设置为 1 可能有助于限制内存使用。

  • tablespace_definition_cache

    命令行格式 --tablespace-definition-cache=#
    系统变量 tablespace_definition_cache
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义字典对象缓存中可以保留的表空间定义对象(已使用和未使用的)数量的限制。

    仅当正在使用的表空间定义对象数量小于 tablespace_definition_cache 定义的容量时,才会将未使用的表空间定义对象保留在字典对象缓存中。

    设置 0 表示表空间定义对象仅在使用时保留在字典对象缓存中。

    有关更多信息,请参见 第 16.4 节,“字典对象缓存”

  • temptable_max_mmap

    命令行格式 --temptable-max-mmap=#
    系统变量 temptable_max_mmap
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 2^64-1
    单位 字节

    定义 TempTable 存储引擎在开始将数据存储到磁盘上的 InnoDB 内部临时表之前,允许从内存映射的临时文件分配的最大内存量(以字节为单位)。设置 0(默认)会禁用从内存映射的临时文件分配内存。有关更多信息,请参见 第 10.4.4 节,“MySQL 中的内部临时表使用”

    在 MySQL 8.4 之前,此选项设置为 1 GiB 而不是 0。

  • temptable_max_ram

    命令行格式 --temptable-max-ram=#
    系统变量 temptable_max_ram
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 总内存的 3%:最小 1 GB,最大 4 GB
    最小值 2097152
    最大值 2^64-1
    单位 字节

    定义 TempTable 存储引擎在开始将数据存储到磁盘上之前,可以占用的最大内存量。默认值为服务器上可用总内存的 3%,默认范围最小为 1 GiB,最大为 4 GiB。有关更多信息,请参见 第 10.4.4 节,“MySQL 中的内部临时表使用”

    在 MySQL 8.4 之前,默认值始终为 1 GiB。

  • temptable_use_mmap

    命令行格式 --temptable-use-mmap[={OFF|ON}]
    已弃用
    系统变量 temptable_use_mmap
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    定义当 TempTable 存储引擎占用的内存量超过 temptable_max_ram 变量定义的限制时,TempTable 存储引擎是否将内部内存中临时表的空间分配为内存映射的临时文件。当 temptable_use_mmap 禁用(默认)时,TempTable 存储引擎会改为使用磁盘上的 InnoDB 内部临时表。有关更多信息,请参见 第 10.4.4 节,“MySQL 中的内部临时表使用”

  • thread_cache_size

    命令行格式 --thread-cache-size=#
    系统变量 thread_cache_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 -1(表示自动调整;请勿分配此字面值)
    最小值 0
    最大值 16384

    服务器应缓存以供重用的线程数量。当客户端断开连接时,如果缓存中少于 thread_cache_size 个线程,则客户端的线程将被放入缓存。如果可能,将从缓存中重用线程来满足对线程的请求,只有在缓存为空时才会创建新线程。如果您有大量新的连接,则可以增加此变量以提高性能。通常,如果您有良好的线程实现,这不会带来明显的性能提升。但是,如果您的服务器每秒看到数百个连接,您通常应该将 thread_cache_size 设置得足够高,以使大多数新连接使用缓存线程。通过检查 ConnectionsThreads_created 状态变量之间的差异,您可以了解线程缓存的效率。有关详细信息,请参见 第 7.1.10 节,“服务器状态变量”

    默认值基于以下公式,上限为 100

    8 + (max_connections / 100)
  • thread_handling

    命令行格式 --thread-handling=name
    系统变量 thread_handling
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 one-thread-per-connection
    有效值

    no-threads

    one-thread-per-connection

    loaded-dynamically

    服务器用于连接线程的线程处理模型。允许的值为 no-threads(服务器使用单个线程来处理一个连接),one-thread-per-connection(服务器使用一个线程来处理每个客户端连接)和 loaded-dynamically(由线程池插件在初始化时设置)。no-threads 在 Linux 下调试时很有用;请参见 第 7.9 节,“调试 MySQL”

  • thread_pool_algorithm

    命令行格式 --thread-pool-algorithm=#
    系统变量 thread_pool_algorithm
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1

    此变量控制线程池插件使用的算法

    • 0:使用保守的低并发算法。

    • 1:使用积极的高并发算法,该算法在最佳线程数下表现更好,但如果连接数达到极高值,性能可能会下降。

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_dedicated_listeners

    命令行格式 --thread-pool-dedicated-listeners
    系统变量 thread_pool_dedicated_listeners
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    在每个线程组中为监听器线程分配一个监听器线程,以监听分配给该组的连接的传入语句。

    • OFF:(默认)禁用专用监听器线程。

    • ON:在每个线程组中为监听器线程分配一个监听器线程,以监听分配给该组的连接的传入语句。专用监听器线程不执行查询。

    启用 thread_pool_dedicated_listeners 仅在 thread_pool_max_transactions_limit 定义事务限制时才有用。否则,不应启用 thread_pool_dedicated_listeners

    HeatWave 服务使用此变量,该变量仅适用于 MySQL Enterprise Edition,在 MySQL 8.4 中不受支持。

  • thread_pool_high_priority_connection

    命令行格式 --thread-pool-high-priority-connection=#
    系统变量 thread_pool_high_priority_connection
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1

    此变量影响在执行之前对新语句的排队。如果值为 0(false,默认值),则语句排队使用低优先级和高优先级队列。如果值为 1(true),则排队的语句始终进入高优先级队列。

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_longrun_trx_limit

    命令行格式 --thread-pool-longrun-trx-limit=#
    系统变量 thread_pool_longrun_trx_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2000
    最小值 10
    最大值 60*60*24
    单位 ms

    thread_pool_max_transactions_limit 正在使用时,每个线程组中可以存在最大数量的活动事务。如果所有可用的事务都被长时间运行的事务使用,则分配给该组的任何附加事务都会阻塞,直到其中一个长时间运行的事务完成,用户可能会将其视为莫名其妙的挂起。

    为了缓解此问题,如果使用所有线程的最大事务数的线程一直在执行超过 thread_pool_longrun_trx_limit 指定的间隔(以毫秒为单位)的时间,则给定线程组的限制将被暂停。当长时间运行的事务数量减少时,可以(并且确实)再次启用 thread_pool_max_transactions_limit。为了发生这种情况,正在进行的事务数量必须小于 thread_pool_max_transactions_limit / 2,持续时间如所示。

    MIN( MAX(thread_pool_longrun_trx_limit * 15, 5000), 30000)

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_max_active_query_threads

    命令行格式 --thread-pool-max-active-query-threads
    系统变量 thread_pool_max_active_query_threads
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 512

    每个组允许的最大活动(正在运行)查询线程数。如果值为 0,则线程池插件会使用尽可能多的线程。

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_max_transactions_limit

    命令行格式 --thread-pool-max-transactions-limit
    系统变量 thread_pool_max_transactions_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1000000

    线程池插件允许的最大事务数。定义事务限制会将线程绑定到事务,直到它提交,这有助于在高并发期间稳定吞吐量。

    默认值为 0,表示没有事务限制。该变量是动态的,但不能在运行时从 0 更改为更高值,反之亦然。启动时的非零值允许在运行时进行动态配置。需要 CONNECTION_ADMIN 权限才能在运行时配置 thread_pool_max_transactions_limit

    定义事务限制时,启用 thread_pool_dedicated_listeners 会在每个线程组中创建一个专用监听器线程。额外的专用监听器线程会消耗更多资源并影响线程池性能。因此,应谨慎使用 thread_pool_dedicated_listeners

    达到 thread_pool_max_transactions_limit 定义的限制时,新连接或现有连接上的事务似乎会挂起,直到一个或多个现有事务完成。在许多情况下,可以通过设置 thread_pool_longrun_trx_limit 来缓解此问题,以便当正在进行的事务数量与给定时间段内的最大事务数量匹配时,可以放宽最大事务数量。如果现有连接在尝试此操作后仍然被阻塞或长时间运行,则可能需要特权连接才能访问服务器以增加限制,删除限制或杀死正在运行的事务。见 特权连接.

    HeatWave 服务使用此变量,该变量仅适用于 MySQL Enterprise Edition,在 MySQL 8.4 中不受支持。

  • thread_pool_max_unused_threads

    命令行格式 --thread-pool-max-unused-threads=#
    系统变量 thread_pool_max_unused_threads
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4096

    线程池中允许的最大空闲线程数。此变量可以限制睡眠线程使用的内存量。

    值为 0(默认值)表示对睡眠线程数量没有限制。值为 N,其中 N 大于 0,表示 1 个使用者线程和 N−1 个保留线程。在这种情况下,如果线程准备睡眠但睡眠线程的数量已经达到最大值,则线程退出而不是进入睡眠状态。

    睡眠线程要么作为使用者线程睡眠,要么作为保留线程睡眠。线程池允许一个线程在睡眠时成为使用者线程。如果线程进入睡眠状态,并且没有现有的使用者线程,则它作为使用者线程睡眠。当必须唤醒线程时,如果存在使用者线程,则选择使用者线程。仅当没有使用者线程可唤醒时才选择保留线程。

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_prio_kickup_timer

    命令行格式 --thread-pool-prio-kickup-timer=#
    系统变量 thread_pool_prio_kickup_timer
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1000
    最小值 0
    最大值 4294967294
    单位 毫秒

    此变量影响在低优先级队列中等待执行的语句。该值是在等待的语句被移动到高优先级队列之前的时间(以毫秒为单位)。默认值为 1000(1 秒)。

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_query_threads_per_group

    命令行格式 --thread-pool-query-threads-per-group
    系统变量 thread_pool_query_threads_per_group
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 4096

    线程组中允许的最大查询线程数。最大值为 4096,但如果设置了 thread_pool_max_transactions_limit,则 thread_pool_query_threads_per_group 必须不超过该值。

    默认值为 1,表示每个线程组中有一个活动的查询线程,这对于许多负载来说效果很好。当您使用高并发线程池算法(thread_pool_algorithm = 1)时,如果由于长时间运行的事务而遇到响应时间变慢,请考虑增加该值。

    需要 CONNECTION_ADMIN 权限才能在运行时配置 thread_pool_query_threads_per_group

    如果在运行时减小 thread_pool_query_threads_per_group 的值,则当前正在运行用户查询的线程将被允许完成,然后被移动到保留池或终止。如果在运行时增加该值,并且线程组需要更多线程,则这些线程将尽可能从保留池中获取,否则将创建这些线程。

    HeatWave 服务使用此变量,该变量仅适用于 MySQL Enterprise Edition,在 MySQL 8.4 中不受支持。

  • thread_pool_size

    命令行格式 --thread-pool-size=#
    系统变量 thread_pool_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16
    最小值 1
    最大值 512

    线程池中的线程组数量。这是控制线程池性能的最重要参数。它会影响可以同时执行的语句数量。如果指定的值超出允许值的范围,则线程池插件不会加载,并且服务器会向错误日志写入一条消息。

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_stall_limit

    命令行格式 --thread-pool-stall-limit=#
    系统变量 thread_pool_stall_limit
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 6
    最小值 4
    最大值 600
    单位 milliseconds * 10

    此变量影响执行的语句。该值是语句在开始执行后必须完成的时间量,然后它被定义为停滞,此时线程池允许线程组开始执行另一个语句。该值以 10 毫秒为单位测量,因此默认值 6 表示 60 毫秒。较短的等待值允许线程更快地启动。较短的值也更适合避免死锁情况。较长的等待值对于包含长时间运行语句的工作负载很有用,以避免在当前语句执行时启动太多新语句。

    此变量仅在启用线程池插件时可用。请参见 第 7.6.3 节,“MySQL Enterprise 线程池”

  • thread_pool_transaction_delay

    命令行格式 --thread-pool-transaction-delay
    系统变量 thread_pool_transaction_delay
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 300000

    执行新事务之前的延迟时间段(以毫秒为单位)。最大值为 300000(5 分钟)。

    在并行事务由于资源争用影响其他操作的性能的情况下,可以使用事务延迟。例如,如果并行事务影响索引创建或在线缓冲池调整大小操作,则可以配置事务延迟以在这些操作运行时减少资源争用。

    工作线程在执行新事务之前会休眠 thread_pool_transaction_delay 指定的毫秒数。

    thread_pool_transaction_delay 设置不会影响从特权连接(分配给 Admin 线程组的连接)发出的查询。这些查询不受配置的事务延迟影响。

  • thread_stack

    命令行格式 --thread-stack=#
    系统变量 thread_stack
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1048576
    最小值 131072
    最大值(64 位平台) 18446744073709550592
    最大值(32 位平台) 4294966272
    单位 字节
    块大小 1024

    每个线程的堆栈大小。默认值对于正常操作来说足够大。如果线程堆栈大小太小,它会限制服务器可以处理的 SQL 语句的复杂性,存储过程的递归深度以及其他内存密集型操作。

  • time_zone

    系统变量 time_zone
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 SYSTEM
    最小值 -13:59
    最大值 +14:00

    当前时区。此变量用于初始化连接的每个客户端的时区。默认情况下,此变量的初始值为 'SYSTEM'(这意味着 使用 system_time_zone 的值)。可以在服务器启动时使用 --default-time-zone 选项明确指定该值。见 第 7.1.15 节,“MySQL 服务器时区支持”.

    注意

    如果设置为 SYSTEM,则每个需要时区计算的 MySQL 函数调用都会进行系统库调用以确定当前系统时区。此调用可能受全局互斥锁保护,从而导致争用。

  • timestamp

    系统变量 timestamp
    范围 会话
    动态
    SET_VAR 提示适用
    类型 数字
    默认值 UNIX_TIMESTAMP()
    最小值 1
    最大值 2147483647

    设置此客户端的时间。如果使用二进制日志还原行,则此用于获取原始时间戳。 timestamp_value 应为 Unix 纪元时间戳(类似于 UNIX_TIMESTAMP() 返回的值,而不是 'YYYY-MM-DD hh:mm:ss' 格式的值)或 DEFAULT

    timestamp 设置为常数值会导致它保留该值,直到它再次更改。将 timestamp 设置为 DEFAULT 会导致它的值为它被访问时的当前日期和时间。

    timestampDOUBLE 而不是 BIGINT,因为它的值包括微秒部分。最大值对应于 '2038-01-19 03:14:07' UTC,与 TIMESTAMP 数据类型相同。

    SET timestamp 会影响 NOW() 函数的返回值,但不会影响 SYSDATE() 函数。这意味着二进制日志中的时间戳设置不会影响对 SYSDATE() 函数的调用。服务器可以使用 --sysdate-is-now 选项启动,使 SYSDATE() 函数成为 NOW() 函数的同义词,在这种情况下,SET timestamp 会影响这两个函数。

  • tls_certificates_enforced_validation

    命令行格式 --tls-certificates-enforced-validation[={OFF|ON}]
    系统变量 tls_certificates_enforced_validation
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    在启动期间,如果在命令行中未指定文件位置,服务器会确保每个必需的 SSL 证书文件的位置都存在于默认数据目录中。但是,服务器不会验证证书文件,因此它能够使用无效证书启动。 tls_certificates_enforced_validation 系统变量控制在启动时是否强制执行证书验证。当启用验证强制执行时,发现无效证书会导致启动执行停止。默认情况下,证书验证强制执行处于禁用状态 (OFF)。

    可以通过在命令行上指定 --tls-certificates-enforced-validation 选项(带或不带 ON 值)来启用验证强制执行。启用验证强制执行后,也会在通过 ALTER INSTANCE RELOAD TLS 语句重新加载证书时验证证书。此系统变量无法在重启之间持久化。有关更多信息,请参阅 配置证书验证强制执行

  • tls_ciphersuites

    命令行格式 --tls-ciphersuites=ciphersuite_list
    系统变量 tls_ciphersuites
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL

    服务器允许用于使用 TLSv1.3 的加密连接的密码套件。该值为一个或多个冒号分隔的密码套件名称列表,这些名称来自此处列出的名称。

    • TLS_AES_128_GCM_SHA256

    • TLS_AES_256_GCM_SHA384

    • TLS_CHACHA20_POLY1305_SHA256

    • TLS_AES_128_CCM_SHA256

    尝试在设置此变量时在密码列表中包含此处未显示的任何值会导致错误 (ER_BLOCKED_CIPHER).

    可以为此变量命名的密码套件取决于用于编译 MySQL 的 SSL 库。如果未设置此变量,其默认值为 NULL,这意味着服务器允许使用默认的密码套件集。如果将变量设置为空字符串,则不会启用任何密码套件,并且无法建立加密连接。有关更多信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和密码”

  • tls_version

    命令行格式 --tls-version=protocol_list
    系统变量 tls_version
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 TLSv1.2,TLSv1.3

    服务器允许用于加密连接的协议。该值是一个或多个逗号分隔的协议名称列表,这些名称不区分大小写。可以为此变量命名的协议取决于用于编译 MySQL 的 SSL 库。应选择允许的协议,以避免在列表中留下 漏洞。有关详细信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和密码”

    可以在运行时修改此变量以影响服务器用于新连接的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

    重要
    • MySQL 8.4 不支持 TLSv1 和 TLSv1.1 连接协议。有关更多信息,请参阅 对 TLSv1 和 TLSv1.1 协议的支持已移除

    • 如果 MySQL Server 使用 OpenSSL 1.1.1 或更高版本编译,则 MySQL 8.4 中提供了对 TLSv1.3 协议的支持。服务器会在启动时检查 OpenSSL 的版本,如果低于 1.1.1,则会从系统变量的默认值中移除 TLSv1.3。在这种情况下,默认值为 TLSv1.2

    将此变量设置为空字符串将禁用加密连接。

  • tmp_table_size

    命令行格式 --tmp-table-size=#
    系统变量 tmp_table_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16777216
    最小值 1024
    最大值 18446744073709551615
    单位 字节

    定义由 MEMORYTempTable 存储引擎创建的内部内存中临时表的最大大小。如果内部内存中临时表超过此大小,它将自动转换为磁盘上的内部临时表。

    tmp_table_size 变量不适用于用户创建的 MEMORY 表。不支持用户创建的 TempTable 表。

    当使用 MEMORY 存储引擎用于内部内存中临时表时,实际的大小限制是 tmp_table_sizemax_heap_table_size 中较小的那个。 max_heap_table_size 设置不适用于 TempTable 表。

    如果您执行了大量高级 GROUP BY 查询并且内存很多,请增加 tmp_table_size(以及 max_heap_table_size,如果在使用 MEMORY 存储引擎用于内部内存中临时表时需要)。

    您可以通过比较 Created_tmp_disk_tablesCreated_tmp_tables 值来比较创建的内部磁盘上临时表数量与创建的内部临时表总数。

    另请参阅 第 10.4.4 节,“MySQL 中的内部临时表使用”

  • tmpdir

    命令行格式 --tmpdir=dir_name
    系统变量 tmpdir
    范围 全局
    动态
    SET_VAR 提示适用
    类型 目录名

    用于创建临时文件的目录的路径。如果您的默认 /tmp 目录驻留在一个太小而无法容纳临时表的分区上,这可能很有用。此变量可以设置为多个路径的列表,这些路径以循环方式使用。在 Unix 上,路径应以冒号 (:) 分隔,而在 Windows 上则应以分号 (;) 分隔。

    tmpdir 可以是一个非永久性位置,例如基于内存的文件系统上的目录,或者在服务器主机重新启动时会被清除的目录。如果 MySQL 服务器充当副本,并且您为 tmpdir 使用了非永久性位置,请考虑使用 replica_load_tmpdir 变量为副本设置一个不同的临时目录。对于副本,用于复制 LOAD DATA 语句的临时文件将存储在此目录中,因此,使用永久性位置,它们可以在机器重新启动后存活,尽管如果临时文件已被移除,复制现在可以在重新启动后继续进行。

    有关临时文件存储位置的更多信息,请参阅 第 B.3.3.5 节,“MySQL 在哪里存储临时文件”

  • transaction_alloc_block_size

    命令行格式 --transaction-alloc-block-size=#
    系统变量 transaction_alloc_block_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8192
    最小值 1024
    最大值 131072
    单位 字节
    块大小 1024

    需要内存的每个事务内存池的增加量(以字节为单位)。请参阅 transaction_prealloc_size 的说明。

  • transaction_isolation

    命令行格式 --transaction-isolation=name
    系统变量 transaction_isolation
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 REPEATABLE-READ
    有效值

    READ-UNCOMMITTED

    READ-COMMITTED

    REPEATABLE-READ

    SERIALIZABLE

    事务隔离级别。默认值为 REPEATABLE-READ

    事务隔离级别具有三个范围:全局、会话和下一个事务。这三个范围的实现导致一些非标准的隔离级别分配语义,如后文所述。

    要在启动时设置全局事务隔离级别,请使用 --transaction-isolation 服务器选项。

    在运行时,可以使用 SET 语句直接设置隔离级别,以将值分配给 transaction_isolation 系统变量,或者使用 SET TRANSACTION 语句间接设置。如果直接将 transaction_isolation 设置为包含空格的隔离级别名称,则名称应包含在引号中,将空格替换为连字符。例如,使用以下 SET 语句来设置全局值

    SET GLOBAL transaction_isolation = 'READ-COMMITTED';

    设置全局 transaction_isolation 值将为所有后续会话设置隔离级别。现有会话不受影响。

    要设置会话或下一个级别的 transaction_isolation 值,请使用 SET 语句。对于大多数会话系统变量,以下语句是设置值的等效方式

    SET @@SESSION.var_name = value;
    SET SESSION var_name = value;
    SET var_name = value;
    SET @@var_name = value;

    如前所述,事务隔离级别除了全局和会话范围之外,还具有下一个事务范围。要使下一个事务范围可以设置,SET 语法用于分配会话系统变量值的非标准语义 transaction_isolation

    • 要设置会话隔离级别,请使用以下任何语法

      SET @@SESSION.transaction_isolation = value;
      SET SESSION transaction_isolation = value;
      SET transaction_isolation = value;

      对于每个语法,以下语义适用

      • 为会话中执行的所有后续事务设置隔离级别。

      • 允许在事务中执行,但不影响当前正在进行的事务。

      • 如果在事务之间执行,则会覆盖任何先前设置下一个事务隔离级别的语句。

      • 对应于 SET SESSION TRANSACTION ISOLATION LEVEL(带 SESSION 关键字)。

    • 要设置下一个事务隔离级别,请使用以下语法

      SET @@transaction_isolation = value;

      对于该语法,以下语义适用

      • 仅为会话中执行的下一个单个事务设置隔离级别。

      • 后续事务将恢复到会话隔离级别。

      • 不允许在事务中执行。

      • 对应于 SET TRANSACTION ISOLATION LEVEL(不带 SESSION 关键字)。

    有关 SET TRANSACTION 及其与 transaction_isolation 系统变量的关系的更多信息,请参阅 第 15.3.7 节,“SET TRANSACTION 语句”

  • transaction_prealloc_size

    命令行格式 --transaction-prealloc-size=#
    已弃用
    系统变量 transaction_prealloc_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4096
    最小值 1024
    最大值 131072
    单位 字节
    块大小 1024

    每个事务都有一个内存池,用于分配各种与事务相关的内存。该池的初始大小(以字节为单位)由transaction_prealloc_size确定。对于任何无法从池中分配内存的分配(因为池中的可用内存不足),池的大小将增加transaction_alloc_block_size字节。当事务结束时,该池将被截断为transaction_prealloc_size字节。通过将transaction_prealloc_size设置得足够大以容纳单个事务中的所有语句,可以避免许多malloc()调用。

    transaction_prealloc_size已弃用,设置此变量不再有任何影响。预计transaction_prealloc_size将在未来的 MySQL 版本中被移除。

  • transaction_read_only

    命令行格式 --transaction-read-only[={OFF|ON}]
    系统变量 transaction_read_only
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    事务访问模式。该值可以是OFF(读写,默认值)或ON(只读)。

    事务访问模式具有三个范围:全局、会话和下一个事务。这三个范围的实现导致了一些非标准的访问模式分配语义,如后所述。

    要在启动时设置全局事务访问模式,请使用--transaction-read-only服务器选项。

    在运行时,可以使用SET语句直接将值分配给transaction_read_only系统变量,或使用SET TRANSACTION语句间接设置。例如,使用以下SET语句来设置全局值

    SET GLOBAL transaction_read_only = ON;

    设置全局transaction_read_only值将为所有后续会话设置访问模式。现有会话不受影响。

    要设置会话或下一个级别的transaction_read_only值,请使用SET语句。对于大多数会话系统变量,这些语句是设置值的等效方式

    SET @@SESSION.var_name = value;
    SET SESSION var_name = value;
    SET var_name = value;
    SET @@var_name = value;

    如前所述,事务访问模式除了全局和会话范围外,还具有下一个事务范围。为了使下一个事务范围能够设置,SET语法用于分配会话系统变量值,对transaction_read_only具有非标准的语义,

    • 要设置会话访问模式,请使用以下任何语法

      SET @@SESSION.transaction_read_only = value;
      SET SESSION transaction_read_only = value;
      SET transaction_read_only = value;

      对于每个语法,以下语义适用

      • 为会话中执行的所有后续事务设置访问模式。

      • 允许在事务中执行,但不影响当前正在进行的事务。

      • 如果在事务之间执行,将覆盖任何先前的设置下一个事务访问模式的语句。

      • 对应于SET SESSION TRANSACTION {READ WRITE | READ ONLY}(带有SESSION关键字)。

    • 要设置下一个事务访问模式,请使用以下语法

      SET @@transaction_read_only = value;

      对于该语法,以下语义适用

      • 仅为会话中执行的下一个单个事务设置访问模式。

      • 后续事务将恢复到会话访问模式。

      • 不允许在事务中执行。

      • 对应于SET TRANSACTION {READ WRITE | READ ONLY}(不带SESSION关键字)。

    有关SET TRANSACTION及其与transaction_read_only系统变量的关系的更多信息,请参见第 15.3.7 节,“SET TRANSACTION 语句”.

  • unique_checks

    系统变量 unique_checks
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    如果设置为 1(默认值),则会对InnoDB表中二级索引的唯一性进行检查。如果设置为 0,则存储引擎可以假设输入数据中不存在重复键。如果您确定您的数据不包含唯一性冲突,则可以将其设置为 0 以加快向InnoDB的大型表导入速度。

    将此变量设置为 0 并不要求存储引擎忽略重复键。引擎仍然可以检查它们,并在检测到它们时发出重复键错误。

  • updatable_views_with_limit

    命令行格式 --updatable-views-with-limit[={OFF|ON}]
    系统变量 updatable_views_with_limit
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 1

    此变量控制是否可以对视图进行更新,即使该视图不包含底层表中定义的主键的所有列,前提是更新语句包含LIMIT子句。(此类更新通常由 GUI 工具生成。)更新是UPDATEDELETE语句。这里的主键是指PRIMARY KEY,或者没有列可以包含NULLUNIQUE索引。

    该变量可以具有两个值

    • 1YES:仅发出警告(而不是错误消息)。这是默认值。

    • 0NO:禁止更新。

  • use_secondary_engine

    系统变量 use_secondary_engine
    范围 会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ON
    有效值

    OFF

    ON

    FORCED

    供将来使用。

    是否使用辅助引擎执行查询。

    供 HeatWave 使用。参见 HeatWave 用户指南

  • validate_password.xxx

    validate_password组件实现了一组系统变量,其名称格式为validate_password.xxx。这些变量影响该组件的密码测试;请参见第 8.4.3.2 节,“密码验证选项和变量”.

  • version

    服务器的版本号。该值可能还包含指示服务器构建或配置信息的扩展名。-debug指示服务器是使用启用了调试支持的构建的。

  • version_comment

    系统变量 version_comment
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    CMake配置程序有一个COMPILATION_COMMENT_SERVER选项,允许在构建 MySQL 时指定注释。此变量包含该注释的值。

  • version_compile_machine

    系统变量 version_compile_machine
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    服务器二进制文件的类型。

  • version_compile_os

    系统变量 version_compile_os
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    构建 MySQL 的操作系统的类型。

  • version_compile_zlib

    系统变量 version_compile_zlib
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    编译内置zlib库的版本。

  • wait_timeout

    命令行格式 --wait-timeout=#
    系统变量 wait_timeout
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 28800
    最小值 1
    最大值(Windows) 2147483
    最大值(其他) 31536000
    单位

    服务器在关闭非交互式连接之前等待连接活动的最大秒数。

    在线程启动时,会话wait_timeout值从全局wait_timeout值或全局interactive_timeout值初始化,具体取决于客户端的类型(由对mysql_real_connect()CLIENT_INTERACTIVE连接选项定义)。另请参见interactive_timeout.

  • warning_count

    最后一条生成消息的语句所产生的错误、警告和说明的数目。此变量是只读的。请参见第 15.7.7.41 节,“SHOW WARNINGS 语句”.

  • windowing_use_high_precision

    命令行格式 --windowing-use-high-precision[={OFF|ON}]
    系统变量 windowing_use_high_precision
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    是否在不损失精度的情况下计算窗口操作。请参见第 10.2.1.21 节,“窗口函数优化”.

  • xa_detach_on_prepare

    命令行格式 --xa-detach-on-prepare[={OFF|ON}]
    系统变量 xa_detach_on_prepare
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    当设置为ON(启用)时,所有 XA 事务都会在XA PREPARE期间与连接(会话)分离(断开连接)。这意味着即使发起连接尚未终止,XA 事务也可以通过其他连接提交或回滚,并且此连接可以启动新的事务。

    临时表不能在分离的 XA 事务内使用。

    当它为OFF(禁用)时,XA 事务严格与同一个连接相关联,直到会话断开连接。建议您允许其启用(默认行为),以用于复制。

    有关更多信息,请参见第 15.3.8.2 节,“XA 事务状态”.