MySQL 服务器维护许多影响其运行的系统变量。大多数系统变量可以在服务器启动时使用命令行上的选项或在选项文件中设置。它们中的大多数可以使用 SET
语句在运行时动态更改,这使您能够在无需停止和重新启动服务器的情况下修改服务器的操作。某些变量是只读的,它们的值由系统环境、MySQL 在系统上的安装方式或可能由编译 MySQL 时使用的选项决定。大多数系统变量都有一个默认值,但也有例外,包括只读变量。您还可以在表达式中使用系统变量值。
设置全局系统变量运行时值通常需要 SYSTEM_VARIABLES_ADMIN
权限(或已弃用的 SUPER
权限)。设置会话系统运行时变量值通常不需要特殊权限,任何用户都可以完成,但也有一些例外。有关更多信息,请参阅 第 7.1.9.1 节“系统变量权限”
有几种方法可以查看系统变量的名称和值
要查看服务器根据其编译的默认值和它读取的任何选项文件使用的值,请使用以下命令
mysqld --verbose --help
要查看服务器仅根据其编译的默认值使用的值,忽略任何选项文件中的设置,请使用以下命令
mysqld --no-defaults --verbose --help
要查看正在运行的服务器使用的当前值,请使用
SHOW VARIABLES
语句或性能模式系统变量表。请参阅 第 29.12.14 节“性能模式系统变量表”。
本节介绍每个系统变量。有关系统变量汇总表,请参阅 第 7.1.5 节“服务器系统变量参考”。有关操作系统变量的更多信息,请参阅 第 7.1.9 节“使用系统变量”。
有关其他系统变量信息,请参阅以下部分
第 7.1.9 节“使用系统变量” 讨论了设置和显示系统变量值的语法。
第 7.1.9.2 节“动态系统变量” 列出了可以在运行时设置的变量。
有关调整系统变量的信息,请参阅 第 7.1.1 节“配置服务器”。
第 17.14 节“InnoDB 启动选项和系统变量” 列出了
InnoDB
系统变量。第 25.4.3.9.2 节“NDB 集群系统变量” 列出了 NDB 集群特有的系统变量。
有关特定于复制的服务器系统变量的信息,请参阅 第 19.1.6 节“复制和二进制日志记录选项和变量”。
以下某些变量描述指的是““启用” 或““禁用” 变量。可以通过使用 SET
语句将这些变量设置为 ON
或 1
来启用它们,或者通过将它们设置为 OFF
或 0
来禁用它们。布尔变量可以在启动时设置为值 ON
、TRUE
、OFF
和 FALSE
(不区分大小写),以及 1
和 0
。请参阅 第 6.2.2.4 节“程序选项修饰符”。
某些系统变量控制着缓冲区或缓存的大小。 对于给定的缓冲区,服务器可能需要分配内部数据结构。 这些结构通常是从分配给缓冲区的总内存中分配的,所需的空间量可能与平台相关。 这意味着,当你为控制缓冲区大小的系统变量赋值时,实际可用的空间量可能与赋值不同。 在某些情况下,该数量可能小于赋值。 服务器也有可能向上调整一个值。 例如,如果你为一个最小值为 1024 的变量赋值为 0,则服务器会将该值设置为 1024。
除非另有说明,否则缓冲区大小、长度和堆栈大小的值都以字节为单位。
某些系统变量描述包括块大小,在这种情况下,如果不是所述块大小的整数倍的值将被向下舍入到下一个最接近的块大小的倍数,然后再由服务器存储,即 FLOOR(
值
)*
。块大小
示例:假设给定变量的块大小为 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[={OFF|ON}]
系统变量 activate_all_roles_on_login
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
是否在用户登录服务器时启用所有授予角色的自动激活
如果启用了
activate_all_roles_on_login
,则服务器会在登录时激活授予每个帐户的所有角色。 这将优先于使用SET DEFAULT ROLE
指定的默认角色。如果禁用了
activate_all_roles_on_login
,则服务器会在登录时激活使用SET DEFAULT ROLE
指定的默认角色(如果有)。
授予的角色包括显式授予用户的角色以及
mandatory_roles
系统变量值中命名的角色。activate_all_roles_on_login
仅在登录时以及在定义者上下文中执行的存储程序和视图的执行开始时适用。 若要更改会话中的活动角色,请使用SET ROLE
。 若要更改存储程序的活动角色,程序体应执行SET ROLE
。 -
命令行格式 --admin-address=地址
系统变量 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
系统变量,但有以下区别bind_address
允许多个地址。admin_address
允许单个地址。bind_address
允许通配符地址。admin_address
不允许。
-
命令行格式 --admin-port=端口号
系统变量 admin_port
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 33062
最小值 0
最大值 65535
用于管理网络接口上的连接的 TCP/IP 端口号(请参阅 第 7.1.12.1 节 “连接接口”)。 将此变量设置为 0 将导致使用默认值。
如果未指定
admin_address
,则设置admin_port
无效,因为在这种情况下,服务器不维护管理网络接口。 -
命令行格式 --admin-ssl-ca=文件名
系统变量 admin_ssl_ca
作用域 全局 动态 是 SET_VAR
提示适用否 类型 文件名 默认值 NULL
admin_ssl_ca
系统变量类似于ssl_ca
,只是它适用于管理连接接口而不是主连接接口。 有关为管理接口配置加密支持的信息,请参阅 管理接口对加密连接的支持。 -
命令行格式 --admin-ssl-capath=目录名
系统变量 admin_ssl_capath
作用域 全局 动态 是 SET_VAR
提示适用否 类型 目录名 默认值 NULL
admin_ssl_capath
系统变量类似于ssl_capath
,只是它适用于管理连接接口而不是主连接接口。 有关为管理接口配置加密支持的信息,请参阅 管理接口对加密连接的支持。 -
命令行格式 --admin-ssl-cert=文件名
系统变量 admin_ssl_cert
作用域 全局 动态 是 SET_VAR
提示适用否 类型 文件名 默认值 NULL
admin_ssl_cert
系统变量类似于ssl_cert
,只是它适用于管理连接接口而不是主连接接口。 有关为管理接口配置加密支持的信息,请参阅 管理接口对加密连接的支持。 -
命令行格式 --admin-ssl-cipher=名称
系统变量 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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 文件名 默认值 NULL
系统变量
admin_ssl_crl
类似于ssl_crl
,区别在于它应用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参阅 管理接口对加密连接的支持。 -
命令行格式 --admin-ssl-crlpath=目录名称
系统变量 admin_ssl_crlpath
作用域 全局 动态 是 SET_VAR
提示适用否 类型 目录名 默认值 NULL
系统变量
admin_ssl_crlpath
类似于ssl_crlpath
,区别在于它应用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参阅 管理接口对加密连接的支持。 -
命令行格式 --admin-ssl-key=文件名称
系统变量 admin_ssl_key
作用域 全局 动态 是 SET_VAR
提示适用否 类型 文件名 默认值 NULL
系统变量
admin_ssl_key
类似于ssl_key
,区别在于它应用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参阅 管理接口对加密连接的支持。 -
命令行格式 --admin-tls-ciphersuites=密码套件列表
系统变量 admin_tls_ciphersuites
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 NULL
系统变量
admin_tls_ciphersuites
类似于tls_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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 TLSv1.2,TLSv1.3
系统变量
admin_tls_version
类似于tls_version
,区别在于它应用于管理连接接口,而不是主连接接口。有关为管理接口配置加密支持的信息,请参阅 管理接口对加密连接的支持。重要MySQL 9.0 不支持 TLSv1 和 TLSv1.1 连接协议。有关更多信息,请参阅 移除对 TLSv1 和 TLSv1.1 协议的支持。
MuySQL 9.0 支持 TLSv1.3 协议,前提是 MySQL 服务器是使用 OpenSSL 1.1.1 或更高版本编译的。服务器在启动时会检查 OpenSSL 的版本,如果低于 1.1.1,则会从系统变量的默认值中移除 TLSv1.3。在这种情况下,默认值为
TLSv1.2
。
-
命令行格式 --authentication-policy=值
系统变量 authentication_policy
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 *,,
此变量用于管理多因素身份验证 (MFA) 功能。它适用于用于管理 MySQL 帐户定义的
CREATE USER
和ALTER USER
语句的身份验证因素相关子句,其中““因素””对应于与帐户关联的身份验证方法或插件。authentication_policy
控制帐户可以拥有的身份验证因素的数量。也就是说,它控制需要或允许哪些因素。authentication_policy
还控制每个因素允许哪些插件(或方法)。authentication_policy
确定未明确命名插件的身份验证规范的默认身份验证插件。
因为
authentication_policy
仅在创建或更改帐户时应用,所以对其值的更改不会影响现有用户帐户。注意尽管
authentication_policy
系统变量对CREATE USER
和ALTER 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
’允许使用三个因素创建或更改帐户,其中这些因素必须使用指定的插件。 authentication_windows_log_level
命令行格式 --authentication-windows-log-level=#
系统变量 authentication_windows_log_level
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 2
最小值 0
最大值 4
仅当启用了
authentication_windows
Windows 身份验证插件并启用了调试代码时,此变量才可用。请参阅 第 8.4.1.5 节“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.5 节“Windows 可插拔身份验证”。使用
InitSecurityContext()
函数进行身份验证的客户端应提供一个字符串,用于标识其连接到的服务 (targetName
)。MySQL 使用运行服务器的帐户的主体名称 (UPN)。UPN 的格式为
,并且无需在任何地方注册即可使用。此 UPN 由服务器在身份验证握手的开始发送。user_id
@computer_name
此变量控制服务器是否在初始质询中发送 UPN。默认情况下,该变量处于启用状态。出于安全原因,可以将其禁用以避免将服务器的帐户名以明文形式发送到客户端。如果该变量被禁用,则服务器始终在第一次质询中发送
0x00
字节,客户端不指定targetName
,因此使用 NTLM 身份验证。如果服务器无法获取其 UPN(主要发生在不支持 Kerberos 身份验证的环境中),则服务器不会发送 UPN,并且使用 NTLM 身份验证。
-
命令行格式 --autocommit[={OFF|ON}]
系统变量 autocommit
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
自动提交模式。如果设置为 1,则对表的任何更改都会立即生效。如果设置为 0,则必须使用
COMMIT
接受事务,或使用ROLLBACK
取消事务。如果autocommit
为 0 并将其更改为 1,则 MySQL 会对任何打开的事务执行自动COMMIT
。另一种开始事务的方法是使用START TRANSACTION
或BEGIN
语句。请参阅 第 15.3.1 节“START TRANSACTION、COMMIT 和 ROLLBACK 语句”。默认情况下,客户端连接在启动时将
autocommit
设置为 1。要使客户端以默认值 0 开始,请使用--autocommit=0
选项启动服务器来设置全局autocommit
值。要使用选项文件设置该变量,请包含以下行[mysqld] autocommit=0
-
命令行格式 --automatic-sp-privileges[={OFF|ON}]
系统变量 automatic_sp_privileges
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
当此变量的值为 1(默认值)时,如果用户还不能执行和更改或删除存储过程,则服务器会自动向其创建者授予
EXECUTE
和ALTER ROUTINE
权限。(删除例程需要ALTER ROUTINE
权限。)当例程被删除时,服务器还会自动从创建者那里删除这些权限。如果automatic_sp_privileges
为 0,则服务器不会自动添加或删除这些权限。例程的创建者是用于为其执行
CREATE
语句的帐户。这可能与例程定义中命名为DEFINER
的帐户不同。如果使用
--skip-new
启动 mysqld,则automatic_sp_privileges
将设置为OFF
。 -
命令行格式 --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_keys
和caching_sha2_password_auto_generate_rsa_keys
系统变量相关,但控制使用未加密连接上的 RSA 进行安全密码交换所需的 RSA 密钥对文件的自动生成。 -
命令行格式 --back-log=#
系统变量 back_log
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 -1
(表示自动调整大小;不要分配此字面值)最小值 1
最大值 65535
MySQL 可以拥有的未完成连接请求数。当主 MySQL 线程在很短的时间内收到大量连接请求时,就会出现这种情况。然后,主线程需要一些时间(尽管非常少)来检查连接并启动新线程。
back_log
值表示在 MySQL 暂时停止响应新请求之前,在这段时间内可以堆叠多少个请求。仅当您预计在短时间内会有大量连接时,才需要增加此值。换句话说,此值是传入 TCP/IP 连接的侦听队列的大小。您的操作系统对此队列的大小有其自身的限制。Unix
listen()
系统调用的手册页应该有更多详细信息。请查看您的操作系统文档以了解此变量的最大值。back_log
不能设置高于您的操作系统限制的值。默认值为
max_connections
的值,这允许允许的积压量根据允许的最大连接数进行调整。 -
MySQL 安装基目录的路径。
-
命令行格式 --big-tables[={OFF|ON}]
系统变量 big_tables
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
如果启用,服务器会将所有临时表存储在磁盘上,而不是存储在内存中。这可以防止
SELECT
操作(需要大型临时表)出现大多数表
错误,但也会降低内存表足以满足的查询速度。tbl_name
已满新连接的默认值为
OFF
(使用内存临时表)。通常,应该永远不需要启用此变量。当内存 内部 临时表由TempTable
存储引擎(默认)管理,并且超过了TempTable
存储引擎可以占用的最大内存量时,TempTable
存储引擎开始将数据存储到磁盘上的临时文件。当内存临时表由MEMORY
存储引擎管理时,内存表会根据需要自动转换为基于磁盘的表。有关更多信息,请参阅 第 10.4.4 节“MySQL 中的内部临时表使用”。 -
命令行格式 --bind-address=地址
系统变量 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 接口上的 TCP/IP 连接。使用此地址以允许在所有服务器接口上进行 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
,则它只接受该地址上的连接。在这种情况下,首先请确保mysql.user
表中存在'root'@'::1'
帐户,以便您仍然可以连接到服务器以关闭它。 -
命令行格式 --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
值为ECB
、CBC
、CFB1
、CFB8
、CFB128
和OFB
。例如,此语句会导致 AES 加密函数使用 256 位的密钥长度和 CBC 模式
SET block_encryption_mode = 'aes-256-cbc';
如果尝试将
block_encryption_mode
设置为包含不受支持的密钥长度或 SSL 库不支持的模式的值,则会发生错误。 -
这是一个 160 位的
SHA1
签名,在使用-DWITH_BUILD_ID=ON
(默认启用)在 Linux 系统上编译服务器时由链接器生成,并转换为十六进制字符串。此只读值用作唯一的构建 ID,并在启动时写入服务器日志。除 Linux 以外的平台不支持
build_id
。 -
命令行格式 --bulk-insert-buffer-size=#
系统变量 bulk_insert_buffer_size
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 8388608
最小值 0
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
单位 字节/线程 当向非空表添加数据时,
MyISAM
使用特殊的树状缓存来加快INSERT ... SELECT
、INSERT ... 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_keys
或caching_sha2_password_auto_generate_rsa_keys
系统变量已启用;未指定 RSA 选项;数据目录中缺少 RSA 文件。这些密钥对文件允许通过未加密的连接使用 RSA 进行安全密码交换,适用于由sha256_password
或caching_sha2_password
插件进行身份验证的帐户;请参阅 第 8.4.1.2 节“SHA-256 可插拔身份验证” 和 第 8.4.1.1 节“缓存 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.1 节“缓存 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.1 节“缓存 SHA-2 可插拔身份验证”。-
系统变量 character_set_client
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb4
从客户端接收的语句的字符集。此变量的会话值是使用客户端在连接到服务器时请求的字符集设置的。(许多客户端都支持
--default-character-set
选项,以便能够显式指定此字符集。另请参阅 第 12.4 节“连接字符集和排序规则”。)在客户端请求的值未知或不可用,或者服务器配置为忽略客户端请求的情况下,将使用该变量的全局值来设置会话值。当客户端请求服务器未知的字符集时,例如,当支持日语的客户端在连接到未配置sjis
支持的服务器时请求sjis
时,可能会发生这种情况。某些字符集不能用作客户端字符集。尝试将它们用作
character_set_client
值会产生错误。请参阅 不允许的客户端字符集。 -
系统变量 character_set_connection
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb4
用于指定没有字符集介绍器的文字以及数字到字符串转换的字符集。有关介绍器的更多信息,请参阅第 12.3.8 节,“字符集介绍器”。
-
系统变量 character_set_database
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb4
脚注 此选项是动态的,但只能由服务器设置。您不应手动设置此变量。 默认数据库使用的字符集。每当默认数据库更改时,服务器都会设置此变量。如果没有默认数据库,则该变量的值与
character_set_server
相同。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
全局
character_set_database
和collation_database
系统变量已弃用;预计在未来版本的 MySQL 中会将其移除。不建议为会话
character_set_database
和collation_database
系统变量赋值,并且赋值会产生警告。预计在未来版本的 MySQL 中,会话变量将变为只读(并且对它们的赋值会产生错误),在该版本中,仍然可以访问会话变量以确定默认数据库的数据库字符集和排序规则。 -
命令行格式 --character-set-filesystem=名称
系统变量 character_set_filesystem
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 binary
文件系统字符集。此变量用于解释引用文件名的字符串文字,例如在
LOAD DATA
和SELECT ... INTO OUTFILE
语句以及LOAD_FILE()
函数中。在尝试打开文件之前,此类文件名会从character_set_client
转换为character_set_filesystem
。默认值为binary
,这意味着不进行任何转换。对于允许使用多字节文件名的系统,其他值可能更合适。例如,如果系统使用 UTF-8 表示文件名,请将character_set_filesystem
设置为'utf8mb4'
。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
系统变量 character_set_results
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb4
用于将查询结果返回给客户端的字符集。这包括结果数据(例如列值)、结果元数据(例如列名)和错误消息。
-
命令行格式 --character-set-server=名称
系统变量 character_set_server
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb4
服务器的默认字符集。请参阅第 12.15 节,“字符集配置”。如果设置此变量,则还应设置
collation_server
以指定字符集的排序规则。 -
系统变量 character_set_system
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb3
服务器用于存储标识符的字符集。该值始终为
utf8mb3
。 -
命令行格式 --character-sets-dir=目录名
系统变量 character_sets_dir
作用域 全局 动态 否 SET_VAR
提示适用否 类型 目录名 安装字符集的目录。请参阅第 12.15 节,“字符集配置”。
-
命令行格式 --check-proxy-users[={OFF|ON}]
系统变量 check_proxy_users
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
某些身份验证插件会自行实现代理用户映射(例如,PAM 和 Windows 身份验证插件)。其他身份验证插件默认情况下不支持代理用户。
sha256_password
可以请求 MySQL 服务器本身根据授予的代理权限映射代理用户。如果启用了
check_proxy_users
系统变量,则服务器会为任何发出此类请求的身份验证插件执行代理用户映射。要利用服务器代理用户映射对sha256_password
插件的支持,您必须启用sha256_password_proxy_users
。有关用户代理的信息,请参阅第 8.2.19 节,“代理用户”。
-
系统变量 collation_connection
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 连接字符集的排序规则。
collation_connection
对于比较字符串文字非常重要。对于字符串与列值的比较,collation_connection
无关紧要,因为列有自己的排序规则,其排序规则优先级更高(请参阅第 12.8.4 节,“表达式中的排序规则强制性”)。为此变量使用用户定义的排序规则的名称会引发警告。
-
系统变量 collation_database
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb4_0900_ai_ci
脚注 此选项是动态的,但只能由服务器设置。您不应手动设置此变量。 默认数据库使用的排序规则。每当默认数据库更改时,服务器都会设置此变量。如果没有默认数据库,则该变量的值与
collation_server
相同。全局
character_set_database
和collation_database
系统变量已弃用;预计在未来版本的 MySQL 中会将其移除。不建议为会话
character_set_database
和collation_database
系统变量赋值,并且赋值会产生警告。预计在未来版本的 MySQL 中,会话变量将变为只读(并且对它们的赋值会产生错误),在该版本中,仍然可以访问会话变量以确定默认数据库的数据库字符集和排序规则。为
collation_database
使用用户定义的排序规则的名称会引发警告。 -
命令行格式 --collation-server=名称
系统变量 collation_server
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 utf8mb4_0900_ai_ci
服务器的默认排序规则。请参阅第 12.15 节,“字符集配置”。
将其设置为用户定义的排序规则的名称会引发警告。
-
命令行格式 --completion-type=#
系统变量 completion_type
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 NO_CHAIN
有效值 NO_CHAIN
CHAIN
RELEASE
0
1
2
事务完成类型。此变量可以采用下表中显示的值。可以使用名称值或相应的整数值来分配变量。
值 描述 NO_CHAIN
(或 0)COMMIT
和ROLLBACK
不受影响。这是默认值。CHAIN
(或 1)COMMIT
和ROLLBACK
分别等效于COMMIT AND CHAIN
和ROLLBACK AND CHAIN
。(新事务立即以与刚终止的事务相同的隔离级别启动。)RELEASE
(或 2)COMMIT
和ROLLBACK
分别等效于COMMIT RELEASE
和ROLLBACK RELEASE
。(服务器在终止事务后断开连接。)completion_type
影响以START TRANSACTION
或BEGIN
开始并以COMMIT
或ROLLBACK
结束的事务。它不适用于因执行第 15.3.3 节,“导致隐式提交的语句”中列出的语句而导致的隐式提交。它也不适用于XA COMMIT
、XA ROLLBACK
或autocommit=1
时。 -
命令行格式 --component-scheduler.enabled[=值]
系统变量 component_scheduler.enabled
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
如果在启动时设置为
OFF
,则后台线程不会启动。仍然可以安排任务,但在启用component_scheduler
之前,这些任务不会运行。如果在启动时设置为ON
,则组件将完全运行。也可以动态设置该值以获得以下效果
ON
启动后台线程,该线程立即开始为队列提供服务。OFF
表示后台线程终止,等待其结束。后台线程在访问队列以检查要执行的任务之前会检查终止标志。
-
命令行格式 --concurrent-insert[=值]
系统变量 concurrent_insert
作用域 全局 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 AUTO
有效值 NEVER
AUTO
ALWAYS
0
1
2
如果为
AUTO
(默认值),则 MySQL 允许INSERT
和SELECT
语句针对数据文件中间没有空闲块的MyISAM
表并发运行。此变量可以采用下表中显示的值。可以使用名称值或相应的整数值来分配变量。
值 描述 NEVER
(或 0)禁用并发插入 AUTO
(或 1)(默认)为没有空洞的 MyISAM
表启用并发插入ALWAYS
(或 2)为所有 MyISAM
表启用并发插入,即使是那些有空洞的表。对于有空洞的表,如果另一个线程正在使用该表,则新行将插入到表的末尾。否则,MySQL 会获取一个正常的写锁,并将该行插入到空洞中。如果使用
--skip-new
启动 mysqld,则concurrent_insert
将设置为NEVER
。另请参阅第 10.11.3 节,“并发插入”。
-
命令行格式 --connect-timeout=#
系统变量 connect_timeout
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 10
最小值 2
最大值 31536000
单位 秒 在响应
Bad handshake
之前,mysqld 服务器等待连接数据包的秒数。默认值为 10 秒。如果客户端经常遇到
Lost connection to MySQL server at '
形式的错误,则增加XXX
', system error:errno
connect_timeout
值可能会有所帮助。 -
命令行格式 --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_ADMIN
或SUPER
权限才能设置此变量。 -
命令行格式 --connection-memory-limit=#
系统变量 connection_memory_limit
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 18446744073709551615
最小值 2097152
最大值 18446744073709551615
单位 字节 设置单个用户连接可以使用的最大内存量。如果任何用户连接使用的内存超过此数量,则来自此连接的所有查询都将被拒绝,并显示
ER_CONN_LIMIT
,包括当前正在运行的任何查询。此变量设置的限制不适用于系统用户或 MySQL root 帐户。也不包括
InnoDB
缓冲池使用的内存。您必须具有
SYSTEM_VARIABLES_ADMIN
或SUPER
权限才能设置此变量。 -
如果服务器意外退出,是否写入核心文件。此变量由
--core-file
选项设置。 -
命令行格式 --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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1000
最小值 0
最大值 4294967295
公用表表达式 (CTE) 最大递归深度。对于递归级别超过此变量值的任何 CTE,服务器将终止其执行。有关更多信息,请参阅 限制公用表表达式递归。
-
MySQL 服务器数据目录的路径。相对路径是相对于当前目录解析的。如果您希望服务器自动启动(也就是说,在您无法事先知道当前目录的情况下),最好将
datadir
值指定为绝对路径。 -
命令行格式 --debug[=调试选项]
系统变量 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
作用域 会话 动态 是 SET_VAR
提示适用否 类型 字符串 此变量是调试同步工具的用户界面。使用调试同步需要使用
-DWITH_DEBUG=ON
CMake 选项配置 MySQL(请参阅 第 2.8.7 节“MySQL 源配置选项”);否则,此系统变量不可用。全局变量值是只读的,指示该工具是否已启用。默认情况下,调试同步处于禁用状态,
debug_sync
的值为OFF
。如果使用--debug-sync-timeout=
启动服务器,其中N
N
是大于 0 的超时值,则调试同步处于启用状态,debug_sync
的值为ON - 当前信号
,后跟信号名称。此外,N
成为各个同步点的默认超时。任何用户都可以读取会话值,其值与全局变量相同。可以设置会话值来控制同步点。
设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
有关调试同步工具以及如何使用同步点的说明,请参阅 MySQL 内部结构:测试同步。
-
系统变量 default_collation_for_utf8mb4
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 枚举 有效值 utf8mb4_0900_ai_ci
utf8mb4_general_ci
重要default_collation_for_utf8mb4
系统变量仅供 MySQL 复制内部使用。服务器将此变量设置为
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
排序规则用在以下语句中具有
CHARACTER SET utf8mb4
子句但没有COLLATION
子句的CREATE TABLE
和ALTER TABLE
,用于表字符集或列字符集。具有
CHARACTER SET utf8mb4
子句但没有COLLATION
子句的CREATE DATABASE
和ALTER DATABASE
。任何包含
_utf8mb4'
形式的字符串文字但没有一些文本
'COLLATE
子句的语句。
另请参阅 第 12.9 节“Unicode 支持”。
-
命令行格式 --default-password-lifetime=#
系统变量 default_password_lifetime
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 65535
单位 天 此变量定义全局自动密码过期策略。默认的
default_password_lifetime
值为 0,表示禁用自动密码过期。如果default_password_lifetime
的值为正整数N
,则表示允许的密码生存期;密码必须每N
天更改一次。可以使用
CREATE USER
和ALTER USER
语句的密码过期选项,根据需要为各个帐户覆盖全局密码过期策略。请参阅 第 8.2.15 节“密码管理”。 -
命令行格式 --default-storage-engine=名称
系统变量 default_storage_engine
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 InnoDB
表的默认存储引擎。请参阅 第 18 章“备用存储引擎”。此变量仅设置永久表的存储引擎。要设置
TEMPORARY
表的存储引擎,请设置default_tmp_storage_engine
系统变量。要查看哪些存储引擎可用且已启用,请使用
SHOW ENGINES
语句或查询INFORMATION_SCHEMA
ENGINES
表。如果在服务器启动时禁用了默认存储引擎,则必须将永久表和
TEMPORARY
表的默认引擎设置为其他引擎,否则服务器将无法启动。 -
命令行格式 --default-table-encryption[={OFF|ON}]
系统变量 default_table_encryption
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 OFF
定义在创建架构和通用表空间时,如果没有指定
ENCRYPTION
子句,则应用于它们的默认加密设置。default_table_encryption
变量仅适用于用户创建的架构和通用表空间。它不控制mysql
系统表空间的加密。设置
default_table_encryption
的运行时值需要SYSTEM_VARIABLES_ADMIN
和TABLE_ENCRYPTION_ADMIN
权限,或已弃用的SUPER
权限。default_table_encryption
支持SET PERSIST
和SET PERSIST_ONLY
语法。参见 第 7.1.9.3 节,“持久化系统变量”。有关更多信息,请参见 为架构和通用表空间定义加密默认值。
-
命令行格式 --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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 7
WEEK()
函数使用的默认模式值。参见 第 14.7 节,“日期和时间函数”。 -
命令行格式 --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_recover_options
系统变量(例如,myisam_recover_options='BACKUP,FORCE'
)来添加对所有MyISAM
表的自动检查。参见 第 7.1.8 节,“服务器系统变量” 和 第 18.2.1 节,“MyISAM 启动选项”。如果使用
--skip-new
启动 mysqld,则delay_key_write
将设置为OFF
。警告如果使用
--external-locking
启用外部锁定,则对于使用延迟键写入的表,将无法防止索引损坏。 -
命令行格式 --delayed-insert-limit=#
已弃用 是 系统变量 delayed_insert_limit
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 100
最小值 1
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
此系统变量已弃用(因为不支持
DELAYED
插入),并且您应该预料到它将在未来版本中被删除。 -
命令行格式 --delayed-insert-timeout=#
已弃用 是 系统变量 delayed_insert_timeout
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 300
最小值 1
最大值 31536000
单位 秒 此系统变量已弃用(因为不支持
DELAYED
插入),并且您应该预料到它将在未来版本中被删除。 -
命令行格式 --delayed-queue-size=#
已弃用 是 系统变量 delayed_queue_size
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1000
最小值 1
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
此系统变量已弃用(因为不支持
DELAYED
插入),并且您应该预料到它将在未来版本中被删除。 -
命令行格式 --disabled-storage-engines=engine[,engine]...
系统变量 disabled_storage_engines
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 默认值 空字符串
此变量指示哪些存储引擎不能用于创建表或表空间。例如,要防止创建新的
MyISAM
或FEDERATED
表,请在服务器选项文件中使用以下行启动服务器[mysqld] disabled_storage_engines="MyISAM,FEDERATED"
默认情况下,
disabled_storage_engines
为空(没有禁用引擎),但可以将其设置为一个或多个引擎的逗号分隔列表(不区分大小写)。值中命名的任何引擎都不能用于使用CREATE TABLE
或CREATE TABLESPACE
创建表或表空间,并且不能与ALTER TABLE ... ENGINE
或ALTER TABLESPACE ... ENGINE
一起使用来更改现有表或表空间的存储引擎。尝试这样做会导致ER_DISABLED_STORAGE_ENGINE
错误。disabled_storage_engines
不限制现有表的其他 DDL 语句,例如CREATE INDEX
、TRUNCATE TABLE
、ANALYZE TABLE
、DROP TABLE
或DROP TABLESPACE
。这允许平稳过渡,以便可以使用禁用引擎的现有表或表空间通过ALTER TABLE ... ENGINE
等方式迁移到允许的引擎。permitted_engine
允许将
default_storage_engine
或default_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
此变量控制服务器如何处理密码过期的客户端
如果客户端指示它可以处理过期的密码,则
disconnect_on_expired_password
的值无关紧要。服务器允许客户端连接,但会将其置于沙盒模式。如果客户端未指示它可以处理过期的密码,则服务器将根据
disconnect_on_expired_password
的值处理客户端如果
disconnect_on_expired_password
:启用,则服务器将断开客户端连接。如果
disconnect_on_expired_password
:禁用,则服务器允许客户端连接,但会将其置于沙盒模式。
有关与过期密码处理相关的客户端和服务器设置交互的更多信息,请参见 第 8.2.16 节,“服务器对过期密码的处理”。
-
命令行格式 --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
共享库函数生成的内容的解密和验证,必须将系统变量 padding 设置为ON
。如果将ON
设置为ON
,则当组件函数无法解密或验证假设其具有 RSAES-OAEP 或 RSASSA-PSS 方案(由组件使用)的内容时,它们会尝试假设其具有 RSAES-PKCS1-v1_5 或 RSASSA-PKCS1-v1_5 方案(由openssl_udf
共享库函数使用)。如果将OFF
设置为OFF
,则当组件函数无法使用其正常方案解密或验证内容时,它们将返回空输出。有关更多信息,请参阅第 8.6.2 节“配置 MySQL 企业版加密”。-
命令行格式 --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
作用域 全局,会话 动态 是 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
。 导致最后一个生成消息的语句出错的次数。此变量为只读变量。请参阅第 15.7.7.18 节“SHOW ERRORS 语句”。
-
命令行格式 --event-scheduler[=value]
系统变量 event_scheduler
作用域 全局 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 ON
有效值 ON
OFF
DISABLED
此变量用于启用或禁用事件调度程序,并启动或停止事件调度程序。可能的状态值为
ON
、OFF
和DISABLED
。关闭事件调度程序与禁用事件调度程序不同,后者需要将状态设置为DISABLED
。第 27.5.2 节“事件调度程序配置”中更详细地讨论了此变量及其对事件调度程序操作的影响。 -
命令行格式 --explain-format=format
系统变量 explain_format
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 TRADITIONAL
有效值 TRADITIONAL(默认值)
JSON
TREE
此变量确定在显示查询执行计划时,如果没有
FORMAT
选项,EXPLAIN
使用的默认输出格式。此处列出了可能的值及其影响TRADITIONAL
:使用 MySQL 的传统基于表的输出,就像已在EXPLAIN
语句中指定了FORMAT=TRADITIONAL
一样。这是该变量的默认值。同时还支持使用DEFAULT
作为TRADITIONAL
的同义词,并且其作用完全相同。注意不能将
DEFAULT
用作EXPLAIN
语句的FORMAT
选项的一部分。JSON
:使用 JSON 输出格式,就像已指定了FORMAT=JSON
一样。TREE
:使用基于树的输出格式,就像已指定了FORMAT=TREE
一样。
此变量的设置也会影响
EXPLAIN ANALYZE
。为此,DEFAULT
和TRADITIONAL
将被解释为TREE
。如果explain_format
的值为JSON
,并且发出了没有FORMAT
选项的EXPLAIN ANALYZE
语句,则该语句将引发错误(ER_NOT_SUPPORTED_YET
)。将格式说明符与
EXPLAIN
或EXPLAIN ANALYZE
一起使用将覆盖explain_format
的任何设置。当
EXPLAIN
语句用于显示有关表列的信息时,explain_format
系统变量对此语句的输出无效。设置
explain_format
的会话值不需要任何特殊权限;在全局级别设置它需要SYSTEM_VARIABLES_ADMIN
(或已弃用的SUPER
权限)。请参阅第 7.1.9.1 节“系统变量权限”。有关更多信息和示例,请参阅获取执行计划信息。
-
命令行格式 --explain-json-format-version=#
系统变量 explain_json_format_version
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 1
最大值 2
确定
EXPLAIN FORMAT=JSON
语句使用的 JSON 输出格式的版本。将此变量设置为1
会导致服务器使用版本 1,这是旧版本 MySQL 中此类语句输出所使用的线性格式;这是 MySQL 9.0 中的默认值。将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
属性或显式的DEFAULT
或ON UPDATE
属性)将自动声明为具有DEFAULT CURRENT_TIMESTAMP
和ON 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()
)。未显式声明为
NOT NULL
属性的TIMESTAMP
列会自动声明为NULL
属性,并允许使用NULL
值。将NULL
值赋给这样的列会将其设置为NULL
,而不是当前时间戳。声明为
NOT NULL
属性的TIMESTAMP
列不允许使用NULL
值。对于为这种列指定NULL
的插入操作,如果启用了严格 SQL 模式,则单行插入会发生错误;如果禁用了严格 SQL 模式,则多行插入会插入'0000-00-00 00:00:00'
。在任何情况下,将NULL
值赋给该列都不会将其设置为当前时间戳。显式声明为
NOT NULL
属性且没有显式DEFAULT
属性的TIMESTAMP
列将被视为没有默认值。对于为这种列未指定显式值的插入行,结果取决于 SQL 模式。如果启用了严格 SQL 模式,则会发生错误。如果未启用严格 SQL 模式,则该列将声明为隐式默认值'0000-00-00 00:00:00'
,并会发出警告。这类似于 MySQL 处理其他时间类型(如DATETIME
)的方式。任何
TIMESTAMP
列都不会自动声明为DEFAULT CURRENT_TIMESTAMP
或ON UPDATE CURRENT_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
作用域 会话 动态 否 SET_VAR
提示适用否 类型 字符串 身份验证过程中使用的外部用户名,由用于对客户端进行身份验证的插件设置。对于原生(内置)MySQL 身份验证,或者如果插件未设置该值,则此变量为
NULL
。请参阅 第 8.2.19 节“代理用户”。 -
如果为
ON
,则服务器会在每个 SQL 语句之后刷新(同步)所有更改到磁盘。通常,MySQL 仅在每个 SQL 语句之后才将所有更改写入磁盘,并让操作系统处理与磁盘的同步。请参阅 第 B.3.3.3 节“如果 MySQL 不断崩溃该怎么办”。如果使用--flush
选项启动 mysqld,则此变量将设置为ON
。注意如果启用了
flush
,则flush_time
的值无关紧要,并且对flush_time
的更改不会影响刷新行为。 -
命令行格式 --flush-time=#
系统变量 flush_time
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 31536000
单位 秒 如果将其设置为非零值,则每隔
flush_time
秒就会关闭所有表,以释放资源并将未刷新的数据同步到磁盘。此选项最好仅在资源最少的系统上使用。注意如果启用了
flush
,则flush_time
的值无关紧要,并且对flush_time
的更改不会影响刷新行为。 -
系统变量 foreign_key_checks
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 ON
如果设置为 1(默认值),则会检查外键约束。如果设置为 0,则会忽略外键约束,但有几个例外。重新创建已删除的表时,如果表定义不符合引用该表的外键约束,则会返回错误。同样,如果外键定义格式错误,则
ALTER TABLE
操作会返回错误。有关更多信息,请参阅 第 15.1.20.5 节“FOREIGN KEY 约束”。设置此变量对
NDB
表的影响与对InnoDB
表的影响相同。通常,您可以在正常操作期间启用此设置,以强制执行 参照完整性。禁用外键检查对于以与其父/子关系所需的顺序不同的顺序重新加载InnoDB
表非常有用。请参阅 第 15.1.20.5 节“FOREIGN KEY 约束”。将
foreign_key_checks
设置为 0 也会影响数据定义语句:即使架构包含由架构外部的表引用的外键的表,DROP SCHEMA
也会删除该架构,而DROP TABLE
也会删除具有由其他表引用的外键的表。注意将
foreign_key_checks
设置为 1 不会触发对现有表数据的扫描。因此,不会验证在foreign_key_checks = 0
时添加到表中的行的一致性。即使在
foreign_key_checks=0
的情况下,也不允许删除外键约束所需的索引。必须先删除外键约束,然后才能删除索引。 -
命令行格式 --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
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 84
最小值 10
最大值 84
要包含在
MyISAM
FULLTEXT
索引中的单词的最大长度。注意更改此变量后,必须重建
MyISAM
表上的FULLTEXT
索引。请使用REPAIR TABLE
。tbl_name
QUICK -
命令行格式 --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
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 20
最小值 0
最大值 1000
使用
WITH QUERY EXPANSION
执行的全文搜索要使用的最佳匹配数。 -
命令行格式 --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[={OFF|ON}]
系统变量 general_log
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
常规查询日志是否已启用。该值可以是 0(或
OFF
)以禁用日志,也可以是 1(或ON
)以启用日志。日志输出的目标由log_output
系统变量控制;如果该值为NONE
,则即使启用了日志,也不会写入任何日志条目。 -
命令行格式 --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 USER
、ALTER USER
和SET 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_ADMIN
或SUPER
权限才能设置此变量。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_ADMIN
或SUPER
权限才能设置此变量。-
命令行格式 --group-concat-max-len=#
系统变量 group_concat_max_len
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 1024
最小值 4
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
GROUP_CONCAT()
函数允许的最大结果长度(以字节为单位)。默认值为 1024。 如果服务器可以使用
zlib
压缩库,则为YES
,否则为NO
。如果不是,则不能使用COMPRESS()
和UNCOMPRESS()
函数。如果 mysqld 支持动态加载插件,则为
YES
,否则为NO
。如果值为NO
,则不能使用--plugin-load
等选项在服务器启动时加载插件,也不能使用INSTALL PLUGIN
语句在运行时加载插件。如果服务器支持空间数据类型,则为
YES
,否则为NO
。如果存在语句分析功能,则为
YES
,否则为NO
。如果存在,则profiling
系统变量控制此功能是启用还是禁用。请参阅 第 15.7.7.32 节“SHOW PROFILES 语句”。此变量已弃用;预计在未来的 MySQL 版本中会被删除。
have_query_cache
已弃用,其值始终为NO
,预计在未来的 MySQL 版本中会被删除。如果
RTREE
索引可用,则为YES
,否则为NO
。(这些索引用于MyISAM
表中的空间索引。)-
系统变量 have_statement_timeout
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 语句执行超时功能是否可用(请参阅 语句执行时间优化器提示)。如果无法初始化此功能使用的后台线程,则该值可以为
NO
。 如果启用了符号链接支持,则为
YES
,否则为NO
。这在 Unix 上是必需的,用于支持DATA DIRECTORY
和INDEX 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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 -1
(表示自动调整大小;不要分配此字面值)最小值 0
最大值 65536
MySQL 服务器维护一个内存中的主机缓存,其中包含客户端主机名和 IP 地址信息,用于避免域名系统 (DNS) 查询;请参阅 第 7.1.12.3 节“DNS 查询和主机缓存”。
host_cache_size
变量控制主机缓存的大小,以及公开缓存内容的 Performance Schemahost_cache
表的大小。设置host_cache_size
会产生以下影响:将大小设置为 0 会禁用主机缓存。禁用缓存后,服务器每次客户端连接时都会执行 DNS 查询。
在运行时更改大小会导致隐式主机缓存刷新操作,该操作会清除主机缓存、截断
host_cache
表并解除对任何被阻止主机的阻止。
默认值自动调整为 128,加上
max_connections
值(最多 500)的 1,再加上max_connections
值中每超过 500 的增量 20 的 1,上限为 2000。 -
服务器在启动时将此变量设置为服务器主机名。最大长度为 255 个字符。
此变量是
last_insert_id
变量的同义词。它的存在是为了与其他数据库系统兼容。您可以使用SELECT @@identity
读取其值,并使用SET identity
设置其值。-
命令行格式 --init-connect=name
系统变量 init_connect
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 服务器为每个连接的客户端执行的字符串。该字符串由一个或多个 SQL 语句组成,用分号字符分隔。
对于具有
CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)的用户,不会执行init_connect
的内容。这样做是为了防止init_connect
的错误值阻止所有客户端连接。例如,该值可能包含语法错误的语句,从而导致客户端连接失败。不为具有CONNECTION_ADMIN
或SUPER
权限的用户执行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_stats
和mysql.table_stats
字典表中检索这些列的缓存值,这比直接从存储引擎中检索统计信息更有效率。如果缓存的统计信息不可用或已过期,MySQL 会从存储引擎中检索最新的统计信息,并将其缓存在mysql.index_stats
和mysql.table_stats
字典表中。后续查询会检索缓存的统计信息,直到缓存的统计信息过期为止。服务器重启或第一次打开mysql.index_stats
和mysql.table_stats
表时,不会自动更新缓存的统计信息。information_schema_stats_expiry
会话变量定义缓存的统计信息过期之前的时间段。默认值为 86400 秒(24 小时),但最长可以延长至一年。要随时更新给定表的缓存值,请使用
ANALYZE TABLE
。要始终直接从存储引擎中检索最新的统计信息并绕过缓存值,请将
information_schema_stats_expiry
设置为0
。在以下情况下,查询统计信息列不会在
mysql.index_stats
和mysql.table_stats
字典表中存储或更新统计信息:当缓存的统计信息尚未过期时。
当
information_schema_stats_expiry
设置为 0 时。当服务器处于
read_only
、super_read_only
、transaction_read_only
或innodb_read_only
模式时。当查询还获取 Performance Schema 数据时。
在确定事务是否提交之前,可能会在多语句事务期间更新统计信息缓存。 因此,缓存可能包含与已知提交状态不符的信息。 这可能在
autocommit=0
或START TRANSACTION
之后发生。information_schema_stats_expiry
是一个会话变量,每个客户端会话都可以定义自己的过期值。 从存储引擎检索并由一个会话缓存的统计信息可供其他会话使用。有关信息,请参阅第 10.2.3 节“优化 INFORMATION_SCHEMA 查询”。
-
如果指定,此变量将命名一个文件,该文件包含要在启动过程中读取和执行的 SQL 语句。 此文件中语句的可接受格式支持以下结构
delimiter ;
,将语句分隔符设置为;
字符。delimiter $$
,将语句分隔符设置为$$
字符序列。同一行上的多个语句,由当前分隔符分隔。
多行语句。
从
#
字符到行尾的注释。从
--
序列到行尾的注释。从
/*
序列到以下*/
序列的 C 样式注释,包括多行注释。用单引号 (
'
) 或双引号 ("
) 字符括起来的多行字符串字面量。
如果使用
--initialize
或--initialize-insecure
选项启动服务器,它将以引导模式运行,并且某些功能不可用,这限制了文件中允许的语句。 这些语句包括与帐户管理相关的语句(例如CREATE USER
或GRANT
)、复制和全局事务标识符。 请参阅第 19.1.3 节“使用全局事务标识符进行复制”。服务器启动期间创建的线程用于执行创建数据字典、运行升级过程和创建系统表等任务。 为了确保稳定和可预测的环境,这些线程使用服务器内置的某些系统变量的默认值执行,例如
sql_mode
、character_set_server
、collation_server
、completion_type
、explicit_defaults_for_timestamp
和default_table_encryption
。这些线程还用于在启动服务器时执行使用
init_file
指定的任何文件中的语句,因此此类语句使用服务器为这些系统变量内置的默认值执行。 innodb_
xxx
InnoDB
系统变量列在第 17.14 节“InnoDB 启动选项和系统变量”中。 这些变量控制InnoDB
表的存储、内存使用和 I/O 模式的许多方面,并且在InnoDB
作为默认存储引擎的情况下尤为重要。在插入
AUTO_INCREMENT
值时,以下INSERT
或ALTER TABLE
语句要使用的值。 这主要用于二进制日志。-
命令行格式 --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_ADMIN
或SYSTEM_VARIABLES_ADMIN
权限。-
命令行格式 --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[={OFF|ON}]
系统变量 keep_files_on_create
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
如果使用没有
DATA DIRECTORY
选项创建MyISAM
表,则会在数据库目录中创建.MYD
文件。 默认情况下,如果在这种情况下MyISAM
找到现有的.MYD
文件,它将覆盖它。 对于没有INDEX DIRECTORY
选项创建的表,.MYI
文件也是如此。 要抑制此行为,请将keep_files_on_create
变量设置为ON
(1),在这种情况下,MyISAM
不会覆盖现有文件,而是返回错误。 默认值为OFF
(0)。如果使用
DATA DIRECTORY
或INDEX DIRECTORY
选项创建MyISAM
表,并且找到现有的.MYD
或.MYI
文件,则 MyISAM 始终返回错误。 它不会覆盖指定目录中的文件。 -
命令行格式 --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_requests
、Key_reads
、Key_write_requests
和Key_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 的大小限制分别适用于每个缓存,而不是作为一个组。请参阅 第 10.10.2 节“MyISAM 键缓存”。 -
命令行格式 --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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1024
最小值 512
最大值 16384
单位 字节 块大小 512
键缓存中块的大小(以字节为单位)。默认值为 1024。请参阅 第 10.10.2 节“MyISAM 键缓存”。
-
命令行格式 --key-cache-division-limit=#
系统变量 key_cache_division_limit
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 100
最小值 1
最大值 100
键缓存缓冲区列表的热子列表和暖子列表之间的分界点。该值是用于暖子列表的缓冲区列表的百分比。允许的值范围为 1 到 100。默认值为 100。请参阅 第 10.10.2 节“MyISAM 键缓存”。
-
系统变量 large_files_support
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 mysqld 是否使用大型文件支持选项编译。
-
命令行格式 --large-pages[={OFF|ON}]
系统变量 large_pages
作用域 全局 动态 否 SET_VAR
提示适用否 特定于平台 Linux 类型 布尔值 默认值 OFF
是否启用了大页面支持(通过
--large-pages
选项)。请参阅 第 10.12.3.3 节“启用大页面支持”。 -
系统变量 large_page_size
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 65535
单位 字节 如果启用了大页面支持,则会显示内存页面的大小。仅 Linux 支持大型内存页面;在其他平台上,此变量的值始终为 0。请参阅 第 10.12.3.3 节“启用大页面支持”。
要从
LAST_INSERT_ID()
返回的值。当您在更新表的语句中使用LAST_INSERT_ID()
时,此值将存储在二进制日志中。设置此变量不会更新mysql_insert_id()
C API 函数返回的值。-
命令行格式 --lc-messages=name
系统变量 lc_messages
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 en_US
用于错误消息的区域设置。默认值为
en_US
。服务器会将参数转换为语言名称,并将其与lc_messages_dir
的值组合起来,以生成错误消息文件的位置。请参阅 第 12.12 节“设置错误消息语言”。 -
命令行格式 --lc-messages-dir=dir_name
系统变量 lc_messages_dir
作用域 全局 动态 否 SET_VAR
提示适用否 类型 目录名 错误消息所在的目录。服务器将该值与
lc_messages
的值一起使用,以生成错误消息文件的位置。请参阅 第 12.12 节“设置错误消息语言”。 -
命令行格式 --lc-time-names=value
系统变量 lc_time_names
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 此变量指定用于控制显示星期和月份名称及缩写的语言的区域设置。此变量会影响
DATE_FORMAT()
、DAYNAME()
和MONTHNAME()
函数的输出。区域设置名称是 POSIX 样式的值,例如'ja_JP'
或'pt_BR'
。默认值为'en_US'
,无论您的系统区域设置如何。有关更多信息,请参阅 第 12.16 节“MySQL 服务器区域设置支持”。 -
服务器具有的许可证类型。
-
命令行格式 --local-infile[={OFF|ON}]
系统变量 local_infile
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
此变量控制
LOAD DATA
语句的服务器端LOCAL
功能。根据local_infile
设置,服务器会拒绝或允许在客户端启用了LOCAL
的客户端进行本地数据加载。要明确导致服务器拒绝或允许
LOAD DATA LOCAL
语句(无论客户端程序和库是在构建时还是运行时配置的),请分别在禁用或启用local_infile
的情况下启动 mysqld。也可以在运行时设置local_infile
。有关更多信息,请参阅 第 8.1.6 节“LOAD DATA LOCAL 的安全注意事项”。 -
命令行格式 --lock-wait-timeout=#
系统变量 lock_wait_timeout
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 31536000
最小值 1
最大值 31536000
单位 秒 此变量指定尝试获取元数据锁的超时时间(以秒为单位)。允许的值范围为 1 到 31536000(1 年)。默认值为 31536000。
此超时时间适用于使用元数据锁的所有语句。这些语句包括对表、视图、存储过程和存储函数的 DML 和 DDL 操作,以及
LOCK TABLES
、FLUSH TABLES WITH READ LOCK
和HANDLER
语句。此超时时间不适用于对
mysql
数据库中的系统表的隐式访问,例如由GRANT
或REVOKE
语句修改的授权表或表日志记录语句。该超时时间确实适用于直接访问的系统表,例如使用SELECT
或UPDATE
。超时值分别适用于每次元数据锁尝试。一个给定的语句可能需要多个锁,因此该语句可能会阻塞超过
lock_wait_timeout
值的时间,然后才会报告超时错误。发生锁超时时,将报告ER_LOCK_WAIT_TIMEOUT
。lock_wait_timeout
还定义了LOCK INSTANCE FOR BACKUP
语句在放弃之前等待锁的时间。 -
系统变量 locked_in_memory
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
-
默认错误日志目标。如果目标是控制台,则值为
stderr
。否则,目标是一个文件,log_error
值为文件名。请参阅 第 7.4.2 节“错误日志”。 -
命令行格式 --log-error-services=值
系统变量 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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 空字符串
log_error_suppression_list
系统变量适用于发送到错误日志的事件,并指定当事件以WARNING
或INFORMATION
优先级发生时要抑制哪些事件。例如,如果特定类型的警告被认为是错误日志中不需要的“噪音”,因为它经常发生但不重要,则可以抑制它。此变量会影响由默认启用的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 9.0 错误消息参考。
log_error_suppression_list
的效果与log_error_verbosity
的效果相结合。有关其他信息,请参阅 第 7.4.2.5 节“基于优先级的错误日志过滤 (log_filter_internal)”。 -
命令行格式 --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
无效。发送到错误日志的事件的优先级为
ERROR
、WARNING
或INFORMATION
。log_error_verbosity
根据允许写入日志的消息的优先级来控制详细程度,如下表所示。log_error_verbosity 值 允许的消息优先级 1 错误
2 ERROR
、WARNING
3 ERROR
、WARNING
、INFORMATION
还有一个
SYSTEM
优先级。有关非错误情况的系统消息会打印到错误日志中,而与log_error_verbosity
值无关。这些消息包括启动和关闭消息,以及对设置的一些重大更改。log_error_verbosity
的效果与log_error_suppression_list
的效果相结合。有关其他信息,请参阅 第 7.4.2.5 节“基于优先级的错误日志过滤 (log_filter_internal)”。 -
命令行格式 --log-output=名称
系统变量 log_output
作用域 全局 动态 是 SET_VAR
提示适用否 类型 设置 默认值 文件
有效值 表格
文件
无
常规查询日志和慢查询日志输出的目标。该值是一个列表,其中包含一个或多个从
TABLE
、FILE
和NONE
中选择的逗号分隔词。TABLE
选择记录到mysql
系统模式中的general_log
和slow_log
表。FILE
选择记录到日志文件。NONE
禁用日志记录。如果值中存在NONE
,则它优先于存在的任何其他词。TABLE
和FILE
都可以给出以选择两个日志输出目标。此变量选择日志输出目标,但不启用日志输出。为此,请启用
general_log
和slow_query_log
系统变量。对于FILE
日志记录,general_log_file
和slow_query_log_file
系统变量确定日志文件位置。有关更多信息,请参阅 第 7.4.1 节“选择常规查询日志和慢查询日志输出目标”。 -
命令行格式 --log-queries-not-using-indexes[={OFF|ON}]
系统变量 log_queries_not_using_indexes
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
如果在启用慢查询日志的情况下启用此变量,则会记录预期检索所有行的查询。请参阅 第 7.4.5 节“慢查询日志”。此选项不一定意味着不使用索引。例如,使用完整索引扫描的查询会使用索引,但会被记录下来,因为索引不会限制行数。
-
log_raw
系统变量最初设置为--log-raw
选项的值。有关更多信息,请参阅该选项的说明。系统变量也可以在运行时设置,以更改密码屏蔽行为。 -
命令行格式 --log-slow-admin-statements[={OFF|ON}]
系统变量 log_slow_admin_statements
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
在写入慢查询日志的语句中包含慢速管理语句。管理语句包括
ALTER TABLE
、ANALYZE TABLE
、CHECK TABLE
、CREATE INDEX
、DROP INDEX
、OPTIMIZE TABLE
和REPAIR TABLE
。 -
命令行格式 --log-slow-extra[={OFF|ON}]
系统变量 log_slow_extra
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
如果启用了慢查询日志并且输出目标包含
FILE
,则服务器会将其他字段写入日志文件行,以提供有关慢速语句的信息。请参阅 第 7.4.5 节“慢查询日志”。TABLE
输出不受影响。 -
命令行格式 --log-timestamps=#
系统变量 log_timestamps
作用域 全局 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 UTC
有效值 UTC
系统
此变量控制写入错误日志的消息中以及写入文件的常规查询日志和慢查询日志消息中的时间戳的时区。它不会影响写入表(
mysql.general_log
、mysql.slow_log
)的常规查询日志和慢查询日志消息的时区。从这些表中检索的行可以使用CONVERT_TZ()
或通过设置会话time_zone
系统变量从本地系统时区转换为任何所需的时区。允许的
log_timestamps
值为UTC
(默认值)和SYSTEM
(本地系统时区)。时间戳使用 ISO 8601 / RFC 3339 格式编写:
加上尾值YYYY-MM-DD
Thh:mm:ss.uuuuuu
Z
(表示祖鲁时间 (UTC))或±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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 数值 默认值 10
最小值 0
最大值 31536000
单位 秒 如果查询花费的时间超过此秒数,服务器将增加
Slow_queries
状态变量的值。如果启用了慢查询日志,则该查询将记录到慢查询日志文件中。此值以实时测量,而不是 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[={OFF|ON}]
系统变量 low_priority_updates
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
如果设置为
1
,则所有INSERT
、UPDATE
、DELETE
和LOCK TABLE WRITE
语句将等待,直到受影响的表上没有挂起的SELECT
或LOCK TABLE READ
。可以使用{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ...
来降低仅一个查询的优先级,从而获得相同的效果。此变量仅影响仅使用表级锁定的存储引擎(例如MyISAM
、MEMORY
和MERGE
)。请参阅 第 10.11.2 节“表锁定问题”。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
系统变量 lower_case_file_system
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 此变量描述数据目录所在文件系统上文件名的区分大小写。
OFF
表示文件名区分大小写,ON
表示文件名不区分大小写。此变量为只读变量,因为它反映文件系统属性,并且设置它对文件系统没有任何影响。 -
命令行格式 --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。这是一种不受支持的组合,可能会在以错误的tbl_name
大小写运行INSERT INTO ... SELECT ... FROM
操作时导致挂起状态。使用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=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
值是一个字符串,因此用户名和主机名(如果加引号)必须以允许在加引号的字符串中加引号的方式编写。无法使用
REVOKE
撤消mandatory_roles
值中命名的角色,也无法使用DROP ROLE
或DROP USER
删除它们。为了防止会话默认情况下成为系统会话,具有
SYSTEM_USER
权限的角色不能列在mandatory_roles
系统变量的值中如果在启动时为
mandatory_roles
分配了具有SYSTEM_USER
权限的角色,则服务器会将一条消息写入错误日志并退出。如果在运行时为
mandatory_roles
分配了具有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
作用域 全局,会话 动态 是 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,但各个客户端程序可能会覆盖此值。例如,mysql 和 mysqldump 的默认值分别为 16MB 和 24MB。它们还允许您通过在命令行或选项文件中设置max_allowed_packet
来更改客户端值。此变量的会话值为只读。客户端最多可以接收与会话值相同的字节数。但是,服务器发送到客户端的字节数不超过当前全局
max_allowed_packet
值。(如果在客户端连接后更改了全局值,则全局值可能小于会话值。) -
命令行格式 --max-connect-errors=#
系统变量 max_connect_errors
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 100
最小值 1
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
在来自主机的
max_connect_errors
个连续连接请求在没有成功连接的情况下中断后,服务器将阻止该主机进行进一步连接。如果在先前连接中断后的少于max_connect_errors
次尝试内成功建立了来自主机的连接,则该主机的错误计数将清除为零。要解除对被阻止主机的阻止,请刷新主机缓存;请参阅 刷新主机缓存。 -
命令行格式 --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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 20
最小值 0
最大值 16384
此系统变量已被弃用(因为不支持
DELAYED
插入)并将在未来的 MySQL 版本中删除。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
命令行格式 --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
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 1024
最小值 0
最大值 65535
要存储以供
SHOW ERRORS
和SHOW WARNINGS
语句显示的错误、警告和信息消息的最大数量。这与诊断区域中的条件区域数量相同,因此也是GET DIAGNOSTICS
可以检查的条件数量。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
命令行格式 --max-execution-time=#
系统变量 max_execution_time
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 0
最小值 0
最大值 4294967295
单位 毫秒 SELECT
语句的执行超时(以毫秒为单位)。如果值为 0,则不启用超时。max_execution_time
的应用方式如下全局
max_execution_time
值为新连接的会话值提供默认值。会话值适用于会话中执行的SELECT
执行,这些执行不包含MAX_EXECUTION_TIME(
优化器提示或N
)N
为 0。max_execution_time
适用于只读SELECT
语句。非只读语句是那些调用存储函数并在副作用中修改数据的语句。对于存储程序中的
SELECT
语句,max_execution_time
将被忽略。
-
命令行格式 --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 TABLE
或TRUNCATE TABLE
更改该表。服务器重启还会将现有MEMORY
表的最大大小设置为全局max_heap_table_size
值。此变量还与
tmp_table_size
结合使用,以限制内部内存表的的大小。请参阅 第 10.4.4 节,“MySQL 中的内部临时表使用”。max_heap_table_size
不会被复制。有关更多信息,请参阅 第 19.5.1.22 节,“复制和 MEMORY 表” 和 第 19.5.1.40 节,“复制和变量”。 -
已弃用 是 系统变量 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
作用域 全局,会话 动态 是 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
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 4096
最小值 4
最大值 8388608
单位 字节 此变量已弃用,在 MySQL 9.0 中无效。
-
命令行格式 --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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 16382
最小值 0
最大值 4194304
此变量限制服务器中准备好的语句的总数。它可以在存在潜在拒绝服务攻击的环境中使用,这些攻击基于通过准备大量语句来耗尽服务器内存。如果该值设置得低于当前准备好的语句的数量,则现有语句不会受到影响并且可以使用,但是直到当前数量降至限制以下之前,都不能准备新的语句。将该值设置为 0 将禁用预处理语句。
-
命令行格式 --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
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 1024
最小值 4
最大值 8388608
单位 字节 用于对使用
PAD SPACE
校对规则的字符串值进行排序时使用的字节数。服务器仅使用任何此类值的前max_sort_length
个字节,并忽略其余字节。因此,对于GROUP BY
、ORDER BY
和DISTINCT
操作,仅在前max_sort_length
个字节之后不同的此类值将比较为相等。(此行为不同于先前版本的 MySQL,在先前版本中,此设置应用于比较中使用的所有值。)增加
max_sort_length
的值可能还需要增加sort_buffer_size
的值。有关详细信息,请参阅 第 10.2.1.16 节 “ORDER BY 优化” -
命令行格式 --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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 4294967295
允许任何给定 MySQL 用户帐户同时连接的最大数量。值为 0(默认值)表示 “无限制。”
此变量具有一个全局值,可以在服务器启动时或运行时设置。它还具有一个只读会话值,该值指示适用于与当前会话关联的帐户的有效并发连接限制。会话值按如下方式初始化
如果用户帐户具有非零的
MAX_USER_CONNECTIONS
资源限制,则会话max_user_connections
值将设置为该限制。否则,会话
max_user_connections
值将设置为全局值。
帐户资源限制是使用
CREATE USER
或ALTER USER
语句指定的。请参阅 第 8.2.21 节 “设置帐户资源限制”。 -
命令行格式 --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=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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
检查的行数少于此数字的查询不会记录到慢查询日志中。
设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
命令行格式 --mle.memory-max=value
系统变量 mle.memory_max
作用域 全局 动态 是 SET_VAR
提示适用否 特定于平台 Linux 类型 整数 默认值 1300M
最小值 320M
最大值 64G
单位 字节 确定要分配给 MLE 组件的最大内存量。此变量是动态的,但只能在组件处于非活动状态时设置;您可以通过检查
Mle_status
系统状态变量的值来确定是否属于这种情况。增加此变量的值时,您应该记住,您必须为 MySQL 服务器的其他用途(例如缓冲池、连接内存、连接缓冲区等)留出足够的内存。此外,还必须有足够的内存才能使系统进程正常运行。
重要将此值设置为大于系统上可用内存量会导致未定义的行为。
有关 MLE 组件内存使用情况的更多信息,请参阅 第 7.5.6.3 节 “MLE 组件内存和线程使用情况”。
-
命令行格式 --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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 (Windows) 2146435072
默认值(其他,64 位平台) 9223372036853727232
默认值(其他,32 位平台) 2147483648
最小值 0
最大值(Windows) 2146435072
最大值(其他,64 位平台) 9223372036853727232
最大值(其他,32 位平台) 2147483648
单位 字节 在重新创建
MyISAM
索引(在REPAIR TABLE
、ALTER TABLE
或LOAD DATA
期间)时,允许 MySQL 使用的临时文件的最大大小。如果文件大小将大于此值,则将使用键缓存来创建索引,速度会比较慢。该值以字节为单位。如果
MyISAM
索引文件超过此大小并且磁盘空间可用,则增加该值可能会有助于提高性能。该空间在包含原始索引文件所在目录的文件系统中必须可用。 -
命令行格式 --myisam-mmap-size=#
系统变量 myisam_mmap_size
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值(64 位平台) 18446744073709551615
默认值(32 位平台) 4294967295
最小值 7
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
单位 字节 用于内存映射压缩
MyISAM
文件的最大内存量。如果使用许多压缩的MyISAM
表,则可以减小该值以降低出现内存交换问题的可能性。 -
命令行格式 --myisam-recover-options[=list]
系统变量 myisam_recover_options
作用域 全局 动态 否 SET_VAR
提示适用否 类型 枚举 默认值 OFF
有效值 OFF
DEFAULT
BACKUP
FORCE
QUICK
设置
MyISAM
存储引擎恢复模式。变量值是OFF
、DEFAULT
、BACKUP
、FORCE
或QUICK
值的任意组合。如果指定多个值,请用逗号分隔。在服务器启动时不带任何值地指定该变量与指定DEFAULT
相同,而使用显式值""
指定该变量将禁用恢复(与值OFF
相同)。如果启用了恢复,则每次 mysqld 打开MyISAM
表时,它都会检查该表是否被标记为已崩溃或未正确关闭。(仅当您在禁用外部锁定的情况下运行时,最后一个选项才有效。)如果是这种情况,mysqld 将对该表运行检查。如果该表已损坏,mysqld 将尝试修复它。以下选项会影响修复的工作方式。
选项 描述 OFF
不进行恢复。 DEFAULT
不进行备份、强制或快速检查的恢复。 BACKUP
如果在恢复期间修改了数据文件,请将
文件的备份保存为tbl_name
.MYD
。tbl_name-datetime
.BAKFORCE
即使我们可能会从 .MYD
文件中丢失多行,也要运行恢复。QUICK
如果没有删除块,请不要检查表中的行。 在服务器自动修复表之前,它会将有关修复的说明写入错误日志。如果您希望能够在无需用户干预的情况下从大多数问题中恢复,则应使用选项
BACKUP,FORCE
。这将强制修复表,即使会删除某些行,但它会将旧数据文件保留为备份,以便您以后可以检查发生了什么。 -
命令行格式 --myisam-sort-buffer-size=#
系统变量 myisam_sort_buffer_size
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 8388608
最小值 4096
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
单位 字节 在
REPAIR TABLE
期间或使用CREATE INDEX
或ALTER TABLE
创建索引时对MyISAM
索引进行排序时分配的缓冲区的大小。 -
命令行格式 --myisam-stats-method=name
系统变量 myisam_stats_method
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 nulls_unequal
有效值 nulls_unequal
nulls_equal
nulls_ignored
服务器在收集有关
MyISAM
表的索引值分布的统计信息时如何处理NULL
值。此变量具有三个可能的值:nulls_equal
、nulls_unequal
和nulls_ignored
。对于nulls_equal
,所有NULL
索引值都被视为相等,并形成一个大小等于NULL
值数量的值组。对于nulls_unequal
,NULL
值被视为不相等,并且每个NULL
形成一个大小为 1 的不同值组。对于nulls_ignored
,NULL
值将被忽略。用于生成表统计信息的方法会影响优化器如何选择用于查询执行的索引,如 第 10.3.8 节 “InnoDB 和 MyISAM 索引统计信息收集” 中所述。
-
命令行格式 --myisam-use-mmap[={OFF|ON}]
系统变量 myisam_use_mmap
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
使用内存映射来读取和写入
MyISAM
表。 -
命令行格式 --named-pipe[={OFF|ON}]
系统变量 named_pipe
作用域 全局 动态 否 SET_VAR
提示适用否 特定于平台 Windows 类型 布尔值 默认值 OFF
(仅限 Windows。)指示服务器是否支持通过命名管道进行连接。
-
命令行格式 --named-pipe-full-access-group=value
系统变量 named_pipe_full_access_group
作用域 全局 动态 否 SET_VAR
提示适用否 特定于平台 Windows 类型 字符串 默认值 空字符串
有效值 空字符串
有效的 Windows 本地组名
*everyone*
(仅限 Windows。)当启用
named_pipe
系统变量以支持命名管道连接时,授予客户端对 MySQL 服务器创建的命名管道的访问控制将设置为成功通信所需的最低限度。某些 MySQL 客户端软件无需任何额外配置即可打开命名管道连接;但是,其他客户端软件可能仍需要完全访问权限才能打开命名管道连接。此变量设置 Windows 本地组的名称,MySQL 服务器会授予其成员足够的访问权限以使用命名管道客户端。默认值为一个空字符串,这意味着不会授予任何 Windows 用户对命名管道的完全访问权限。
可以在 Windows 中创建新的 Windows 本地组名(例如,
mysql_access_client_users
),然后在绝对需要访问权限时使用它替换默认值。在这种情况下,请尽可能限制该组的成员数量,并在升级客户端软件后从该组中删除用户。尝试使用受影响的命名管道客户端打开与 MySQL 的连接的非组成员将被拒绝访问,直到 Windows 管理员将该用户添加到该组。新添加的用户必须注销并重新登录才能加入该组(Windows 要求)。将值设置为
'*everyone*'
提供了一种与语言无关的方式来引用 Windows 上的“所有人”组。默认情况下,“所有人”组是不安全的。 -
命令行格式 --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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 30
最小值 1
最大值 31536000
单位 秒 在中止读取之前,等待从连接接收更多数据的秒数。当服务器从客户端读取数据时,
net_read_timeout
是控制何时中止的超时值。当服务器向客户端写入数据时,net_write_timeout
是控制何时中止的超时值。另请参阅replica_net_timeout
。 -
命令行格式 --net-retry-count=#
系统变量 net_retry_count
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 10
最小值 1
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
如果通信端口上的读取或写入操作被中断,则在放弃之前重试此次数。在 FreeBSD 上,此值应该设置得相当高,因为内部中断会发送到所有线程。
-
命令行格式 --net-write-timeout=#
系统变量 net_write_timeout
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 60
最小值 1
最大值 31536000
单位 秒 在中止写入之前,等待将块写入连接的秒数。另请参阅
net_read_timeout
。 -
命令行格式 --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[={OFF|ON}]
系统变量 offline_mode
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
在离线模式下,MySQL 实例会断开客户端用户的连接(除非他们具有相关权限),并且不允许他们启动新连接。被拒绝访问的客户端会收到错误消息。确切的错误和错误消息确定如下
服务器尝试获取附加到
offline_mode
的名为reason
的属性的值;这等效于类似于以下查询的结果SELECT ATTR_VALUE INTO @sreason FROM performance_schema.global_variable_attributes WHERE VARIABLE_NAME='offline_mode' AND ATTR_NAME='reason';
如果
@sreason
不为NULL
,则服务器会尝试获取上次设置offline_mode
系统变量的时间;这等效于以下查询SELECT SET_TIME INTO @stime FROM performance.schema_variables_info WHERE VARIABLE_NAME='offline_mode';
如果
@stime
不为NULL
,则服务器会引发ER_SERVER_OFFLINE_MODE_REASON
,并打印以下错误消息The server is currently in offline mode since @stime, reason: @sreason
如果
@stime
为NULL
,则服务器会引发ER_SERVER_OFFLINE_MODE
并打印消息 服务器当前处于离线模式。
如果
@sreason
为空,则服务器会获取上次设置offline_mode
的时间以及设置它的用户的名称;这等效于此处显示的查询SELECT SET_TIME, SET_USER INTO @stime, @suser FROM performance.schema_variables_info WHERE VARIABLE_NAME='offline_mode';
如果
@stime
和@suser
都不为NULL
,则服务器会引发ER_SERVER_OFFLINE_MODE_USER
并打印此处显示的错误消息The server is currently in offline mode since @stime, set by user @suser
如果
@suser
和@stime
中的任何一个或两者都为NULL
,则服务器会引发ER_SERVER_OFFLINE_MODE
并打印之前针对此错误显示的文本。
有关此处使用的 Performance Schema 表的更多信息,请参阅 第 29.12.14.1 节,“Performance Schema global_variable_attributes 表”,以及 第 29.12.14.3 节,“Performance Schema variables_info 表”。
要将服务器置于离线模式,请将
offline_mode
系统变量的值从OFF
更改为ON
。要恢复正常操作,请将offline_mode
从ON
更改为OFF
。要控制离线模式,管理员帐户必须具有SYSTEM_VARIABLES_ADMIN
权限和CONNECTION_ADMIN
权限(或已弃用的SUPER
权限,它涵盖了这两种权限)。需要CONNECTION_ADMIN
,以防止意外锁定。离线模式具有以下特征
没有
CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)的已连接客户端用户将在下次请求时断开连接,并显示相应的错误。断开连接包括终止正在运行的语句并释放锁。此类客户端也不能启动新连接,并会收到相应的错误。具有
CONNECTION_ADMIN
或SUPER
权限的已连接客户端用户不会断开连接,并且可以启动新连接来管理服务器。如果将服务器置于离线模式的用户没有
SYSTEM_USER
权限,则具有SYSTEM_USER
权限的已连接客户端用户也不会断开连接。但是,这些用户在服务器处于离线模式时无法启动与服务器的新连接,除非他们还具有CONNECTION_ADMIN
或SUPER
权限。只有他们的现有连接无法终止,因为需要SYSTEM_USER
权限才能终止正在使用SYSTEM_USER
权限执行的会话或语句。允许复制线程继续将数据应用于服务器。
-
命令行格式 --old-alter-table[={OFF|ON}]
系统变量 old_alter_table
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
启用此变量后,服务器不会使用优化的方法来处理
ALTER TABLE
操作。它会恢复为使用临时表,复制数据,然后将临时表重命名为原始表,就像 MySQL 5.0 及更早版本中使用的那样。有关ALTER TABLE
操作的更多信息,请参阅 第 15.1.9 节,“ALTER TABLE 语句”。在
old_alter_table=ON
的情况下,ALTER TABLE ... DROP PARTITION
会重建分区表,并尝试将数据从已删除的分区移动到另一个具有兼容PARTITION ... VALUES
定义的分区。无法移动到其他分区的数据将被删除。在早期版本中,在old_alter_table=ON
的情况下,ALTER TABLE ... DROP PARTITION
会删除存储在分区中的数据并删除该分区。 -
命令行格式 --open-files-limit=#
系统变量 open_files_limit
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 5000,可能进行调整
最小值 0
最大值 平台依赖
操作系统可供 mysqld 使用的文件描述符数量
在启动时,mysqld 会使用
setrlimit()
预留描述符,使用通过直接设置此变量或使用--open-files-limit
选项传递给 mysqld_safe 的值。如果 mysqld 产生错误打开文件过多
,请尝试增加open_files_limit
的值。在内部,此变量的最大值为最大无符号整数值,但实际最大值取决于平台。在运行时,
open_files_limit
的值表示操作系统实际允许 mysqld 使用的文件描述符数量,这可能与启动时请求的值不同。如果在启动期间无法分配请求的文件描述符数量,mysqld 会将警告写入错误日志。
有效的
open_files_limit
值基于系统启动时指定的值(如果有)以及max_connections
和table_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
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 1
最小值 0
最大值 1
控制在查询优化期间应用的启发式算法,以便从优化器搜索空间中删除不太可行的部分计划。值为 0 将禁用启发式算法,以便优化器执行穷举搜索。值为 1 会导致优化器根据中间计划检索的行数来修剪计划。
-
命令行格式 --optimizer-search-depth=#
系统变量 optimizer_search_depth
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 62
最小值 0
最大值 62
查询优化器执行的搜索的最大深度。大于查询中关系数的值会产生更好的查询计划,但生成查询的执行计划需要更长时间。小于查询中关系数的值会更快地返回执行计划,但生成的计划可能远非最佳计划。如果设置为 0,系统会自动选择一个合理的值。
-
命令行格式 --optimizer-switch=值
系统变量 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}
optimizer_switch
系统变量允许控制优化器行为。此变量的值是一组标志,每个标志的值为on
或off
,表示是否启用或禁用相应的优化器行为。此变量具有全局值和会话值,可以在运行时更改。全局默认值可以在服务器启动时设置。要查看当前的优化器标志集,请选择变量值
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)
有关此变量的语法及其控制的优化器行为的更多信息,请参阅第 10.9.2 节“可切换优化”。
-
命令行格式 --optimizer-trace=值
系统变量 optimizer_trace
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 此变量控制优化器跟踪。有关详细信息,请参阅MySQL 内部结构:跟踪优化器。
-
命令行格式 --optimizer-trace-features=值
系统变量 optimizer_trace_features
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 字符串 此变量启用或禁用选定的优化器跟踪功能。有关详细信息,请参阅MySQL 内部结构:跟踪优化器。
-
命令行格式 --optimizer-trace-limit=#
系统变量 optimizer_trace_limit
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1
最小值 0
最大值 2147483647
要显示的优化器跟踪的最大数量。有关详细信息,请参阅MySQL 内部结构:跟踪优化器。
-
命令行格式 --optimizer-trace-max-mem-size=#
系统变量 optimizer_trace_max_mem_size
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 1048576
最小值 0
最大值 4294967295
单位 字节 存储的优化器跟踪的最大累积大小。有关详细信息,请参阅MySQL 内部结构:跟踪优化器。
-
命令行格式 --optimizer-trace-offset=#
系统变量 optimizer_trace_offset
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 -1
最小值 -2147483647
最大值 2147483647
要显示的优化器跟踪的偏移量。有关详细信息,请参阅MySQL 内部结构:跟踪优化器。
performance_schema_
xxx
Performance Schema 系统变量列在第 29.15 节“Performance Schema 系统变量”中。这些变量可用于配置 Performance Schema 操作。
-
命令行格式 --parser-max-mem-size=#
系统变量 parser_max_mem_size
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值(64 位平台) 18446744073709551615
默认值(32 位平台) 4294967295
最小值 10000000
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
单位 字节 解析器可用的最大内存量。默认值对可用内存没有限制。可以减小该值以防止因解析长或复杂的 SQL 语句而导致的内存不足情况。
-
命令行格式 --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
。对于在运行时尝试禁用
partial_revokes
,会发生错误,并且partial_revokes
值保持不变。
在这种情况下,要禁用
partial_revokes
,请先修改每个具有部分撤销权限的帐户,方法是重新授予权限或删除帐户。注意在权限分配中,启用
partial_revokes
会导致 MySQL 将数据库名称中出现的未转义的_
和%
SQL 通配符解释为文字字符,就像它们已被转义为\_
和\%
一样。由于这会更改 MySQL 解释权限的方式,因此,对于可能启用partial_revokes
的安装,建议避免在权限分配中使用未转义的通配符。此外,不建议在授权中使用
_
和%
作为通配符,并且您应该预料到在未来版本的 MySQL 中将删除对它们的支 持。有关更多信息,包括删除部分撤销的说明,请参阅第 8.2.12 节“使用部分撤销进行权限限制”。
-
命令行格式 --password-history=#
系统变量 password_history
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 4294967295
此变量根据所需的最小密码更改次数定义用于控制先前密码重用的全局策略。对于以前使用过的帐户密码,此变量指示在可以重用该密码之前必须进行的后续帐户密码更改次数。如果值为 0(默认值),则没有基于密码更改次数的重用限制。
对此变量的更改将立即应用于使用
PASSWORD HISTORY DEFAULT
选项定义的所有帐户。可以使用
CREATE USER
和ALTER USER
语句的PASSWORD HISTORY
选项根据需要为各个帐户覆盖全局更改次数密码重用策略。请参阅第 8.2.15 节“密码管理”。 -
命令行格式 --password-require-current[={OFF|ON}]
系统变量 password_require_current
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
此变量定义了用于控制尝试更改帐户密码是否必须指定要替换的当前密码的全局策略。
对此变量的更改将立即应用于使用
PASSWORD REQUIRE CURRENT DEFAULT
选项定义的所有帐户。可以使用
CREATE USER
和ALTER USER
语句的PASSWORD REQUIRE
选项根据需要为各个帐户覆盖全局验证要求策略。请参阅 第 8.2.15 节,“密码管理”。 -
命令行格式 --password-reuse-interval=#
系统变量 password_reuse_interval
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 4294967295
单位 天 此变量根据经过的时间定义控制先前密码重用的全局策略。对于先前使用过的帐户密码,此变量表示在可以重用该密码之前必须经过的天数。如果值为 0(默认值),则根据经过的时间没有重用限制。
对此变量的更改将立即应用于使用
PASSWORD REUSE INTERVAL DEFAULT
选项定义的所有帐户。可以使用
CREATE USER
和ALTER USER
语句的PASSWORD REUSE INTERVAL
选项根据需要为各个帐户覆盖全局时间経過密码重用策略。请参阅 第 8.2.15 节,“密码管理”。 -
命令行格式 --persisted-globals-load[={OFF|ON}]
系统变量 persisted_globals_load
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 默认值 ON
是否从数据目录中的
mysqld-auto.cnf
文件加载持久化的配置设置。服务器通常在启动时处理完所有其他选项文件后处理此文件(请参阅 第 6.2.2.2 节,“使用选项文件”)。禁用persisted_globals_load
会导致服务器启动序列跳过mysqld-auto.cnf
。要修改
mysqld-auto.cnf
的内容,请使用SET PERSIST
、SET PERSIST_ONLY
和RESET PERSIST
语句。请参阅 第 7.1.9.3 节,“持久化系统变量”。 persist_only_admin_x509_subject
命令行格式 --persist-only-admin-x509-subject=string
系统变量 persist_only_admin_x509_subject
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 默认值 空字符串
SET PERSIST
和SET 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
设置还意味着如果无法解密加密的系统变量值,则服务器不会启动。有关更多信息,请参阅 持久化敏感系统变量。
-
服务器在其写入进程 ID 的文件的路径名。除非给出绝对路径名来指定不同的目录,否则服务器会在数据目录中创建该文件。如果指定此变量,则必须指定一个值。如果不指定此变量,MySQL 将使用默认值
,其中host_name
.pidhost_name
是主机名。进程 ID 文件由其他程序(如 mysqld_safe)使用,用于确定服务器的进程 ID。在 Windows 上,此变量还会影响默认错误日志文件名。请参阅 第 7.4.2 节,“错误日志”。
-
命令行格式 --plugin-dir=dir_name
系统变量 plugin_dir
作用域 全局 动态 否 SET_VAR
提示适用否 类型 目录名 默认值 BASEDIR/lib/plugin
插件目录的路径名。
如果服务器可写插件目录,则用户可以使用
SELECT ... INTO DUMPFILE
将可执行代码写入目录中的文件。可以通过使plugin_dir
对服务器只读或将secure_file_priv
设置为可以安全进行SELECT
写入的目录来防止这种情况。 -
服务器在其上侦听 TCP/IP 连接的端口号。可以使用
--port
选项设置此变量。 -
命令行格式 --preload-buffer-size=#
系统变量 preload_buffer_size
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 32768
最小值 1024
最大值 1073741824
单位 字节 预加载索引时分配的缓冲区大小。
设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
命令行格式 --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
将此类哈希值显示为十六进制字符串,而不是常规字符串文字。即使启用了此变量,不包含不可打印字符的哈希值仍将显示为常规字符串文字。 如果设置为 0 或
OFF
(默认值),则禁用语句分析。如果设置为 1 或ON
,则启用语句分析,并且SHOW PROFILE
和SHOW PROFILES
语句提供对分析信息的访问。请参阅 第 15.7.7.32 节,“SHOW PROFILES 语句”。此变量已弃用;预计在未来的 MySQL 版本中会被移除。
如果启用了
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
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 10
最小值 0
最大值 4294967295
MySQL 服务器使用的客户端/服务器协议版本。
-
系统变量 proxy_user
作用域 会话 动态 否 SET_VAR
提示适用否 类型 字符串 如果当前客户端是另一个用户的代理,则此变量是代理用户帐户名。否则,此变量为
NULL
。请参见第 8.2.19 节,“代理用户”。 -
系统变量 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
的会话)如果为 true,并且处理会话已执行内部使用
BINLOG
语句,则 XA 事务会在事务的第一部分(直至XA PREPARE
)完成后立即从会话分离,以便任何具有XA_RECOVER_ADMIN
权限的会话都可以提交或回滚它们。如果为 false,则 XA 事务将保持附加到处理会话,直到该会话处于活动状态,在此期间,其他任何会话都无法提交该事务。仅当会话断开连接或服务器重新启动时,才会分离已准备好的事务。
pseudo_replica_mode
对original_commit_timestamp
复制延迟时间戳和original_server_version
系统变量有以下影响如果为 true,则假定未显式设置
original_commit_timestamp
或original_server_version
的事务源自另一个未知服务器,因此值 0(表示未知)将分配给时间戳和系统变量。如果为 false,则假定未显式设置
original_commit_timestamp
或original_server_version
的事务源自当前服务器,因此当前时间戳和当前服务器的版本将分别分配给时间戳和系统变量。
pseudo_replica_mode
对设置一个或多个不受支持(已删除或未知)SQL 模式的语句的处理有以下影响如果为 true,则服务器将忽略不受支持的模式并发出警告。
如果为 false,则服务器将使用
ER_UNSUPPORTED_SQL_MODE
拒绝该语句。
-
已弃用 是 系统变量 pseudo_slave_mode
作用域 会话 动态 是 SET_VAR
提示适用否 类型 布尔值 pseudo_replica_mode
的已弃用别名。 -
系统变量 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
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 8192
最小值 1024
最大值 4294966272
单位 字节 块大小 1024
为语句解析和执行期间创建的对象分配的内存块大小(以字节为单位)。如果您在内存碎片方面遇到问题,则增加此参数可能会有所帮助。
字节数的块大小为 1024。对于不是块大小的整数倍的值,MySQL 服务器会在存储系统变量的值之前将其向下舍入到下一个最接近的块大小的倍数。解析器允许使用的值最大为平台的最大无符号整数值(32 位系统为 4294967295 或 232−1,64 位系统为 18446744073709551615 或 264−1),但实际最大值要比块大小低。
-
命令行格式 --query-prealloc-size=#
已弃用 是 系统变量 query_prealloc_size
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 8192
最小值 8192
最大值(64 位平台) 18446744073709550592
最大值(32 位平台) 4294966272
单位 字节 块大小 1024
query_prealloc_size
已弃用,设置它不会产生任何效果;您应该会在未来版本的 MySQL 中移除它。 -
系统变量 rand_seed1
作用域 会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 不适用
最小值 0
最大值 4294967295
rand_seed1
和rand_seed2
变量仅作为会话变量存在,可以设置但不能读取。这些变量(但不是它们的值)显示在SHOW VARIABLES
的输出中。这些变量的目的是支持
RAND()
函数的复制。对于调用RAND()
的语句,源会将两个值传递给副本,并在副本中使用这些值来播种随机数生成器。副本使用这些值来设置会话变量rand_seed1
和rand_seed2
,以便副本上的RAND()
生成与源上相同的值。 请参见
rand_seed1
的说明。-
命令行格式 --range-alloc-block-size=#
系统变量 range_alloc_block_size
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 4096
最小值 4096
最大值(64 位平台) 18446744073709550592
最大值 4294966272
单位 字节 块大小 1024
执行范围优化时分配的块大小(以字节为单位)。
字节数的块大小为 1024。对于不是块大小的整数倍的值,MySQL 服务器会在存储系统变量的值之前将其向下舍入到下一个最接近的块大小的倍数。解析器允许使用的值最大为平台的最大无符号整数值(32 位系统为 4294967295 或 232−1,64 位系统为 18446744073709551615 或 264−1),但实际最大值要比块大小低。
-
命令行格式 --range-optimizer-max-mem-size=#
系统变量 range_optimizer_max_mem_size
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 8388608
最小值 0
最大值 18446744073709551615
单位 字节 范围优化器的内存消耗限制。值为 0 表示“无限制。”如果优化器考虑的执行计划使用范围访问方法,但优化器估计此方法所需的内存量将超过限制,则它将放弃该计划并考虑其他计划。有关更多信息,请参见限制范围优化的内存使用。
-
系统变量 rbr_exec_mode
作用域 会话 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 STRICT
有效值 STRICT
IDEMPOTENT
供 mysqlbinlog 内部使用。此变量在
IDEMPOTENT
模式和STRICT
模式之间切换服务器。IDEMPOTENT
模式会导致在 mysqlbinlog 生成的BINLOG
语句中禁止重复键和未找到键错误。当在导致与现有数据冲突的服务器上重放基于行的二进制日志时,此模式很有用。当您通过写入以下内容到输出来指定--idempotent
选项时,mysqlbinlog 会设置此模式SET SESSION RBR_EXEC_MODE=IDEMPOTENT;
-
命令行格式 --read-buffer-size=#
系统变量 read_buffer_size
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 131072
最小值 8192
最大值 2147479552
单位 字节 块大小 4096
对
MyISAM
表执行顺序扫描的每个线程都会为其扫描的每个表分配一个此大小(以字节为单位)的缓冲区。如果您执行许多顺序扫描,则可能需要增加此值,该值的默认值为 131072。此变量的值应为 4KB 的倍数。如果将其设置为不是 4KB 倍数的值,则在存储该值之前,MySQL 服务器会将其向下舍入到最接近的 4KB 倍数。对于除
InnoDB
之外的所有其他存储引擎,此选项还用于以下上下文用于在对
ORDER BY
的行进行排序时,将索引缓存在临时文件(而不是临时表)中。用于批量插入分区。
用于缓存嵌套查询的结果。
read_buffer_size
还以另一种特定于存储引擎的方式使用:确定MEMORY
表的内存块大小。select_into_buffer_size
用于SELECT INTO DUMPFILE
和SELECT INTO OUTFILE
语句的 I/O 缓存缓冲区。(在所有其他情况下,read_buffer_size
用于 I/O 缓存缓冲区大小。)有关不同操作期间内存使用的更多信息,请参见第 10.12.3.1 节,“MySQL 如何使用内存”。
-
如果启用了
read_only
系统变量,则服务器将不允许任何客户端更新,除非该更新来自拥有CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)的用户。默认情况下,此变量处于禁用状态。服务器还支持
super_read_only
系统变量(默认情况下禁用),该变量具有以下效果如果启用了
super_read_only
,则服务器将禁止客户端更新,即使是拥有CONNECTION_ADMIN
或SUPER
权限的用户也不例外。将
super_read_only
设置为ON
会隐式地强制将read_only
设置为ON
。将
read_only
设置为OFF
会隐式地强制将super_read_only
设置为OFF
。
当
read_only
启用且super_read_only
启用时,服务器仍然允许以下操作如果服务器是副本,则由复制线程执行更新。在复制设置中,在副本服务器上启用
read_only
非常有用,可以确保副本仅接受来自源服务器的更新,而不接受来自客户端的更新。写入系统表
mysql.gtid_executed
,该表存储当前二进制日志文件中不存在的已执行事务的 GTID。使用
ANALYZE TABLE
或OPTIMIZE TABLE
语句。只读模式的目的是防止更改表结构或内容。分析和优化不属于此类更改。这意味着,例如,可以使用 mysqlcheck--all-databases
--analyze
对只读副本执行一致性检查。使用
FLUSH STATUS
语句,这些语句始终写入二进制日志。对
TEMPORARY
表的操作。插入日志表(
mysql.general_log
和mysql.slow_log
);请参阅 第 7.4.1 节“选择通用查询日志和慢查询日志输出目标”。对 Performance Schema 表的操作,例如
UPDATE
或TRUNCATE 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
作用域 全局,会话 动态 是 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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 8000000
最小值 0
最大值 2147483647
单位 字节 用于由
REGEXP_LIKE()
和类似函数执行的正则表达式匹配操作的内部堆栈的最大可用内存(以字节为单位)(请参阅 第 14.8.2 节“正则表达式”)。 -
命令行格式 --regexp-time-limit=#
系统变量 regexp_time_limit
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 32
最小值 0
最大值 2147483647
由
REGEXP_LIKE()
和类似函数执行的正则表达式匹配操作的时间限制(请参阅 第 14.8.2 节“正则表达式”)。此限制表示匹配引擎执行的最大允许步数,因此仅间接影响执行时间。通常,它的数量级为毫秒。 -
系统变量 require_row_format
作用域 会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
此变量供复制和 mysqlbinlog 在服务器内部使用。它将会话中执行的 DML 事件限制为仅以基于行的二进制日志记录格式编码的事件,并且无法创建临时表。不遵守限制的查询将失败。
将此系统变量的会话值设置为
ON
不需要任何权限。将此系统变量的会话值设置为OFF
是受限操作,会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。 -
命令行格式 --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 TABLE
或ALTER TABLE
语句中使用非唯一键或部分键作为外键,并且您应该预计在未来版本的 MySQL 中将删除对此功能的支持。当restrict_fk_on_non_standard_key
为ON
时,尝试这样做将被拒绝,并显示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_key
为OFF
),无论副本上对此变量的任何设置如何,该语句在副本上都会成功。-
系统变量 resultset_metadata
作用域 会话 动态 是 SET_VAR
提示适用否 类型 枚举 默认值 FULL
有效值 FULL
无
对于元数据传输可选的连接,客户端设置
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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 256
最小值 256
最大值 524288
定义可保留在字典对象缓存中的已使用和未使用模式定义对象的数量限制。
仅当使用中的数量小于
schema_definition_cache
定义的容量时,未使用的模式定义对象才会保留在字典对象缓存中。设置为
0
表示模式定义对象仅在使用时才保留在字典对象缓存中。有关更多信息,请参见 第 16.4 节,“字典对象缓存”。
-
命令行格式 --secure-file-priv=目录名
系统变量 secure_file_priv
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 默认值 平台特定
有效值 空字符串
目录名
NULL
此变量用于限制数据导入和导出操作的影响,例如
LOAD DATA
和SELECT ... 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
空 DEB
、RPM
、SVR4
/var/lib/mysql-files
否则 CMAKE_INSTALL_PREFIX
值下的mysql-files
服务器会在启动时检查
secure_file_priv
的值,如果该值不安全,则会向错误日志写入警告。如果非NULL
值为空,或者该值是数据目录或其子目录,或者所有用户都可以访问该目录,则该值被视为不安全。如果secure_file_priv
设置为不存在的路径,则服务器会向错误日志写入错误消息并退出。 -
命令行格式 --select-into-buffer-size=#
系统变量 select_into_buffer_size
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 131072
最小值 8192
最大值 2147479552
单位 字节 块大小 4096
当使用
SELECT INTO OUTFILE
或SELECT INTO DUMPFILE
将数据转储到一个或多个文件中以进行备份创建、数据迁移或其他目的时,写入通常可以进行缓冲,然后触发大量写入 I/O 活动到磁盘或其他存储设备,并导致对延迟更敏感的其他查询停滞。您可以使用此变量来控制用于将数据写入存储设备的缓冲区的大小,以确定何时应进行缓冲区同步,从而防止发生上述写入停滞。select_into_buffer_size
会覆盖为read_buffer_size
设置的任何值。(select_into_buffer_size
和read_buffer_size
具有相同的默认值、最大值和最小值。)您还可以使用select_into_disk_sync_delay
设置一个超时时间,以便在每次同步发生后遵守该超时时间。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
命令行格式 --select-into-disk-sync={ON|OFF}
系统变量 select_into_disk_sync
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 OFF
有效值 OFF
ON
设置为
ON
时,将使用select_into_buffer_size
对长时间运行的SELECT INTO OUTFILE
或SELECT INTO DUMPFILE
语句对输出文件的写入启用缓冲区同步。 -
命令行格式 --select-into-disk-sync-delay=#
系统变量 select_into_disk_sync_delay
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 0
最小值 0
最大值 31536000
单位 毫秒 当通过
select_into_disk_sync
启用长时间运行的SELECT INTO OUTFILE
或SELECT INTO DUMPFILE
语句对输出文件的写入进行缓冲区同步时,此变量会设置同步后的可选延迟(以毫秒为单位)。0
(默认值)表示无延迟。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
命令行格式 --session-track-gtids=值
系统变量 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[={OFF|ON}]
系统变量 session_track_schema
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
控制服务器是否跟踪在当前会话中设置默认模式(数据库)的时间,并通知客户端使模式名称可用。
如果启用了模式名称跟踪器,则每次设置默认模式时都会发生名称通知,即使新模式名称与旧模式名称相同。
有关会话状态跟踪的更多信息,请参见 第 7.1.18 节,“服务器对客户端会话状态的跟踪”。
-
命令行格式 --session-track-state-change[={OFF|ON}]
系统变量 session_track_state_change
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
控制服务器是否跟踪当前会话状态的更改,并在状态发生更改时通知客户端。可以报告客户端会话状态的以下属性的更改:
默认模式(数据库)。
系统变量的会话特定值。
用户定义的变量。
临时表。
预处理语句。
如果启用了会话状态跟踪器,则每次涉及跟踪的会话属性的更改都会发生通知,即使新属性值与旧属性值相同。例如,将用户定义的变量设置为其当前值会导致通知。
session_track_state_change
变量仅控制何时发生更改的通知,而不控制更改的内容。例如,当设置默认模式或分配跟踪的会话系统变量时,会发生状态更改通知,但通知不包括模式名称或变量值。要接收模式名称或会话系统变量值的通知,请分别使用session_track_schema
或session_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_zone
、autocommit
、character_set_client
、character_set_results
和character_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=值
系统变量 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_isolation
和transaction_read_only
系统变量,才能正确确定会话默认值。(要跟踪这些变量,请在session_track_system_variables
系统变量的值中列出它们。)有关会话状态跟踪的更多信息,请参见 第 7.1.18 节,“服务器对客户端会话状态的跟踪”。
-
命令行格式 --set-operations-buffer-size=#
系统变量 set_operations_buffer_size
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 256K
最小值 16K
最大值 1 GB
设置使用哈希表的
INTERSECT
和EXCEPT
操作的缓冲区大小,当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_keys
或caching_sha2_password_auto_generate_rsa_keys
系统变量已启用;未指定 RSA 选项;数据目录中缺少 RSA 文件。这些密钥对文件允许通过未加密的连接使用 RSA 进行安全密码交换,适用于由sha256_password
或caching_sha2_password
插件进行身份验证的帐户;请参阅 第 8.4.1.2 节“SHA-256 可插拔身份验证” 和 第 8.4.1.1 节“缓存 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.2 节“SHA-256 可插拔身份验证”。-
命令行格式 --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.2 节“SHA-256 可插拔身份验证”。-
命令行格式 --shared-memory[={OFF|ON}]
系统变量 shared_memory
作用域 全局 动态 否 SET_VAR
提示适用否 特定于平台 Windows 类型 布尔值 默认值 OFF
(仅限 Windows。)服务器是否允许共享内存连接。
-
命令行格式 --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[={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
语句的输出和信息架构表中可见。当此变量设置为OFF
时,将不会显示此类键。此变量不会被复制。
有关更多信息,请参阅 第 15.1.20.11 节“生成的不可见主键”。
-
命令行格式 --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[={OFF|ON}]
系统变量 skip_name_resolve
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
检查客户端连接时是否解析主机名。如果此变量为
OFF
,则 mysqld 会在检查客户端连接时解析主机名。如果它为ON
,则 mysqld 仅使用 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=::1
以root
身份连接,请创建以下帐户:CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password'; CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
-
命令行格式 --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
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
这可以防止没有
SHOW DATABASES
权限的人使用SHOW DATABASES
语句。如果您担心用户能够看到属于其他用户的数据库,这可以提高安全性。其效果取决于SHOW DATABASES
权限:如果变量值为ON
,则仅允许具有SHOW DATABASES
权限的用户使用SHOW DATABASES
语句,并且该语句会显示所有数据库名称。如果值为OFF
,则所有用户都允许使用SHOW DATABASES
,但只会显示用户对其具有SHOW DATABASES
或其他权限的数据库的名称。注意因为任何静态全局权限都被视为所有数据库的权限,所以任何静态全局权限都允许用户使用
SHOW DATABASES
或通过检查INFORMATION_SCHEMA
的SCHEMATA
表来查看所有数据库名称,但已通过部分撤销在数据库级别受到限制的数据库除外。 -
命令行格式 --slow-launch-time=#
系统变量 slow_launch_time
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 2
最小值 0
最大值 31536000
单位 秒 如果创建线程花费的时间超过此秒数,则服务器会增加
Slow_launch_threads
状态变量。 -
命令行格式 --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=file_name
系统变量 slow_query_log_file
作用域 全局 动态 是 SET_VAR
提示适用否 类型 文件名 默认值 host_name-slow.log
慢查询日志文件的名称。默认值为
,但初始值可以使用host_name
-slow.log--slow_query_log_file
选项更改。 -
命令行格式 --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
作用域 全局,会话 动态 是 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 BY
或GROUP 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
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 OFF
如果启用了此变量,则在成功插入自动生成的
AUTO_INCREMENT
值的语句之后,您可以通过发出以下形式的语句来查找该值SELECT * FROM tbl_name WHERE auto_col IS NULL
如果该语句返回一行,则返回的值与调用
LAST_INSERT_ID()
函数时相同。有关详细信息(包括多行插入后的返回值),请参阅 第 14.15 节“信息函数”。如果未成功插入任何AUTO_INCREMENT
值,则SELECT
语句不返回任何行。某些 ODBC 程序(例如 Access)使用通过使用
IS NULL
比较来检索AUTO_INCREMENT
值的行为。请参阅 获取自动递增值。可以通过将sql_auto_is_null
设置为OFF
来禁用此行为。sql_auto_is_null
的默认值为OFF
。 -
系统变量 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
作用域 全局,会话 动态 是 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
表添加生成的不可见主键。此变量不会被复制。此外,即使在副本上设置了此变量,也会被复制应用线程忽略;这意味着,默认情况下,副本不会为在源上创建时没有主键的任何复制表生成主键。您可以通过在
CHANGE REPLICATION SOURCE TO
语句中设置REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE
,可以选择指定复制通道,从而使副本为这些表生成不可见主键。有关更多信息和示例,请参阅 第 15.1.20.11 节“生成的不可见主键”。
-
系统变量 sql_log_off
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
有效值 OFF
(启用日志记录)ON
(禁用日志记录)此变量控制是否为当前会话禁用常规查询日志记录(假设已启用常规查询日志本身)。默认值为
OFF
(即启用日志记录)。要为当前会话禁用或启用常规查询日志记录,请将会话sql_log_off
变量设置为ON
或OFF
。设置此系统变量的会话值是一个受限操作。会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”。
-
命令行格式 --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 模式与默认模式或您期望的模式不同,请在服务器启动时读取的选项文件中检查设置。
-
如果启用(默认),
Note
级别的诊断会增加warning_count
,并且服务器会记录它们。如果禁用,Note
诊断不会增加warning_count
,并且服务器不会记录它们。 mysqldump 包含用于禁用此变量的输出,以便重新加载转储文件不会针对不影响重新加载操作完整性的事件生成警告。 -
系统变量 sql_quote_show_create
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
如果启用(默认),则服务器会为
SHOW CREATE TABLE
和SHOW CREATE DATABASE
语句的标识符加引号。如果禁用,则禁用加引号。默认情况下启用此选项,以便复制可以处理需要加引号的标识符。请参阅 第 15.7.7.11 节 “SHOW CREATE TABLE 语句” 和 第 15.7.7.7 节 “SHOW CREATE DATABASE 语句”。 -
命令行格式 --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
系统变量的会话值。如果设置为ON
或OFF
,则该帐户不需要这些权限。有关更多信息,请参阅 第 19.3.3 节 “复制权限检查”。 -
系统变量 sql_safe_updates
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 OFF
如果启用此变量,则在
WHERE
子句或LIMIT
子句中未使用键的UPDATE
和DELETE
语句会产生错误。这使得捕获未正确使用键并且可能会更改或删除大量行的UPDATE
和DELETE
语句成为可能。默认值为OFF
。对于 mysql 客户端,可以通过使用
--safe-updates
选项启用sql_safe_updates
。有关更多信息,请参阅 使用安全更新模式 (--safe-updates)。 -
系统变量 sql_select_limit
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 18446744073709551615
最小值 0
最大值 18446744073709551615
从
SELECT
语句返回的最大行数。有关更多信息,请参阅 使用安全更新模式 (--safe-updates)。新连接的默认值是服务器允许的每个表的最大行数。典型的默认值为 (232)−1 或 (264)−1。如果已更改限制,则可以通过分配值
DEFAULT
来恢复默认值。如果
SELECT
具有LIMIT
子句,则LIMIT
优先于sql_select_limit
的值。 -
系统变量 sql_warnings
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
此变量控制在发生警告时单行
INSERT
语句是否生成信息字符串。默认值为OFF
。将值设置为ON
以生成信息字符串。 -
证书颁发机构 (CA) 证书文件的路径名,采用 PEM 格式。该文件包含受信任的 SSL 证书颁发机构的列表。
可以在运行时修改此变量,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。 -
命令行格式 --ssl-capath=目录名
系统变量 ssl_capath
作用域 全局 动态 是 SET_VAR
提示适用否 类型 目录名 默认值 NULL
包含受信任的 SSL 证书颁发机构 (CA) 证书文件的目录的路径名,采用 PEM 格式。
可以在运行时修改此变量,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。 -
服务器 SSL 公钥证书文件的路径名,采用 PEM 格式。
如果服务器在启动时将
ssl_cert
设置为使用任何受限密码或密码类别的证书,则服务器将在启动时禁用对加密连接的支持。有关密码限制的信息,请参阅 连接密码配置。可以在运行时修改此变量,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。 -
命令行格式 --ssl-cipher=名称
系统变量 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 支持 OpenSSL 文档中描述的用于指定密码的语法,网址为 https://www.openssl.org/docs/manmaster/man1/ciphers.html。
有关 MySQL 支持的加密密码的信息,请参阅 第 8.3.2 节 “加密连接 TLS 协议和密码”。
可以在运行时修改此变量,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。 -
包含证书吊销列表的文件的路径名,采用 PEM 格式。
可以在运行时修改此变量,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。 -
命令行格式 --ssl-crlpath=目录名
系统变量 ssl_crlpath
作用域 全局 动态 是 SET_VAR
提示适用否 类型 目录名 默认值 NULL
包含证书吊销列表文件的目录的路径,采用 PEM 格式。
可以在运行时修改此变量,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。 -
命令行格式 --ssl-fips-mode={OFF|ON|STRICT}
已弃用 是 系统变量 ssl_fips_mode
作用域 全局 动态 否 SET_VAR
提示适用否 类型 枚举 默认值 OFF
有效值 OFF
(或 0)ON
(或 1)STRICT
(或 2)控制是否在服务器端启用 FIPS 模式。
ssl_fips_mode
系统变量与其他ssl_
系统变量的不同之处在于,它不是用于控制服务器是否允许加密连接,而是用于影响允许哪些加密操作。请参阅 第 8.8 节 “FIPS 支持”。xxx
允许使用以下
ssl_fips_mode
值:OFF
(或 0):禁用 FIPS 模式。ON
(或 1):启用 FIPS 模式。STRICT
(或 2):启用“严格”FIPS 模式。
注意如果 OpenSSL FIPS 对象模块不可用,则
ssl_fips_mode
唯一允许的值为OFF
。在这种情况下,在启动时将ssl_fips_mode
设置为ON
或STRICT
会导致服务器生成错误消息并退出。此选项已弃用并设为只读。预计在未来版本的 MySQL 中会被删除。
-
服务器 SSL 私钥文件的路径名,采用 PEM 格式。为了更高的安全性,请使用 RSA 密钥大小至少为 2048 位的证书。
如果密钥文件受密码保护,服务器会提示用户输入密码。密码必须以交互方式提供;它不能存储在文件中。如果密码不正确,程序会像无法读取密钥一样继续运行。
可以在运行时修改此变量,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。 -
命令行格式 --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
作用域 全局 动态 是 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
作用域 会话 动态 否 SET_VAR
提示适用否 类型 整数 当前会话中执行的每个语句都分配有一个序列号。这可以与
session_track_system_variables
系统变量一起使用,以便在 Performance Schema 表(如events_statements_history
表)中标识此语句。 -
命令行格式 --stored-program-cache=#
系统变量 stored_program_cache
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 256
最小值 16
最大值 524288
为每个连接的缓存存储例程的数量设置一个软上限。此变量的值是根据 MySQL 服务器为存储过程和存储函数分别维护的两个缓存中每个缓存中保存的存储例程的数量来指定的。
每当执行存储例程时,都会在解析例程中的第一个或顶级语句之前检查此缓存大小;如果相同类型(根据正在执行的存储过程或存储函数)的例程数量超过此变量指定的限制,则会刷新相应的缓存,并释放先前分配给缓存对象的内存。这允许安全地刷新缓存,即使存储例程之间存在依赖关系也是如此。
存储过程和存储函数缓存与 字典对象缓存 的存储程序定义缓存分区并行存在。存储过程和存储函数缓存是每个连接的,而存储程序定义缓存是共享的。存储过程和存储函数缓存中对象的存在与存储程序定义缓存中对象的存在无关,反之亦然。有关更多信息,请参阅 第 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[={OFF|ON}]
系统变量 super_read_only
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
如果启用了
read_only
系统变量,则服务器不允许任何客户端更新,但拥有CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)的用户除外。如果还启用了super_read_only
系统变量,则服务器甚至会禁止拥有CONNECTION_ADMIN
或SUPER
权限的用户进行客户端更新。有关只读模式的说明以及有关read_only
和super_read_only
如何交互的信息,请参阅read_only
系统变量的说明。启用
super_read_only
时阻止的客户端更新包括不一定看起来像更新的操作,例如CREATE FUNCTION
(用于安装可加载函数)、INSTALL PLUGIN
和INSTALL COMPONENT
。禁止这些操作是因为它们涉及对mysql
系统架构中的表的更改。同样,如果启用了事件调度程序,则启用
super_read_only
系统变量会阻止它更新events
数据字典表中的事件“上次执行”时间戳。这会导致事件调度程序在下一次尝试执行计划事件时停止,并在将消息写入服务器错误日志后停止。(在这种情况下,event_scheduler
系统变量不会从ON
更改为OFF
。这意味着此变量拒绝 DBA *意图* 启用或禁用事件调度程序,而其启动或停止的实际状态可能不同。)。如果在启用super_read_only
之后将其禁用,则服务器会根据需要自动重启事件调度程序。对复制源服务器上的
super_read_only
所做的更改不会复制到副本服务器。可以在副本上设置该值,而与源上的设置无关。 -
命令行格式 --syseventlog.facility=value
系统变量 syseventlog.facility
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 守护程序
写入
syslog
的错误日志输出的工具(发送消息的程序类型)。除非安装了log_sink_syseventlog
错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误记录到系统日志”。允许的值可能因操作系统而异;请参阅您的系统
syslog
文档。此变量在 Windows 上不存在。
-
命令行格式 --syseventlog.include-pid[={OFF|ON}]
系统变量 syseventlog.include_pid
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
是否在写入
syslog
的每行错误日志输出中包含服务器进程 ID。除非安装了log_sink_syseventlog
错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误记录到系统日志”。此变量在 Windows 上不存在。
-
命令行格式 --syseventlog.tag=tag
系统变量 syseventlog.tag
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 空字符串
要添加到写入
syslog
或 Windows 事件日志的错误日志输出中的服务器标识符的标记。除非安装了log_sink_syseventlog
错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误记录到系统日志”。默认情况下,没有设置任何标记,因此服务器标识符在 Windows 上只是
MySQL
,在其他平台上是mysqld
。如果指定了tag
的标记值,则会将其附加到服务器标识符,并在前面加上连字符,从而生成syslog
标识符mysqld-
(或 Windows 上的tag
MySQL-
)。tag
在 Windows 上,要使用尚不存在的标记,必须从具有管理员权限的帐户运行服务器,以允许为该标记创建注册表项。如果标记已存在,则不需要提升权限。
-
系统变量 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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 -1
(表示自动调整大小;不要分配此字面值)最小值 400
最大值 524288
可以存储在表定义缓存中的表定义数量。如果使用大量表,则可以创建大型表定义缓存以加快表的打开速度。与普通表缓存不同,表定义缓存占用的空间更少,并且不使用文件描述符。最小值为 400。默认值基于以下公式,上限为 2000:
MIN(400 + table_open_cache / 2, 2000)
对于
InnoDB
,table_definition_cache
设置充当字典对象缓存中表实例数量和一次可以打开的“每个表一个文件”表空间数量的软限制。如果字典对象缓存中的表实例数量超过
table_definition_cache
限制,则 LRU 机制会开始标记表实例以进行逐出,并最终将其从字典对象缓存中删除。由于具有外键关系的表实例未放置在 LRU 列表中,因此缓存了元数据的打开表数量可能高于table_definition_cache
限制。一次可以打开的“每个表一个文件”表空间的数量受
table_definition_cache
和innodb_open_files
设置的限制。如果同时设置了这两个变量,则使用最高的设置。如果未设置任何一个变量,则使用具有较高默认值的table_definition_cache
设置。如果打开的表空间数量超过table_definition_cache
或innodb_open_files
定义的限制,则 LRU 机制会在 LRU 列表中搜索已完全刷新且当前未扩展的表空间文件。每次打开新的表空间时都会执行此过程。只有非活动表空间才会关闭。表定义缓存与 字典对象缓存 的表定义缓存分区并行存在。这两个缓存都存储表定义,但服务于 MySQL 服务器的不同部分。一个缓存中的对象不依赖于另一个缓存中对象的存在。有关更多信息,请参阅 第 16.4 节 “字典对象缓存”。
table_encryption_privilege_check
命令行格式 --table-encryption-privilege-check[={OFF|ON}]
系统变量 table_encryption_privilege_check
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
控制在使用与
default_table_encryption
设置不同的加密创建或更改架构或通用表空间时,或者在使用与默认架构加密不同的加密设置创建或更改表时发生的TABLE_ENCRYPTION_ADMIN
权限检查。默认情况下,该检查处于禁用状态。在运行时设置
table_encryption_privilege_check
需要SUPER
权限。table_encryption_privilege_check
支持SET PERSIST
和SET PERSIST_ONLY
语法。请参阅 第 7.1.9.3 节 “持久化系统变量”。有关更多信息,请参见 为架构和通用表空间定义加密默认值。
-
命令行格式 --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
作用域 全局 动态 否 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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 256
最小值 256
最大值 524288
定义可以在字典对象缓存中保留的已使用和未使用表空间定义对象的数量限制。
只有在使用的数量小于
tablespace_definition_cache
定义的容量时,未使用的表空间定义对象才会保留在字典对象缓存中。0
的设置意味着表空间定义对象仅在使用时才保留在字典对象缓存中。有关更多信息,请参见 第 16.4 节,“字典对象缓存”。
-
命令行格式 --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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 总内存的 3%:最小 1 GB,最大 4 GB
最小值 2097152
最大值 2^64-1
单位 字节 定义
TempTable
存储引擎在开始将数据存储到磁盘之前可以占用的最大内存量。默认值为服务器上可用总内存的 3%,最小和最大默认范围为 1-4 GiB。有关更多信息,请参阅 第 10.4.4 节 “MySQL 中的内部临时表使用”。在 MySQL 8.4 之前,默认值始终为 1 GiB。
-
命令行格式 --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
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 -1
(表示自动调整大小;不要分配此字面值)最小值 0
最大值 16384
服务器应该缓存以供重用的线程数。当客户端断开连接时,如果缓存中的线程数少于
thread_cache_size
,则客户端的线程将被放入缓存中。对线程的请求会尽可能通过重用从缓存中获取的线程来满足,只有当缓存为空时才会创建新线程。如果您有大量的新连接,可以增加此变量以提高性能。通常,如果您有一个良好的线程实现,这不会提供显著的性能改进。但是,如果您的服务器每秒看到数百个连接,您通常应该将thread_cache_size
设置得足够高,以便大多数新连接使用缓存的线程。通过检查Connections
和Threads_created
状态变量之间的差异,您可以看到线程缓存的效率。有关详细信息,请参阅 第 7.1.10 节“服务器状态变量”。默认值基于以下公式,上限为 100
8 + (max_connections / 100)
-
命令行格式 --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
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 1
此变量控制线程池插件使用的算法
0
:使用保守的低并发算法。1
:使用激进的高并发算法,该算法在最佳线程数下性能更好,但如果连接数达到极高值,性能可能会下降。
仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”。
thread_pool_dedicated_listeners
命令行格式 --thread-pool-dedicated-listeners
系统变量 thread_pool_dedicated_listeners
作用域 全局 动态 否 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
在每个线程组中指定一个侦听器线程来侦听分配给该组的连接的传入语句。
OFF
:(默认)禁用专用侦听器线程。ON
:在每个线程组中指定一个侦听器线程来侦听分配给该组的连接的传入语句。专用侦听器线程不执行查询。
仅当
thread_pool_max_transactions_limit
定义了事务限制时,启用thread_pool_dedicated_listeners
才有用。否则,不应启用thread_pool_dedicated_listeners
。HeatWave 服务使用此变量,该变量仅在 MySQL 企业版中可用,并且在 MySQL 9.0 中不受支持。
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 企业版线程池”。
-
命令行格式 --thread-pool-longrun-trx-limit=#
系统变量 thread_pool_longrun_trx_limit
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 2000
最小值 10
最大值 60*60*24
单位 毫秒 使用
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 企业版线程池”。
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 企业版线程池”。
thread_pool_max_transactions_limit
命令行格式 --thread-pool-max-transactions-limit
系统变量 thread_pool_max_transactions_limit
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 0
最大值 1000000
线程池插件允许的最大事务数。定义事务限制会将线程绑定到事务,直到事务提交,这有助于在高并发期间稳定吞吐量。
默认值 0 表示没有事务限制。该变量是动态的,但不能在运行时从 0 更改为更大的值,反之亦然。启动时非零值允许在运行时进行动态配置。在运行时配置
thread_pool_max_transactions_limit
需要CONNECTION_ADMIN
权限。定义事务限制时,启用
thread_pool_dedicated_listeners
会在每个线程组中创建一个专用侦听器线程。额外的专用侦听器线程会消耗更多资源并影响线程池性能。因此,应谨慎使用thread_pool_dedicated_listeners
。当达到
thread_pool_max_transactions_limit
定义的限制时,新连接或现有连接上的事务可能会出现挂起,直到一个或多个现有事务完成。在许多情况下,可以通过设置thread_pool_longrun_trx_limit
来缓解此问题,以便在正在进行的事务数量在给定时间段内与之匹配时可以放宽事务最大值。如果在尝试此操作后现有连接继续被阻塞或长时间运行,则可能需要特权连接才能访问服务器以增加限制、删除限制或终止正在运行的事务。请参阅 特权连接。HeatWave 服务使用此变量,该变量仅在 MySQL 企业版中可用,并且在 MySQL 9.0 中不受支持。
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 企业版线程池”。
-
命令行格式 --thread-pool-prio-kickup-timer=#
系统变量 thread_pool_prio_kickup_timer
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 1000
最小值 0
最大值 4294967294
单位 毫秒 此变量会影响在低优先级队列中等待执行的语句。该值是在等待语句移至高优先级队列之前的毫秒数。默认值为 1000(1 秒)。
仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”。
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
)时,如果由于长时间运行的事务而导致响应时间变慢,请考虑增加该值。在运行时配置
thread_pool_query_threads_per_group
需要CONNECTION_ADMIN
权限。如果在运行时减小
thread_pool_query_threads_per_group
的值,则当前正在运行用户查询的线程将被允许完成,然后移至保留池或终止。如果在运行时增加该值并且线程组需要更多线程,则会尽可能从保留池中获取这些线程,否则将创建这些线程。HeatWave 服务使用此变量,该变量仅在 MySQL 企业版中可用,并且在 MySQL 9.0 中不受支持。
-
命令行格式 --thread-pool-size=#
系统变量 thread_pool_size
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 16
最小值 1
最大值 512
线程池中的线程组数。这是控制线程池性能的最重要参数。它会影响可以同时执行的语句数量。如果指定的值超出了允许值的范围,则线程池插件不会加载,并且服务器会向错误日志写入一条消息。
仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”。
-
命令行格式 --thread-pool-stall-limit=#
系统变量 thread_pool_stall_limit
作用域 全局 动态 是 SET_VAR
提示适用否 类型 整数 默认值 6
最小值 4
最大值 600
单位 毫秒 * 10 此变量会影响正在执行的语句。该值是一个语句在开始执行后必须完成的时间量,然后才会被定义为停滞,此时线程池允许线程组开始执行另一个语句。该值以 10 毫秒为单位进行测量,因此默认值 6 表示 60 毫秒。较短的等待值允许线程更快地启动。较短的值也更能避免死锁情况。较长的等待值对于包含长时间运行的语句的工作负载很有用,可以避免在当前语句执行时启动过多的新语句。
仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”。
-
命令行格式 --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
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 1048576
最小值 131072
最大值(64 位平台) 18446744073709550592
最大值(32 位平台) 4294966272
单位 字节 块大小 1024
每个线程的堆栈大小。默认值足以满足正常操作。如果线程堆栈大小太小,它会限制服务器可以处理的 SQL 语句的复杂性、存储过程的递归深度和其他内存消耗操作。
-
当前时区。此变量用于初始化连接的每个客户端的时区。默认情况下,其初始值为
'SYSTEM'
(这意味着,“使用system_time_zone
的值”)。可以在服务器启动时使用--default-time-zone
选项显式指定该值。请参阅 第 7.1.15 节“MySQL 服务器时区支持”。注意如果设置为
SYSTEM
,则每个需要计算时区的 MySQL 函数调用都会进行系统库调用以确定当前系统时区。此调用可能受全局互斥锁保护,从而导致争用。 -
设置此客户端的时间。如果您使用二进制日志还原行,这将用于获取原始时间戳。
timestamp_value
应该是 Unix 纪元时间戳(UNIX_TIMESTAMP()
返回的值,而不是'
格式的值)或YYYY-MM-DD hh:mm:ss
'DEFAULT
。将
timestamp
设置为常量值将使其保留该值,直到再次更改。将timestamp
设置为DEFAULT
会使其值在访问时为当前日期和时间。timestamp
是DOUBLE
而不是BIGINT
,因为它的值包含微秒部分。最大值对应于 UTC 时间'2038-01-19 03:14:07'
,与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 证书文件的位置,则在启动期间,服务器会确保默认数据目录中存在每个所需 SSL 证书文件的位置。但是,服务器不会验证证书文件,因此,它能够以无效证书启动。
tls_certificates_enforced_validation
系统变量控制在启动时是否强制执行证书验证。启用验证强制执行后,发现无效证书将停止启动执行。默认情况下,证书验证强制执行处于禁用状态 (OFF
)。可以通过在命令行上指定
--tls-certificates-enforced-validation
选项(使用或不使用ON
值)来启用验证强制执行。启用验证强制执行后,还会在通过ALTER INSTANCE RELOAD TLS
语句重新加载证书时验证证书。此系统变量无法在重启后持久化。有关更多信息,请参阅 配置证书验证强制执行。-
命令行格式 --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=protocol_list
系统变量 tls_version
作用域 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 TLSv1.2,TLSv1.3
服务器允许加密连接使用哪些协议。该值是一个或多个以逗号分隔的协议名称的列表,这些名称不区分大小写。可以为此变量命名的协议取决于用于编译 MySQL 的 SSL 库。应选择允许的协议,以免在列表中留下 “漏洞”。有关详细信息,请参阅 第 8.3.2 节“加密连接 TLS 协议和密码”。
可以在运行时修改此变量,以影响服务器用于新连接的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控。
重要MySQL 9.0 不支持 TLSv1 和 TLSv1.1 连接协议。有关更多信息,请参阅 移除对 TLSv1 和 TLSv1.1 协议的支持。
MySQL 9.0 中提供了对 TLSv1.3 协议的支持,前提是使用 OpenSSL 1.1.1 或更高版本编译 MySQL 服务器。服务器会在启动时检查 OpenSSL 的版本,如果低于 1.1.1,则会从系统变量的默认值中移除 TLSv1.3。在这种情况下,默认值为
TLSv1.2
。
将此变量设置为空字符串将禁用加密连接。
-
命令行格式 --tmp-table-size=#
系统变量 tmp_table_size
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 整数 默认值 16777216
最小值 1024
最大值 18446744073709551615
单位 字节 定义由
MEMORY
和TempTable
存储引擎创建的内部内存中临时表的最大大小。如果内部内存中临时表超过此大小,它将自动转换为磁盘上的内部临时表。tmp_table_size
变量不适用于用户创建的MEMORY
表。不支持用户创建的TempTable
表。对内部内存中临时表使用
MEMORY
存储引擎时,实际大小限制为tmp_table_size
和max_heap_table_size
中的较小者。max_heap_table_size
设置不适用于TempTable
表。如果执行许多高级
GROUP BY
查询并且内存充足,请增加tmp_table_size
的值(如果对内部内存中临时表使用MEMORY
存储引擎,还需要增加max_heap_table_size
的值)。您可以通过比较
Created_tmp_disk_tables
和Created_tmp_tables
值,来比较创建的内部磁盘上临时表的数量与创建的内部临时表的总数。 -
用于创建临时文件的目录的路径。如果默认的
/tmp
目录位于太小而无法容纳临时表的分区上,这将非常有用。此变量可以设置为以循环方式使用的多个路径的列表。路径在 Unix 上应以冒号 (:
) 分隔,在 Windows 上应以分号 (;
) 分隔。tmpdir
可以是非永久性位置,例如基于内存的文件系统上的目录或在服务器主机重新启动时清除的目录。如果 MySQL 服务器充当副本,并且您对tmpdir
使用非永久性位置,请考虑使用replica_load_tmpdir
变量为副本设置不同的临时目录。对于副本,用于复制LOAD DATA
语句的临时文件存储在此目录中,因此,如果使用永久性位置,它们可以在机器重新启动后继续存在,尽管如果临时文件已被删除,复制现在可以在重新启动后继续。有关临时文件存储位置的更多信息,请参阅 第 B.3.3.5 节“MySQL 存储临时文件的位置”。
-
命令行格式 --transaction-alloc-block-size=#
系统变量 transaction_alloc_block_size
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 8192
最小值 1024
最大值 131072
单位 字节 块大小 1024
需要内存的每个事务内存池增加的字节数。请参阅
transaction_prealloc_size
的描述。 -
命令行格式 --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
作用域 全局,会话 动态 是 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[={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
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 ON
如果设置为 1(默认值),则会对
InnoDB
表中的二级索引执行唯一性检查。如果设置为 0,则允许存储引擎假定输入数据中不存在重复键。如果您确定数据中不包含违反唯一性的情况,则可以将其设置为 0 以加快向InnoDB
导入大型表的速度。将此变量设置为 0 不会 强制 存储引擎忽略重复键。如果引擎检测到重复键,仍然允许它检查它们并发出重复键错误。
-
命令行格式 --updatable-views-with-limit[={OFF|ON}]
系统变量 updatable_views_with_limit
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 1
此变量控制当视图不包含基础表中定义的主键的所有列时,如果更新语句包含
LIMIT
子句,是否可以对视图进行更新。(此类更新通常由 GUI 工具生成。)更新是指UPDATE
或DELETE
语句。主键在这里指的是PRIMARY KEY
或UNIQUE
索引,其中任何列都不能包含NULL
。该变量可以有两个值:
1
或YES
:仅发出警告(而不是错误消息)。这是默认值。0
或NO
:禁止更新。
-
系统变量 use_secondary_engine
作用域 会话 动态 是 SET_VAR
提示适用是 类型 枚举 默认值 ON
有效值 OFF
ON
FORCED
供将来使用。
是否使用辅助引擎执行查询。
与 HeatWave 一起使用。参见 HeatWave 用户指南。
validate_password.
xxx
validate_password
组件实现了一组系统变量,其名称格式为validate_password.
。这些变量会影响该组件的密码测试;请参阅 第 8.4.3.2 节“密码验证选项和变量”。xxx
服务器的版本号。该值可能还包括一个后缀,指示服务器构建或配置信息。
-debug
表示服务器是在启用了调试支持的情况下构建的。-
系统变量 version_comment
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 CMake 配置程序有一个
COMPILATION_COMMENT_SERVER
选项,允许在构建 MySQL 时指定注释。此变量包含该注释的值。 -
系统变量 version_compile_machine
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 服务器二进制文件的类型。
-
系统变量 version_compile_os
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 构建 MySQL 所用的操作系统类型。
-
系统变量 version_compile_zlib
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 编译后的
zlib
库的版本。 -
命令行格式 --wait-timeout=#
系统变量 wait_timeout
作用域 全局,会话 动态 是 SET_VAR
提示适用否 类型 整数 默认值 28800
最小值 1
最大值(Windows) 2147483
最大值(其他) 31536000
单位 秒 服务器在关闭非交互式连接之前等待其活动的秒数。
在启动线程时,会话
wait_timeout
值将从全局wait_timeout
值或全局interactive_timeout
值初始化,具体取决于客户端类型(由mysql_real_connect()
的CLIENT_INTERACTIVE
连接选项定义)。另请参阅interactive_timeout
。 上次生成消息的语句导致的错误、警告和注释的数量。此变量为只读。请参阅 第 15.7.7.41 节 “SHOW WARNINGS 语句”。
-
命令行格式 --windowing-use-high-precision[={OFF|ON}]
系统变量 windowing_use_high_precision
作用域 全局,会话 动态 是 SET_VAR
提示适用是 类型 布尔值 默认值 ON
是否在计算窗口操作时不损失精度。请参阅 第 10.2.1.21 节 “窗口函数优化”。
-
命令行格式 --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 事务状态”。