7.1.8 服务器系统变量
MySQL 服务器维护了许多系统变量,这些变量影响服务器的操作。最多的系统变量可以在服务器启动时使用命令行选项或选项文件来设置。最多的系统变量可以在运行时使用 SET
语句来更改操作,允许您在不停止和重新启动服务器的情况下修改服务器的操作。一些变量是只读的,值是由系统环境、MySQL 在系统安装时的方式或可能是编译 MySQL 时的选项确定的。最多的系统变量都有默认值,但有例外,包括只读变量。您也可以在表达式中使用系统变量值。
设置全局系统变量的运行时值通常需要 SYSTEM_VARIABLES_ADMIN
权限(或弃用的 SUPER
权限)。设置会话系统变量的运行时值通常不需要特殊权限,可以由任何用户执行,但有例外。更多信息,请见 第7.1.9.1节,“系统变量权限”
有多种方式可以查看系统变量的名称和值:
-
查看服务器使用的默认值和任何选项文件的值,可以使用以下命令:
mysqld --verbose --help
-
查看服务器使用的默认值,忽略任何选项文件,可以使用以下命令:
mysqld --no-defaults --verbose --help
-
查看当前正在运行的服务器的值,可以使用
SHOW VARIABLES
语句或性能_schema 系统变量表。见 第29.12.14节,“性能_schema 系统变量表”
本节提供了每个系统变量的描述。关于系统变量的总结表,请见 第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节,“程序选项修饰符”。
一些系统变量控制缓冲区或缓存的大小。对于给定的缓冲区,服务器可能需要分配内部数据结构。这些结构通常来自缓冲区的总内存中,并且需要的空间可能取决于平台。这意味着,当您将一个控制缓冲区大小的系统变量的值分配时,实际可用的空间可能不同于分配的值。在某些情况下,实际可用的空间可能小于分配的值。服务器也可能会将值上调。例如,如果您将一个变量的值分配为0,该变量的最小值为1024,服务器将将值设置为1024。
缓冲区大小、长度和堆栈大小的值以字节为单位,除非另有指定。
一些系统变量描述中包括一个块大小,在这种情况下,值不是该块大小的整数倍将被服务器下舍到该块大小的下一个整数倍,即FLOOR(
value
)*
。block_size
示例:假设某个变量的块大小为4096,您将该变量的值设置为100000(假设该变量的最大值大于这个数字)。由于100000 / 4096 = 24.4140625,服务器将自动将值降低到98304(24 * 4096)前存储。
在某些情况下,变量的最大值是MySQL解析器允许的最大值,但不是该块大小的exact倍数。在这种情况下,实际最大值是该块大小的下一个整数倍。
示例:某个系统变量的最大值显示为4294967295(232-1),块大小为1024。4294967295 / 1024 = 4194303.9990234375,因此如果您将该变量设置为其所示的最大值,实际存储的值将是4194303 * 1024 = 4294966272。
一些系统变量需要文件名值。除非另有指定,文件位置默认为数据目录,如果值是相对路径名。要指定位置,使用绝对路径名。假设数据目录是 /var/mysql/data
。如果文件值变量以相对路径名给出,它将位于 /var/mysql/data
。如果值是绝对路径名,它的位置将是路径名所指定的。
-
Command-Line Format --activate-all-roles-on-login[={OFF|ON}]
System Variable activate_all_roles_on_login
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
是否在用户登录服务器时自动激活所有授予的角色:
-
如果
activate_all_roles_on_login
启用,服务器将在登录时激活每个帐户的所有角色。这优先于使用SET DEFAULT ROLE
指定的默认角色。 -
如果
activate_all_roles_on_login
disabled,服务器将在登录时激活使用SET DEFAULT ROLE
指定的默认角色,如果存在任何。
授予的角色包括用户明确授予的角色和在
mandatory_roles
系统变量值中指定的角色。activate_all_roles_on_login
只在登录时和存储程序或视图执行时的开始生效。要在会话中更改活动角色,使用SET ROLE
。要更改存储程序的活动角色,程序体应该执行SET ROLE
。 -
-
Command-Line Format --admin-address=addr
System Variable admin_address
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 管理员网络接口上监听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
),服务器只接受TCP/IP连接以该IPv4或IPv6地址。
这些规则适用于指定网络命名空间的地址:
-
可以为IP地址或主机名指定网络命名空间。
-
不能为通配IP地址指定网络命名空间。
-
对于给定的地址,网络命名空间是可选的。如果给定,必须以
/
后缀形式指定。ns
-
没有
/
后缀的地址使用主机系统的全局命名空间。全局命名空间因此是默认的。ns
-
具有
/
后缀的地址使用命名空间名为ns
ns
。 -
主机系统必须支持网络命名空间,每个命名空间名称都必须先前设置。命名一个不存在的命名空间将产生错误。
关于网络命名空间的更多信息,请见第7.1.14节,“网络命名空间支持”。
如果绑定到地址失败,服务器将产生错误并且不启动。
《
admin_address
」系统变量类似于《bind_address
」系统变量,它将服务器绑定到一个地址用于普通客户端连接,但有以下区别:-
bind_address
允许多个地址。《admin_address
」只允许单个地址。 -
bind_address
允许通配符地址。《admin_address
」不允许。
-
-
Command-Line Format --admin-port=port_num
System Variable admin_port
Scope Global Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 33062
Minimum Value 0
Maximum Value 65535
用于连接管理网络接口(见第7.1.12.1节,“Connection Interfaces”)。将该变量设置为0将使用默认值。
设置《
admin_port
」无效,如果《admin_address
」未指定,因为在这种情况下服务器不维护任何管理网络接口。 -
Command-Line Format --admin-ssl-ca=file_name
System Variable admin_ssl_ca
Scope Global Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value NULL
《
admin_ssl_ca
」系统变量类似于《ssl_ca
」,只是它适用于管理连接接口,而不是主连接接口。关于配置加密支持的管理连接接口的信息,请见Administrative Interface Support for Encrypted Connections。 -
Command-Line Format --admin-ssl-capath=dir_name
System Variable admin_ssl_capath
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 目录名称 Default Value NULL
系统变量
admin_ssl_capath
类似于ssl_capath
,但它适用于管理连接接口,而不是主要连接接口。有关配置管理接口加密支持的信息,请参见管理接口支持加密连接。 -
Command-Line Format --admin-ssl-cert=file_name
System Variable admin_ssl_cert
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value NULL
系统变量
admin_ssl_cert
类似于ssl_cert
,但它适用于管理连接接口,而不是主要连接接口。有关配置管理接口加密支持的信息,请参见管理接口支持加密连接。 -
Command-Line Format --admin-ssl-cipher=name
System Variable admin_ssl_cipher
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 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
)。 -
-
Command-Line Format --admin-ssl-crl=file_name
System Variable admin_ssl_crl
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value NULL
系统变量
admin_ssl_crl
类似于ssl_crl
,但它适用于管理连接接口,而不是主要连接接口。有关配置加密支持的管理接口的信息,请参阅管理接口支持加密连接。 -
Command-Line Format --admin-ssl-crlpath=dir_name
System Variable admin_ssl_crlpath
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 目录名 Default Value NULL
系统变量
admin_ssl_crlpath
类似于ssl_crlpath
,但它适用于管理连接接口,而不是主要连接接口。有关配置加密支持的管理接口的信息,请参阅管理接口支持加密连接。 -
Command-Line Format --admin-ssl-key=file_name
System Variable admin_ssl_key
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value NULL
《
admin_ssl_key
」系统变量类似于《ssl_key
」,但它适用于管理连接接口,而不是主连接接口。关于配置管理接口的加密支持,请参见《管理接口支持加密连接》。 -
Command-Line Format --admin-tls-ciphersuites=ciphersuite_list
System Variable admin_tls_ciphersuites
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 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
》)。 -
-
Command-Line Format --admin-tls-version=protocol_list
System Variable admin_tls_version
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value TLSv1.2,TLSv1.3
《
admin_tls_version
》系统变量类似于《tls_version
》,只是它适用于管理连接接口,而不是主连接接口。关于配置加密支持的管理接口,请参见管理接口支持加密连接。Important-
MySQL 8.4 不支持 TLSv1 和 TLSv1.1 连接协议。请参见TLSv1 和 TLSv1.1 协议支持的移除以获取更多信息。
-
MySQL 8.4 支持 TLSv1.3 协议,假设 MySQL 服务器使用 OpenSSL 1.1.1 或更高版本编译。服务器在启动时检查 OpenSSL 的版本,如果版本低于 1.1.1,TLSv1.3 将从默认值中删除。在这种情况下,默认值为
TLSv1.2
。
-
-
Command-Line Format --authentication-policy=value
System Variable authentication_policy
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value *,,
这个变量用于管理多因素身份验证(MFA)功能。它适用于身份验证因子相关的《
CREATE USER
》和《ALTER USER
》语句用于管理 MySQL 账户定义,其中“factor”对应于账户关联的身份验证方法或插件:-
authentication_policy
控制账户可以拥有的身份验证因子数量。也就是说,它控制了哪些因子是必需的或允许的。 -
authentication_policy
还控制每个因子的插件(或方法)是否允许。 -
authentication_policy
,在结合default_authentication_plugin
中,确定身份验证规范中缺省身份验证插件的默认值。
由于
authentication_policy
只适用于创建或更改账户时,修改其值对现有用户账户无效。Note虽然
authentication_policy
系统变量对CREATE USER
和ALTER USER
语句中的身份验证相关子句施加了限制,但是拥有AUTHENTICATION_POLICY_ADMIN
特权的用户不受这些限制的约束(在其他情况下将出现警告)。authentication_policy
的值是一个由逗号分隔的列表,列表中的每个元素可以是身份验证插件的名称、星号(*
)、空或缺失。(例外:第一个元素不能是空或缺失。)在所有情况下,每个元素都可以被空白字符包围,并且整个列表都被单引号括起来。列表中的第
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
-1个逗号),则对因素N
的身份验证方法被禁止。例如,对于值'*'
,只能使用单因素身份验证(1FA)对新创建的帐户或使用CREATE USER
或ALTER USER
修改现有帐户的身份验证方法。
当
authentication_policy
元素指定身份验证插件时,允许的插件名称受以下条件限制:-
第1个元素必须指定一个不需要注册步骤的插件。例如,
authentication_webauthn
不能被指定。 -
第2和3个元素必须指定一个不使用内部凭证存储的插件。
关于使用内部凭证存储的身份验证插件的信息,请参阅第8.2.15节,“密码管理”。
当
authentication_policy
元素N
为*
时,允许的插件名称在帐户定义中受以下条件限制:-
对于第1个因素,帐户定义可以使用任何插件。默认身份验证插件规则适用于未指定插件的身份验证规范。请参阅默认身份验证插件。
-
对于第2和3个因素,帐户定义不能指定使用内部凭证存储的插件。例如,对于'
*,*
'、'*,*,*
'、'*,
'、'*,,
'authentication_policy
设置,使用内部凭证存储的插件只能用于第一个因素且不能重复。
当
authentication_policy
元素N
为空时,允许的插件名称在帐户定义中受以下条件限制:-
对于第1个因素,这不适用,因为第1个元素不能为空。
-
对于第2和3个因素,帐户定义不能指定使用内部凭证存储的插件。
空元素必须出现在列表的末尾,紧随非空元素。换言之,第一个元素不能为空,或者没有元素为空或最后两个元素为空。例如,对于值
',,'
,这将表明所有因素都是可选的。这不可能,因为帐户至少需要一个身份验证因素。默认的
authentication_policy
值是'*,,'
。这意味着账户定义中需要使用因子1,并且可以使用任何身份验证插件,而因子2和3是可选的,每个可以使用任何不使用内部凭证存储的身份验证插件。以下表格显示了一些
authentication_policy
值和每个值所建立的策略,以便创建或更改账户。表7.4:示例身份验证策略
authentication_policy Value Effective Policy '*'
仅允许使用一个因子创建或更改账户。 '*,*'
仅允许使用两个因子创建或更改账户。 '*,*,*'
仅允许使用三个因子创建或更改账户。 '*,'
允许使用一个或两个因子创建或更改账户。 '*,,'
允许使用一个、两个或三个因子创建或更改账户。 '*,*,'
允许使用两个或三个因子创建或更改账户。 '*,
auth_plugin
'允许使用两个因子,其中第一个因子可以是任何身份验证方法,而第二个因子必须是指定的插件。 '
auth_plugin
,'允许使用两个或三个因子,其中第一个因子必须是指定的插件。 '
auth_plugin
,'允许使用一个或两个因子,其中第一个因子必须是指定的插件。 '
auth_plugin
,auth_plugin
,auth_plugin
'允许使用三个因子,其中每个因子必须是指定的插件。 -
-
authentication_windows_log_level
Command-Line Format --authentication-windows-log-level=#
System Variable authentication_windows_log_level
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 2
Minimum Value 0
Maximum Value 4
这个变量仅在启用了Windows身份验证插件和调试代码时可用。请参阅第8.4.1.6节,“Windows Pluggable Authentication”。
这个变量设置Windows身份验证插件的日志级别。以下表格显示了允许的值。
Value Description 0 无日志 1 只记录错误信息 2 记录级别1的信息和警告信息 3 记录级别2的信息和信息备注 4 记录级别3的信息和调试信息 -
authentication_windows_use_principal_name
Command-Line Format --authentication-windows-use-principal-name[={OFF|ON}]
System Variable authentication_windows_use_principal_name
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
这个变量仅在启用了Windows身份验证插件时可用。请参阅第8.4.1.6节,“Windows Pluggable Authentication”。
使用
InitSecurityContext()
函数进行身份验证的客户端应该提供连接到的服务的字符串(targetName
)。MySQL使用服务器运行的帐户的主体名称(UPN)。UPN的形式为
,不需要在任何地方注册以使用。这UPN由服务器在身份验证握手的开始发送。user_id
@computer_name
这个变量控制服务器是否在初始挑战中发送UPN。默认情况下,变量启用。出于安全原因,可以禁用变量以避免将服务器的帐户名称发送给客户端作为明文。如果变量禁用,服务器总是发送一个
0x00
字节的初始挑战,客户端不指定targetName
,因此使用NTLM身份验证。如果服务器无法获取其UPN(主要发生在不支持Kerberos身份验证的环境中),UPN不被发送,NTLM身份验证被使用。
-
Command-Line Format --autocommit[={OFF|ON}]
System Variable autocommit
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
自动提交模式。如果设置为1,所有对表的更改将立即生效。如果设置为0,您必须使用
COMMIT
接受事务或ROLLBACK
取消它。如果autocommit
为0,您更改为1,MySQL将自动COMMIT
任何打开的事务。另一种开始事务的方式是使用START TRANSACTION
或BEGIN
语句。请参阅第15.3.1节,“START TRANSACTION, COMMIT, and ROLLBACK Statements”.默认情况下,客户端连接将以
autocommit
设置为1。要使客户端连接以默认值0开始,启动服务器时使用--autocommit=0
选项。使用选项文件设置变量,请包括以下行:[mysqld] autocommit=0
-
Command-Line Format --automatic-sp-privileges[={OFF|ON}]
System Variable automatic_sp_privileges
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
当该变量的值为1(默认值),服务器将自动授予存储程序的创建者
EXECUTE
和ALTER ROUTINE
权限,如果用户不能执行或更改或删除该程序。 (需要ALTER ROUTINE
权限以删除程序。) 服务器也将自动从创建者中删除这些权限,当程序被删除时。如果automatic_sp_privileges
为0,服务器不自动添加或删除这些权限。存储程序的创建者是执行
CREATE
语句的帐户。这可能不同于在程序定义中指定的DEFINER
帐户名称。如果您使用mysqld启动
--skip-new
,则automatic_sp_privileges
将设置为OFF
. -
Command-Line Format --auto-generate-certs[={OFF|ON}]
System Variable auto_generate_certs
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
该变量控制服务器是否在数据目录中自动生成 SSL 密钥和证书文件,如果它们不存在。
在启动时,服务器将在数据目录中自动生成服务器端和客户端 SSL 证书和密钥文件,如果
auto_generate_certs
系统变量启用且服务器端 SSL 文件在数据目录中不存在。这些证书和密钥文件使得使用 SSL 的客户端连接安全;请参见第8.3.1节,“使用加密连接”.关于 SSL 文件自动生成的更多信息,包括文件名和特征,请参见第8.3.3.1节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”
相关的
sha256_password_auto_generate_rsa_keys
和caching_sha2_password_auto_generate_rsa_keys
系统变量控制了使用 RSA 加密的安全密码交换所需的 RSA 密钥对文件的自动生成。 -
Command-Line Format --back-log=#
System Variable back_log
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value -1
(表示自动调整;不要将该字面值分配给该变量)Minimum Value 1
Maximum Value 65535
MySQL 可以处理的未完成连接请求的数量。这在 MySQL 主线程在很短时间内接收到许多连接请求时才会出现。然后,主线程需要一些时间(非常短)来检查连接并启动新线程。
back_log
值表示在 MySQL 暂时停止回答新请求期间可以堆叠的请求数量。您需要增加这个值,只有在预期在短时间内接收大量连接时。换言之,这个值是 TCP/IP 连接的 listen队列大小。您的操作系统有自己的队列大小限制。Unix
listen()
系统调用手册中有更多详细信息。请查看您的 OS 文档,以获取该变量的最大值。back_log
不能超过操作系统限制。默认值是
max_connections
的值,这样可以根据允许的最大连接数调整 backlog 的大小。 -
Command-Line Format --basedir=dir_name
System Variable basedir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 Default Value MySQL 安装目录的父目录
MySQL 安装目录的路径。
-
Command-Line Format --big-tables[={OFF|ON}]
System Variable big_tables
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果启用,服务器将将所有临时表存储在磁盘上,而不是在内存中。这可以防止大部分
The table
错误的出现,但也会使查询速度变慢,因为内存表可以满足的查询。tbl_name
is full新连接的默认值为
OFF
(使用内存临时表)。通常,不需要启用这个变量。当使用TempTable
存储引擎(默认)管理内存临时表时,内存临时表将被自动转换为磁盘临时表,以避免内存不足的情况。对于更多信息,请查看Section 10.4.4, “Internal Temporary Table Use in MySQL”。 -
Command-Line Format --bind-address=addr
System Variable bind_address
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value *
MySQL 服务器监听 TCP/IP 连接的网络 sockets。每个 socket 都绑定到一个地址,但一个地址可能映射到多个网络接口。要指定服务器如何监听 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 地址。
服务器对不同类型的地址进行处理:
-
如果地址是
*
,服务器将接受 TCP/IP 连接于所有服务器主机 IPv4 接口,并且,如果服务器主机支持 IPv6,则在所有 IPv6 接口上。使用这个地址可以允许 IPv4 和 IPv6 连接于所有服务器接口。这是默认值。如果变量指定了多个值列表,这个值不允许。 -
如果地址是
0.0.0.0
,服务器将接受 TCP/IP 连接于所有服务器主机 IPv4 接口。如果变量指定了多个值列表,这个值不允许。 -
如果地址是
::
,服务器将接受 TCP/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节,“网络命名空间支持”。
如果绑定到任何地址失败,服务器将产生错误并且不启动。
示例:
-
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
服务器监听
198.51.100.20
IPv4 地址在red
命名空间中、2001:db8:0:f101::1
IPv6 地址在blue
命名空间中和192.0.2.50
IPv4 地址在全局命名空间中。
当
bind_address
指定单个值(通配符或非通配符),服务器监听单个套接字,该套接字可能绑定到多个网络接口。当bind_address
指定多个值时,服务器监听每个值一个套接字,每个套接字绑定到单个网络接口。套接字数量与指定值的数量成线性关系。根据操作系统的连接接受效率,长值列表可能会对接受TCP/IP连接产生性能开销。由于监听套接字和网络命名空间文件需要文件描述符,可能需要增加
open_files_limit
系统变量。如果您想将服务器绑定到特定地址,请确保
mysql.user
系统表包含具有管理员权限的帐户,您可以使用该帐户连接到该地址。否则,您不能关闭服务器。例如,如果您将服务器绑定到*
,您可以使用所有现有帐户连接到服务器。但是,如果您将服务器绑定到::1
,服务器只接受该地址的连接。在这种情况下,请先确保'root'@'::1'
帐户在mysql.user
表中,以便您可以继续连接到服务器以关闭它。 -
-
Command-Line Format --block-encryption-mode=#
System Variable block_encryption_mode
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type String Default Value aes-128-ecb
该变量控制块加密模式,对于块算法如AES的加密。它影响
AES_ENCRYPT()
和AES_DECRYPT()
的加密。block_encryption_mode
以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签名,生成于Linux系统上编译服务器时,使用
-DWITH_BUILD_ID=ON
(默认启用),并将其转换为十六进制字符串。该只读值作为唯一的build ID,并在服务器启动时写入服务器日志。build_id
不支持在平台以外的Linux平台上。 -
Command-Line Format --bulk-insert-buffer-size=#
System Variable bulk_insert_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 8388608
Minimum Value 0
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
Unit 字节/线程 MyISAM
使用特殊的树形缓存来加速bulk inserts对INSERT ... SELECT
、INSERT ... VALUES (...), (...), ...
和LOAD DATA
的添加数据到非空表时。这变量限制了缓存树的大小(以字节为单位)每个线程。将其设置为0禁用该优化。默认值为8MB。设置会话值的系统变量是受限制的操作。会话用户必须具有设置受限制的会话变量的权限。请参阅第7.1.9.1节,“系统变量权限”。
-
caching_sha2_password_digest_rounds
Command-Line Format --caching-sha2-password-digest-rounds=#
System Variable caching_sha2_password_digest_rounds
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 5000
Minimum Value 5000
Maximum Value 4095000
用于caching_sha2_password身份验证插件的哈希轮数密码存储。
增加哈希轮数的数量将与增加的数量相关的性能开销:
-
创建使用
caching_sha2_password
插件的账户不会影响客户端会话,但服务器必须执行哈希轮数以完成操作。 -
对于使用该账户的客户端连接,服务器必须执行哈希轮数并将结果保存在缓存中。结果是第一次客户端连接的延长登录时间,但不是后续连接。这一行为在每次服务器重启后发生。
-
-
caching_sha2_password_auto_generate_rsa_keys
Command-Line Format --caching-sha2-password-auto-generate-rsa-keys[={OFF|ON}]
System Variable caching_sha2_password_auto_generate_rsa_keys
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value 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.3节,“SHA-256 Pluggable Authentication”和第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”。关于RSA文件自动生成的更多信息,包括文件名和特征,见第8.3.3.1节,“Creating SSL and RSA Certificates and Keys using MySQL”
与之相关的系统变量是
auto_generate_certs
,控制使用SSL进行安全连接时需要的SSL证书和密钥文件的自动生成。 -
caching_sha2_password_private_key_path
Command-Line Format --caching-sha2-password-private-key-path=file_name
System Variable caching_sha2_password_private_key_path
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 Default Value private_key.pem
该变量指定了RSA私钥文件的路径名,为
caching_sha2_password
身份验证插件。文件名如果是相对路径,则将其解释为服务器数据目录相对路径。文件必须以PEM格式存储。Important由于该文件存储私钥,因此其访问权限应该被限制,以便只有MySQL服务器可以读取它。
关于
caching_sha2_password
的信息,请见第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”。 -
caching_sha2_password_public_key_path
Command-Line Format --caching-sha2-password-public-key-path=file_name
System Variable caching_sha2_password_public_key_path
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 Default Value public_key.pem
该变量指定了RSA公钥文件的路径名,为
caching_sha2_password
身份验证插件。如果文件名是相对路径,则将其解释为服务器数据目录相对路径。文件必须以PEM格式存储。关于
caching_sha2_password
的信息,包括客户端请求RSA公钥的信息,请见第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”。 -
System Variable character_set_client
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb4
客户端传来的语句的字符集。会话变量的值是使用客户端连接到服务器时请求的字符集。 (许多客户端支持
--default-character-set
选项,以便显式指定字符集。见第12.4节,“Connection Character Sets and Collations”。)全局变量的值将在客户端请求值不可用或不可用时使用,以便忽略客户端请求。这可能发生在客户端请求未知的字符集时,例如,当日本启用的客户端请求sjis
连接到不支持sjis
的服务器时。某些字符集不能用作客户端字符集。尝试将其用作
character_set_client
值将产生错误。请参阅不可用的客户端字符集。 -
System Variable character_set_connection
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb4
用于指定没有字符集引入符的文字 literals 和数字到字符串的转换的字符集。关于引入符,请参阅第12.3.8节,“字符集引入符”。
-
System Variable character_set_database
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb4
Footnote 这个选项是动态的,但应该由服务器设置。您不应该手动设置这个变量。 用于默认数据库的字符集。服务器在默认数据库更改时设置这个变量。如果没有默认数据库,这个变量的值与
character_set_server
相同。设置这个系统变量的会话值是一个受限制的操作。会话用户必须具有设置受限制的会话变量的权限。请参阅第7.1.9.1节,“系统变量权限”。
全局
character_set_database
和collation_database
系统变量已弃用;在未来的MySQL版本中将其删除。将会话
character_set_database
和collation_database
系统变量的值是弃用的,并且将产生警告。预计在未来的MySQL版本中,这些会话变量将变为只读,并且将在访问这些变量时产生错误。 -
Command-Line Format --character-set-filesystem=name
System Variable 文件系统字符集
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 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节,“系统变量权限”。
-
System Variable character_set_results
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb4
用于将查询结果返回给客户端的字符集。这包括结果数据,如列值、结果元数据,如列名,以及错误消息。
-
Command-Line Format --character-set-server=name
System Variable character_set_server
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb4
服务器的默认字符集。请参阅第12.15节,“字符集配置”。如果您设置了这个变量,请同时设置
collation_server
以指定字符集的排序规则。 -
System Variable character_set_system
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb3
服务器用于存储标识符的字符集。值总是
utf8mb3
。 -
Command-Line Format --character-sets-dir=dir_name
System Variable character_sets_dir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 字符集安装的目录。请参阅第12.15节,“Character Set Configuration”。
-
Command-Line Format --check-proxy-users[={OFF|ON}]
System Variable check_proxy_users
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
一些身份验证插件实现了代理用户映射(例如,PAM和Windows身份验证插件)。其他身份验证插件不支持代理用户默认情况下。这些插件中的一些可以请求MySQL服务器自己映射代理用户根据授予的代理权限:
mysql_native_password
,sha256_password
。如果启用了
check_proxy_users
系统变量,服务器将对身份验证插件请求的代理用户映射进行映射。然而,也可能需要启用插件特定的系统变量以充分利用服务器代理用户映射支持:-
对于已弃用的
mysql_native_password
插件,启用mysql_native_password_proxy_users
。 -
对于
sha256_password
插件,启用sha256_password_proxy_users
。
有关用户代理的信息,请参阅第8.2.19节,“Proxy Users”。
-
-
System Variable collation_connection
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 连接字符集的排序规则。
collation_connection
对于字面字符串的比较非常重要。对于与列值进行比较的字符串,collation_connection
不会影响结果,因为列具有自己的排序规则,该排序规则的优先级高于连接的排序规则(参见第12.8.4节,“排序规则在表达式中的强制性”)。将用户定义的排序规则名称用于该变量将产生警告。
-
System Variable collation_database
Scope 全局, 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb4_0900_ai_ci
Footnote 该选项是动态的,但应该由服务器设置。您不应该手动设置该变量。 默认数据库的排序规则。服务器在默认数据库更改时设置该变量。如果没有默认数据库,该变量的值与
collation_server
相同。全局
character_set_database
和collation_database
系统变量已弃用;在未来的MySQL版本中将其删除。将会话
character_set_database
和collation_database
系统变量的值分配已弃用,并且分配将产生警告。预计在未来的MySQL版本中,该变量将变为只读(并且分配将产生错误),以确定默认数据库的字符集和排序规则。使用用户定义的排序规则名称为
collation_database
将产生警告。 -
Command-Line Format --collation-server=name
System Variable collation_server
Scope 全局, 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value utf8mb4_0900_ai_ci
服务器的默认排序规则。请参见第12.15节,“字符集配置”。
将该变量设置为用户定义的排序规则名称将产生警告。
-
Command-Line Format --completion-type=#
System Variable completion_type
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value NO_CHAIN
Valid Values NO_CHAIN
CHAIN
RELEASE
0
1
2
事务完成类型。这個变量可以取以下表格中的值。该变量可以使用名称值或相应的整数值来分配。
Value Description 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
的情况。 -
Command-Line Format --component-scheduler.enabled[=value]
System Variable component_scheduler.enabled
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
当设置为component_scheduler.enabled时,背景线程将开始服务队列。设置为component_scheduler.enabled时,组件将完全可用。
可以动态设置该值以获取以下效果:
-
ON
开始背景线程,开始服务队列。 -
OFF
信号背景线程的终止,等待其结束。背景线程在访问队列前检查终止标志,以检查是否有任务可执行。
-
-
Command-Line Format --concurrent-insert[=value]
System Variable concurrent_insert
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value AUTO
Valid Values NEVER
AUTO
ALWAYS
0
1
2
如果使用
AUTO
(默认),MySQL 允许INSERT
和SELECT
语句同时执行,对于没有空洞的MyISAM
表。这个变量可以取以下值的表。变量可以使用名称值或相应的整数值来分配。
Value Description NEVER
(或 0)禁用并发插入 AUTO
(或 1)(默认) 允许并发插入,对于没有空洞的 MyISAM
表ALWAYS
(或 2)允许并发插入,对于所有 MyISAM
表,包括有空洞的表。在表中有空洞时,新行将被插入到表的末尾,如果表正在被另一个线程使用,MySQL 将获取正常的写锁并将行插入到空洞中。如果您使用mysqld命令时,使用
--skip-new
,concurrent_insert
将被设置为NEVER
。请参见第10.11.3节,“并发插入”。
-
Command-Line Format --connect-timeout=#
System Variable connect_timeout
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10
Minimum Value 2
Maximum Value 31536000
Unit 秒 mysqld 服务器等待连接包的秒数,响应
Bad handshake
。默认值为10秒。增加
connect_timeout
值可能有助于解决客户端频繁遇到的错误,如Lost connection to MySQL server at '
。XXX
', system error:errno
-
Command-Line Format --connection-memory-chunk-size=#
System Variable connection_memory_chunk_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8192
Minimum Value 0
Maximum Value 536870912
Unit 字节 设置更新全局内存使用计数器
Global_connection_memory
的 chunking 大小。状态变量仅在所有用户连接的总内存使用量变化超过该值时更新。禁用更新设置connection_memory_chunk_size
为0。内存计算不包括系统用户,如MySQL root 用户使用的内存,也不包括
InnoDB
缓冲池使用的内存。您必须拥有
SYSTEM_VARIABLES_ADMIN
或SUPER
特权来设置该变量。 -
Command-Line Format --connection-memory-limit=#
System Variable connection_memory_limit
Scope 全局, 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 18446744073709551615
Minimum Value 2097152
Maximum Value 18446744073709551615
Unit 字节 设置单个用户连接可以使用的最大内存量。如果任何用户连接使用的内存量超过该值,所有来自该连接的查询将被拒绝,包括当前正在运行的查询。
该变量设置的限制不适用于系统用户,也不包括
InnoDB
缓冲池使用的内存。您必须拥有
SYSTEM_VARIABLES_ADMIN
或SUPER
特权来设置该变量。 -
是否在服务器意外退出时写入核心文件。这变量由
--core-file
选项设置。 -
Command-Line Format --create-admin-listener-thread[={OFF|ON}]
System Variable create_admin_listener_thread
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
是否使用专门的监听线程来处理客户端连接在管理网络接口(见第7.1.12.1节,“连接接口”)。默认情况下,
OFF
,即主接口的管理线程也处理管理接口的连接。根据平台类型和工作负载,您可能发现某个设置对性能更好。
create_admin_listener_thread
变量的设置无效,如果admin_address
未指定,因为在这种情况下,服务器不维护任何管理网络接口。 -
Command-Line Format --cte-max-recursion-depth=#
System Variable cte_max_recursion_depth
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1000
Minimum Value 0
Maximum Value 4294967295
常规表达式(CTE)的最大递归深度。服务器在CTE递归更多级别时终止执行CTE的执行。更多信息,请见限制常规表达式递归。
-
Command-Line Format --datadir=dir_name
System Variable datadir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 MySQL服务器数据目录的路径。相对路径将相对于当前目录。如果您期望服务器在自动启动(即在无法预知当前目录的上下文中),那么最好将
datadir
值指定为绝对路径。 -
Command-Line Format --debug[=debug_options]
System Variable debug
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value (Unix) d:t:i:o,/tmp/mysqld.trace
Default Value (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包”。
-
System Variable debug_sync
Scope 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 该变量是Debug Sync facilty的用户界面。使用Debug Sync需要MySQL配置为带有
-DWITH_DEBUG=ON
CMake选项(请参阅第2.8.7节,“MySQL源配置选项”);否则,该系统变量不可用。全局变量的值是只读的,表示该facility是否启用。默认情况下,Debug Sync是禁用的,
debug_sync
的值为OFF
。如果服务器启动时使用--debug-sync-timeout=
,其中N
N
是一个大于0的超时值,Debug Sync将启用,debug_sync
的值将是ON - current signal
,后跟信号名称。同时,N
将成为个体同步点的默认超时值。会话值可以被任何用户读取,并且具有与全局变量相同的值。会话值可以用来控制同步点。
设置会话变量的值是一个受限的操作。会话用户必须具有设置受限会话变量的权限。请参阅第7.1.9.1节,“系统变量权限”。
关于Debug Sync facility和同步点的使用,请参阅MySQL Internals: Test Synchronization。
-
默认身份验证插件。这必须是一个使用内部凭证存储的插件,因此允许的值是:
-
mysql_native_password
(已弃用):使用 MySQL 本机密码;见第8.4.1.1节,“Native Pluggable Authentication”。 -
sha256_password
:使用 SHA-256 密码;见第8.4.1.3节,“SHA-256 Pluggable Authentication”。 -
caching_sha2_password
:使用 SHA-256 密码;见第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”。
关于使用内部凭证存储的身份验证插件的信息,请见第8.2.15节,“Password Management”。
default_authentication_plugin
与authentication_policy
系统变量一起使用,但优先级低于后者。详见The Default Authentication Plugin。default_authentication_plugin
已弃用,可能在未来 MySQL 版本中删除。 -
-
System Variable default_collation_for_utf8mb4
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Valid Values utf8mb4_0900_ai_ci
utf8mb4_general_ci
ImportantThe
default_collation_for_utf8mb4
system variable is for internal use by MySQL Replication only.此变量由服务器设置为
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
编码在以下语句中:-
CREATE TABLE
和ALTER TABLE
,其中包含CHARACTER SET utf8mb4
子句,但没有COLLATION
子句,用于表或列的字符集。 -
CREATE DATABASE
和ALTER DATABASE
,其中包含CHARACTER SET utf8mb4
子句,但没有COLLATION
子句。 -
任何包含形式为
_utf8mb4'
的字符串字面量,且没有some text
'COLLATE
子句的语句。
-
Command-Line Format --default-password-lifetime=#
System Variable default_password_lifetime
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 65535
Unit 天 该变量定义了全局自动密码过期策略。默认的
default_password_lifetime
值为0,这禁用自动密码过期。如果default_password_lifetime
的值是一个正整数N
,它表示允许的密码过期期限;密码必须在N
天内更改。全局密码过期策略可以在创建或更改用户时使用密码过期选项来覆盖,例如使用
CREATE USER
和ALTER USER
语句。请参见第8.2.15节,“密码管理”。 -
Command-Line Format --default-storage-engine=name
System Variable default_storage_engine
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value InnoDB
默认存储引擎用于表。见第18章,<i>备用存储引擎</i>。该变量设置永久表的存储引擎。要设置<code class="literal">TEMPORARY</code>表的存储引擎,请设置
default_tmp_storage_engine
系统变量。要查看可用的存储引擎和启用的存储引擎,请使用
SHOW ENGINES
语句或查询ENGINES
表。如果在服务器启动时禁用默认存储引擎,您必须将永久表和<code class="literal">TEMPORARY</code>表的存储引擎设置为不同的引擎,否则服务器将无法启动。
-
Command-Line Format --default-table-encryption[={OFF|ON}]
System Variable default_table_encryption
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
定义了在创建表空间和通用表空间时应用的默认加密设置,不指定<code class="literal">ENCRYPTION</code>子句时。
变量<a class="link" href="server-system-variables.html#sysvar_default_table_encryption">
default_table_encryption
mysql</code>系统表空间。设置<a class="link" href="server-system-variables.html#sysvar_default_table_encryption">
default_table_encryption
SYSTEM_VARIABLES_ADMIN
TABLE_ENCRYPTION_ADMIN
SUPER
default_table_encryption
SET PERSIST
SET PERSIST_ONLY
第7.1.9.3节,“持久系统变量”更多信息,请见定义架构和通用表空间的加密默认值.
-
Command-Line Format --default-tmp-storage-engine=name
System Variable default_tmp_storage_engine
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 枚举 Default Value InnoDB
临时表(使用
CREATE TEMPORARY TABLE
创建)的默认存储引擎。要设置永久表的存储引擎,请设置default_storage_engine
系统变量。还请查看该变量的讨论,以了解可能的值。如果在服务器启动时禁用默认存储引擎,您必须将永久表和临时表的默认引擎设置为不同的引擎,否则服务器将无法启动。
-
Command-Line Format --default-week-format=#
System Variable default_week_format
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 7
WEEK()函数的默认模式值。请见第14.7节,“日期和时间函数”.
-
Command-Line Format --delay-key-write[={OFF|ON|ALL}]
System Variable delay_key_write
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value ON
Valid Values OFF
ON
ALL
该变量指定延迟键写入的方式。它仅适用于MyISAM表。延迟键写入使键缓冲区不在写入之间刷新。请见第18.2.1节,“MyISAM 启动选项”.
该变量可以设置为以下值,以影响
DELAY_KEY_WRITE
表选项的处理,该选项可以在CREATE TABLE
语句中使用。Option Description OFF
DELAY_KEY_WRITE
将被忽略。ON
MySQL 将尊重在 CREATE TABLE
语句中指定的DELAY_KEY_WRITE
选项。这是默认值。ALL
所有新的打开的表将被视为使用 DELAY_KEY_WRITE
选项启用。Note如果您将该变量设置为
ALL
,则不要在另一个程序(例如另一个 MySQL 服务器或myisamchk)中使用MyISAM
表时,这可能会导致索引损坏。如果
DELAY_KEY_WRITE
为某个表启用,则在索引更新时不flush该表的键缓冲区,但是在表关闭时才flush。这可以大大加速写入键操作,但如果您使用了该特性,您应该在启动服务器时将myisam_recover_options
系统变量设置为(例如:myisam_recover_options='BACKUP,FORCE'
)。见第7.1.8节,“服务器系统变量”和第18.2.1节,“MyISAM 启动选项”。如果您使用mysqld启动时使用
--skip-new
,则delay_key_write
将被设置为OFF
。Warning如果您启用外部锁定使用
--external-locking
,则没有保护索引损坏的保护机制对使用延迟写入的表。 -
Command-Line Format --delayed-insert-limit=#
Deprecated 是 System Variable delayed_insert_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 100
Minimum Value 1
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
该系统变量已被弃用(因为
DELAYED
插入不再支持),您应该预期在将来版本中删除该变量。 -
Command-Line Format --延迟插入超时=#
Deprecated 是 System Variable 延迟插入超时
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 300
Minimum Value 1
Maximum Value 31536000
Unit 秒 这个系统变量已经弃用(因为不支持
延迟
插入),您应该期望在将来的一次发布中删除它。 -
Command-Line Format --延迟队列大小=#
Deprecated 是 System Variable 延迟队列大小
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1000
Minimum Value 1
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
这个系统变量已经弃用(因为不支持
延迟
插入),您应该期望在将来的一次发布中删除它。 -
Command-Line Format --禁用存储引擎=引擎[,引擎]...
System Variable 禁用存储引擎
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value 空字符串
这个变量指示哪些存储引擎不能用来创建表或表空间。例如,要防止创建新的
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
Command-Line Format --disconnect-on-expired-password[={OFF|ON}]
System Variable disconnect_on_expired_password
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
该变量控制服务器如何处理密码过期的客户端:
-
如果客户端表示可以处理过期密码,
disconnect_on_expired_password
的值无关紧要。服务器允许客户端连接,但将其置于沙盒模式。 -
如果客户端不表示可以处理过期密码,服务器根据
disconnect_on_expired_password
的值处理客户端:-
如果
disconnect_on_expired_password
启用,服务器断开客户端连接。 -
如果
disconnect_on_expired_password
禁用,服务器允许客户端连接,但将其置于沙盒模式。
-
有关客户端和服务器设置之间的过期密码处理交互的更多信息,请参阅第8.2.16节,“服务器处理过期密码”。
-
-
Command-Line Format --div-precision-increment=#
System Variable div_precision_increment
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 4
Minimum Value 0
Maximum Value 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
Command-Line Format --dragnet.log-error-filter-rules=value
System Variable dragnet.log_error_filter_rules
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 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
Command-Line Format --enterprise-encryption.maximum-rsa-key-size=#
System Variable enterprise_encryption.maximum_rsa_key_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 4096
Minimum Value 2048
Maximum Value 16384
该变量限制了MySQL Enterprise Encryption生成的RSA密钥的最大大小。该变量仅在MySQL Enterprise Encryption组件
component_enterprise_encryption
安装时可用。最低设置为2048位,这是当前最佳实践中接受的最小RSA密钥长度。默认设置为4096位。最高设置为16384位。生成更长的密钥可能会消耗大量CPU资源,因此您可以使用该设置来限制密钥长度以满足您的安全需求,同时平衡资源使用。请参阅第8.6.2节,“配置MySQL Enterprise Encryption”获取更多信息。
-
enterprise_encryption.rsa_support_legacy_padding
Command-Line Format --enterprise-encryption.rsa_support_legacy_padding[={OFF|ON}]
System Variable enterprise_encryption.rsa_support_legacy_padding
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
该变量控制MySQL Enterprise Encryption组件是否可以解密或验证使用旧的
openssl_udf
共享库函数生产的加密数据和签名。该变量仅在MySQL Enterprise Encryption组件安装时可用。为了支持解密和验证旧的
openssl_udf
共享库函数生产的内容,必须将系统变量padding设置为ON
。当ON
设置时,如果组件函数无法解密或验证内容,假设它使用了RSAES-OAEP或RSASSA-PSS方案(用于组件),它们将再次尝试假设它使用了RSAES-PKCS1-v1_5或RSASSA-PKCS1-v1_5方案(用于openssl_udf
共享库函数)。当OFF
设置时,如果组件函数无法使用正常方案解密或验证内容,它们将返回null输出。请参阅第8.6.2节,“配置MySQL Enterprise Encryption”获取更多信息。 -
Command-Line Format --end-markers-in-json[={OFF|ON}]
System Variable end_markers_in_json
Scope 全局,会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
是否将优化器JSON输出添加结尾标记。请参阅MySQL Internals: The end_markers_in_json System Variable。
-
Command-Line Format --eq-range-index-dive-limit=#
System Variable eq_range_index_dive_limit
Scope 全局,会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 200
Minimum Value 0
Maximum Value 4294967295
该变量指示在等式比较条件中等式范围的数量,优化器将从使用索引探测到使用索引统计信息以估算符合行数。它适用于评估表达式,它们具有以下等价形式,其中优化器使用非唯一索引来查找
col_name
值:col_name IN(val1, ..., valN) col_name = val1 OR ... OR col_name = valN
在这两种情况中,表达式包含
N
等值范围。优化器可以使用索引分支或索引统计来进行行估算。如果eq_range_index_dive_limit
大于0,优化器将使用现有索引统计,而不是索引分支,如果存在N
等值范围或更多。因此,要允许使用索引分支来处理最多N
等值范围,请将eq_range_index_dive_limit
设置为N
+1。要禁用索引统计的使用,并总是使用索引分支,无论N
,请将eq_range_index_dive_limit
设置为0。更多信息,请见多值比较的等值范围优化。
要更新表的索引统计,以获取最佳估算,请使用
ANALYZE TABLE
。 -
上一个语句生成的错误数。这是一个只读变量。请见SHOW ERRORS语句。
-
Command-Line Format --event-scheduler[=value]
System Variable event_scheduler
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value ON
Valid Values ON
OFF
DISABLED
这个变量可以启用或禁用、启动或停止事件调度器。可能的状态值是
ON
、OFF
和DISABLED
。将事件调度器设置为OFF
不同于禁用事件调度器,需要将状态设置为DISABLED
。这个变量和事件调度器的操作详见事件调度器配置。 -
Command-Line Format --explain-format=format
System Variable explain_format
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value 传统
Valid Values 传统 (默认)
JSON
树形
该变量确定了在 absence of a
FORMAT
选项时,EXPLAIN
的默认输出格式。可能的值及其效果如下:-
传统
: 使用 MySQL 的传统表格输出,如如果FORMAT=传统
作为EXPLAIN
语句的一部分指定一样。这是变量的默认值。默认
也支持作为传统
的同义词,并且具有相同的效果。Note默认
不能作为EXPLAIN
语句的FORMAT
选项的一部分。 -
JSON
: 使用 JSON 输出格式,如如果FORMAT=JSON
作为EXPLAIN
语句的一部分指定。 -
树形
: 使用树形输出格式,如如果FORMAT=树形
作为EXPLAIN
语句的一部分指定。
该变量的设置也影响
EXPLAIN ANALYZE
。对于这个目的,默认
和传统
将被解释为树形
。如果explain_format
的值为JSON
,并且没有FORMAT
选项的EXPLAIN ANALYZE
语句,则语句将引发错误 (ER_NOT_SUPPORTED_YET
).使用格式指定符与
EXPLAIN
或EXPLAIN ANALYZE
将覆盖explain_format
的设置。该变量的
explain_format
系统变量对EXPLAIN
输出无效,当该语句用于显示表列信息时。设置
explain_format
会话值不需要特殊权限;在全局级别设置它需要SYSTEM_VARIABLES_ADMIN
(或已弃用的SUPER
权限)。见Section 7.1.9.1,“系统变量权限”。更多信息和示例,请见获取执行计划信息。
-
-
Command-Line Format --explain-json-format-version=#
System Variable explain_json_format_version
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 1
Maximum Value 2
确定了
EXPLAIN FORMAT=JSON
语句的 JSON 输出格式版本。将该变量设置为1
将使服务器使用 Version 1,这是 MySQL 8.4 中的默认值;将explain_json_format_version
设置为2
将使服务器使用 Version 2,这种 JSON 输出格式基于访问路径,旨在为将来的 MySQL 优化器提供更好的兼容性。例如,请参见获取执行计划信息。
-
explicit_defaults_for_timestamp
Command-Line Format --explicit-defaults-for-timestamp[={OFF|ON}]
Deprecated 是 System Variable explicit_defaults_for_timestamp
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
该系统变量确定了服务器是否启用某些非标准行为,以便在
TIMESTAMP
列中启用默认值和NULL
-值处理。默认情况下,explicit_defaults_for_timestamp
已启用,禁用非标准行为。禁用explicit_defaults_for_timestamp
将导致警告。如果
explicit_defaults_for_timestamp
被禁用,服务器将启用非标准行为,并将TIMESTAMP
列处理为以下方式:-
TIMESTAMP
列不明确声明为NULL
的将自动声明为NOT NULL
。将这样的列分配一个值为NULL
的将设置该列的当前时间。Exception:尝试将NULL
插入生成的列声明为TIMESTAMP NOT NULL
的将被拒绝错误。 -
表中的第一个
TIMESTAMP
列,如果没有明确地使用NULL
属性或明确的DEFAULT
或ON UPDATE
属性,则自动声明为DEFAULT CURRENT_TIMESTAMP
和ON UPDATE CURRENT_TIMESTAMP
。 -
TIMESTAMP
列,紧随其后的,如果没有明确地使用NULL
属性或明确的DEFAULT
属性,则自动声明为DEFAULT '0000-00-00 00:00:00'
(零时间戳)。对于插入的行,如果该列没有指定明确的值,该列将被分配'0000-00-00 00:00:00'
,并且不会出现警告。根据是否启用严格SQL模式或
NO_ZERO_DATE
SQL模式,'0000-00-00 00:00:00'
的默认值可能无效。请注意,TRADITIONAL
SQL模式包括严格模式和NO_ZERO_DATE
。请参阅第7.1.11节,“服务器SQL模式”。
描述的非标准行为已弃用;预计将在未来的MySQL版本中删除。
如果启用了
explicit_defaults_for_timestamp
,服务器将禁用非标准行为,并将TIMESTAMP
列处理如下:-
不能将
TIMESTAMP
列设置为NULL
以设置当前时间戳。要设置当前时间戳,请将列设置为CURRENT_TIMESTAMP
或同义词,如NOW()
。 -
TIMESTAMP
列,如果没有明确地使用NOT NULL
属性,则自动声明为NULL
属性,并允许NULL
值。将该列设置为NULL
将其设置为NULL
,而不是当前时间戳。 -
TIMESTAMP
列,声明了NOT NULL
属性,不允许NULL
值。对于指定NULL
值的插入操作,如果启用严格SQL模式,则会出现错误;否则,在禁用严格SQL模式的情况下,将插入'0000-00-00 00:00:00'
。在任何情况下,设置该列的值为NULL
都不会将其设置为当前时间戳。 -
TIMESTAMP
列,显式声明了NOT NULL
属性,但没有显式DEFAULT
属性,视为没有默认值。对于插入的行,如果没有为该列指定明确的值,结果取决于SQL模式。如果启用严格SQL模式,会出现错误;否则,在禁用严格SQL模式的情况下,该列将被隐式设置为'0000-00-00 00:00:00'
,并出现警告。这与MySQL处理其他时间类型,例如DATETIME
类似。 -
没有
TIMESTAMP
列自动声明为DEFAULT CURRENT_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
系统变量在服务器启动时。Noteexplicit_defaults_for_timestamp
本身是弃用的,因为它的唯一目的是允许控制弃用的TIMESTAMP
行为,这些行为将在未来的MySQL版本中被删除。等到这些行为被删除时,预计explicit_defaults_for_timestamp
也将被删除。更多信息,请见
Section 13.2.5, “Automatic Initialization and Updating for TIMESTAMP and DATETIME”
。 -
-
System Variable external_user
Scope 会话 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 用于身份验证过程中的外部用户名称,由用于身份验证的插件设置。使用native(内置)MySQL身份验证或插件未设置值时,这个变量将是
NULL
。请参阅第8.2.19节,“代理用户”。 -
Command-Line Format --flush[={OFF|ON}]
System Variable flush
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果
ON
,服务器将在每个SQL语句后flush(同步)所有更改到磁盘。如果通常情况下,MySQL将在每个SQL语句后将所有更改写入磁盘,并让操作系统处理同步到磁盘。请参阅第B.3.3.3节,“如果MySQL不断崩溃”。这个变量在使用mysqld时设置为ON
,使用--flush
选项。Note如果启用了
flush
,flush_time
的值无关紧要,flush_time
的变化对flush行为无影响。 -
Command-Line Format --flush-time=#
System Variable flush_time
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 31536000
Unit 秒 如果设置为非零值,所有表每
flush_time
秒关闭,以释放资源并同步未flush的数据到磁盘。这个选项最好在资源有限的系统上使用。Note如果启用了
flush
,flush_time
的值无关紧要,flush_time
的变化对flush行为无影响。 -
System Variable foreign_key_checks
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value ON
如果设置为1(默认),外键约束将被检查。如果设置为0,外键约束将被忽略,除了几个例外。在重新创建一个被删除的表时,如果表定义不符合引用该表的外键约束,将返回错误。类似地,
ALTER TABLE
操作将返回错误,如果外键定义不正确。更多信息,请见第15.1.20.5节,“FOREIGN KEY Constraints”。设置这个变量对
NDB
表的影响与对InnoDB
表的影响相同。通常,在正常操作中,您应该将其设置为启用,以确保引用完整性。禁用外键检查可以在重新加载InnoDB
表时,使用不同的顺序。见第15.1.20.5节,“FOREIGN KEY Constraints”。设置
foreign_key_checks
到0也会影响数据定义语句:DROP SCHEMA
将删除一个包含外键的架构,即使该架构中的表引用了外部表,DROP TABLE
将删除包含外键的表,即使该表引用了其他表。Note设置
foreign_key_checks
到1不会触发对现有表数据的扫描。因此,在foreign_key_checks = 0
期间添加到表中的行不需要验证一致性。删除一个由外键约束所需的索引是不可行的,即使
foreign_key_checks=0
。外键约束必须被删除后才能删除索引。 -
Command-Line Format --ft-boolean-syntax=name
System Variable ft_boolean_syntax
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value + -><()~*:""&|
支持的布尔全文搜索操作符列表,用于使用
IN BOOLEAN MODE
的全文搜索。见第14.9.2节,“Boolean Full-Text Searches”。默认变量值是
'+ -><()~*:""&|'
。变量值的更改规则如下:-
操作符函数由字符串中的位置确定。
-
替换值必须是14个字符。
-
每个字符都必须是ASCII非字母数字字符。
-
第一个或第二个字符必须是空格。
-
不允许重复,except在位置11和12的引号操作符。这些两个字符不需要相同,但它们是唯一的两个可以是的。
-
位置10、13和14(默认设置为
:
、&
和|
)保留用于未来的扩展。
-
-
Command-Line Format --ft-max-word-len=#
System Variable ft_max_word_len
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 84
Minimum Value 10
Maximum Value 84
MyISAM
FULLTEXT
索引中的单词的最大长度。NoteMyISAM 表的
FULLTEXT
索引必须在更改该变量后重建。使用REPAIR TABLE
。tbl_name
QUICK -
Command-Line Format --ft-min-word-len=#
System Variable ft_min_word_len
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 4
Minimum Value 1
Maximum Value 82
MyISAM
FULLTEXT
索引中的单词的最小长度。NoteMyISAM 表的
FULLTEXT
索引必须在更改该变量后重建。使用REPAIR TABLE
。tbl_name
QUICK -
Command-Line Format --ft-query-expansion-limit=#
System Variable ft_query_expansion_limit
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 20
Minimum Value 0
Maximum Value 1000
使用
WITH QUERY EXPANSION
执行的全文搜索的匹配数量限制。 -
Command-Line Format --ft-stopword-file=文件名
System Variable ft_stopword_file
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 从哪个文件中读取全文搜索的停用词列表,以便在
MyISAM
表中执行全文搜索。服务器将在数据目录中寻找文件,除非指定了绝对路径以指定不同的目录。文件中的所有单词都将被使用;注释将被忽略。默认情况下,使用内置的停用词列表(在storage/myisam/ft_static.c
文件中定义)。将该变量设置为空字符串(''
)将禁用停用词 filtering。请参阅第14.9.4节,“全文停用词”。NoteFULLTEXT
索引在MyISAM
表中必须在更改该变量或停用词文件的内容后重建。使用REPAIR TABLE
。tbl_name
QUICK -
Command-Line Format --general-log[={OFF|ON}]
System Variable general_log
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
是否启用通用查询日志。值可以是0(或
OFF
)以禁用日志或1(或ON
)以启用日志。日志输出的目标由log_output
系统变量控制;如果该值为NONE
,则不写入任何日志条目,即使日志启用。 -
Command-Line Format --general-log-file=文件名
System Variable general_log_file
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value host_name.log
通用查询日志文件的名称。默认值为
,但可以使用host_name
.log--general_log_file
选项来更改初始值。 -
generated_random_password_length
Command-Line Format --generated-random-password-length=#
System Variable generated_random_password_length
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 20
Minimum Value 5
Maximum Value 255
CREATE USER、ALTER USER 和 SET PASSWORD 语句中允许的随机密码的最大字符数。更多信息,请见Random Password Generation。
-
global_connection_memory_limit
Command-Line Format --global-connection-memory-limit=#
System Variable global_connection_memory_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 18446744073709551615
Minimum Value 16777216
Maximum Value 18446744073709551615
Unit 字节 设置所有用户连接的总内存使用量;即
Global_connection_memory
不应超过这个值。任何时候,如果它超过,这些查询(包括当前正在运行的查询)将被来自普通用户的拒绝,以ER_GLOBAL_CONN_LIMIT
错误。系统用户,如 MySQL root 用户的内存使用量被包括在总内存使用量中,但不会计入断开连接的限制;这些用户永远不会由于内存使用而断开连接。
InnoDB 缓冲池的内存使用量除外。
您必须拥有
SYSTEM_VARIABLES_ADMIN
或SUPER
特权来设置这个变量。 -
global_connection_memory_tracking
Command-Line Format --global-connection-memory-tracking={TRUE|FALSE}
System Variable global_connection_memory_tracking
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value FALSE
确定服务器是否计算
Global_connection_memory
。这个变量必须被启用explicitly;否则,内存计算不进行,Global_connection_memory
不被设置。您必须拥有
SYSTEM_VARIABLES_ADMIN
或SUPER
权限,以设置该变量。 -
Command-Line Format --group-concat-max-len=#
System Variable group_concat_max_len
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 1024
Minimum Value 4
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
GROUP_CONCAT()函数的最大结果长度(以字节为单位)。默认值为1024。
-
如果服务器可用zlib压缩库,则为
YES
,否则为NO
。如果不是,则不能使用COMPRESS()
和UNCOMPRESS()
函数。 -
如果mysqld支持动态加载插件,则为
YES
,否则为NO
。如果值为NO
,则不能使用选项如--plugin-load
在服务器启动时加载插件,也不能使用INSTALL PLUGIN
语句在运行时加载插件。 -
如果服务器支持空间数据类型,则为
YES
,否则为NO
。 -
如果语句 profiling 能力存在,则为
YES
,否则为NO
。如果存在,则系统变量profiling
控制是否启用或禁用该能力。请参阅Section 15.7.7.32, “SHOW PROFILES Statement”。该变量已弃用;您应该预期在未来 MySQL 发布中将其删除。
-
have_query_cache
已弃用,总是返回NO
,您应该预期在未来的 MySQL 版本中将其删除。 -
YES
如果存在RTREE
索引,NO
如果不存在。 (这些用于MyISAM
表中的空间索引。) -
System Variable have_statement_timeout
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean 是否可用语句执行超时功能(见语句执行时间优化器提示)。值可以是
NO
如果该功能的背景线程无法初始化。 -
YES
如果符号链接支持启用,NO
如果不启用。这是 Unix 上的要求,以支持DATA DIRECTORY
和INDEX DIRECTORY
表选项。如果服务器使用--skip-symbolic-links
选项启动,值为DISABLED
。在 Windows 上,这个变量没有意义。
Note符号链接支持,及其控制它的
--symbolic-links
选项,已弃用;预期将在未来的 MySQL 版本中删除。此外,该选项默认禁用。相关的have_symlink
系统变量也已弃用,您应该预期将在未来的 MySQL 版本中删除。 -
histogram_generation_max_mem_size
Command-Line Format --histogram-generation-max-mem-size=#
System Variable histogram_generation_max_mem_size
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 20000000
Minimum Value 1000000
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
Unit 字节 内存可用量的最大值,以用于生成histogram统计信息。见第10.9.6节,“优化器统计信息”,和第15.7.3.1节,“ANALYZE TABLE 语句”。
设置会话变量的值是一个受限制的操作。会话用户必须具有足够的权限以设置受限制的会话变量。见第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --host-cache-size=#
System Variable host_cache_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value -1
(表示自动调整;不要分配该字面值)Minimum Value 0
Maximum Value 65536
MySQL 服务器维护一个内存中的主机缓存,该缓存包含客户端主机名和IP地址信息,并用于避免Domain Name System(DNS)查找;见第7.1.12.3节,“DNS 查找和主机缓存”。
变量
host_cache_size
控制主机缓存的大小,以及性能Schemahost_cache
表的大小,该表公开缓存内容。设置host_cache_size
具有以下效果:-
将大小设置为0禁用主机缓存。禁用缓存后,服务器每次连接客户端时都会执行DNS查找。
-
更改大小时将隐式执行主机缓存刷新操作,该操作将清除主机缓存,截断
host_cache
表,并解锁任何阻塞的主机。
默认值是自动调整到128 plus 1 for a value of
max_connections
up to 500, plus 1 for every increment of 20 over 500 in themax_connections
value, capped to a limit of 2000. -
-
服务器在启动时将该变量设置为服务器主机名。最大长度为255个字符。
-
该变量是
last_insert_id
变量的同义词。它存在于与其他数据库系统的兼容性。您可以使用SELECT @@identity
读取其值,并使用SET identity
设置它。 -
Command-Line Format --init-connect=name
System Variable init_connect
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 每个客户端连接时,服务器将执行该字符串。该字符串由一个或多个SQL语句组成,使用分号字符分隔。
对拥有
CONNECTION_ADMIN
特权(或弃用的SUPER
特权)的用户,init_connect
的内容将不执行。这是为了防止因init_connect
的错误值而导致客户端连接失败。例如,值可能包含语法错误的语句,从而导致客户端连接失败。为用户提供了拥有CONNECTION_ADMIN
或SUPER
特权的能力,可以打开连接并修复init_connect
的值。init_connect
的执行将被跳过任何已过期密码的客户端用户。这是因为这样一个用户不能执行任意语句,因此init_connect
的执行将失败,导致客户端无法连接。跳过init_connect
的执行使用户可以连接并更改密码。服务器将丢弃
init_connect
中的结果集。 -
information_schema_stats_expiry
Command-Line Format --information-schema-stats-expiry=#
System Variable information_schema_stats_expiry
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 86400
Minimum Value 0
Maximum Value 31536000
Unit 秒 一些
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
模式时。 -
当查询也 fetches Performance Schema 数据时。
统计缓存可能在多语句事务中更新,直到事务提交前,这可能导致缓存中包含未知提交状态的信息。这可能发生在
autocommit=0
或START TRANSACTION
之后。information_schema_stats_expiry
是一个会话变量,每个客户端会话都可以定义自己的过期值。由一个会话缓存的统计信息可供其他会话使用。 -
-
Command-Line Format --init-file=file_name
System Variable init_file
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 如果指定了该变量,则该变量将指定一个包含SQL语句的文件,该文件将在启动过程中被读取和执行。该文件支持以下构造:
-
delimiter ;
-
delimiter $$
-
同一行上的多个语句,使用当前分隔符。
-
多行语句。
-
从
#
字符到行尾的注释。 -
从
--
序列到行尾的注释。 -
C风格的注释,从
/*
序列到*/
序列,包括跨行的注释。 -
多行字符串字面量,使用单引号(
'
)或双引号("
)字符。
如果服务器使用
--initialize
或--initialize-insecure
选项,则它将在引导模式下运行,并且某些功能不可用,这些功能包括与帐户管理(如CREATE USER
或GRANT
)相关的语句、复制和全局事务标识符。请参见第19.1.3节,“Replication with Global Transaction Identifiers”在服务器启动时创建的线程将用于任务,如创建数据字典、运行升级程序和创建系统表。为了确保稳定和可预测的环境,这些线程将使用服务器的内置默认值来执行某些系统变量,如
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是默认存储引擎。 -
将被用于以下
INSERT
或ALTER TABLE
语句中插入的AUTO_INCREMENT值。这主要用于二进制日志。 -
Command-Line Format --interactive-timeout=#
System Variable interactive_timeout
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 28800
Minimum Value 1
Maximum Value 31536000
Unit 秒 服务器等待交互连接上的活动时间,以便关闭该连接。交互客户端是指使用
mysql_real_connect()
的客户端。请参阅wait_timeout
。 -
internal_tmp_mem_storage_engine
Command-Line Format --internal-tmp-mem-storage-engine=#
System Variable internal_tmp_mem_storage_engine
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 枚举 Default Value TempTable
Valid Values MEMORY
TempTable
内存临时表存储引擎(见第10.4.4节,“MySQL中内部临时表使用”)。允许的值是
TempTable
(默认)和MEMORY
。优化器使用optimizer根据
internal_tmp_mem_storage_engine
定义的存储引擎来处理内存临时表。为
internal_tmp_mem_storage_engine
设置会话设置需要SESSION_VARIABLES_ADMIN
或SYSTEM_VARIABLES_ADMIN
特权。 -
Command-Line Format --join-buffer-size=#
System Variable join_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 262144
Minimum Value 128
Maximum Value (Windows) 4294967168
Maximum Value (Other, 64-bit platforms) 18446744073709551488
Maximum Value (Other, 32-bit platforms) 4294967168
Unit 字节 Block Size 128
用于简单索引扫描、范围索引扫描和不使用索引的连接的缓冲区的最小大小。此变量还控制了哈希连接的内存使用。通常,获取快速连接的最佳方法是添加索引。增加
join_buffer_size
的值以获取快速全连接时添加索引不可行。每个全连接都分配一个连接缓冲区。对于使用索引不可行的复杂连接,可能需要多个连接缓冲区。默认值为256KB。
join_buffer_size
的最大允许设置为4GB−1。64位平台(除了64位Windows,64位平台的large值将被截断到4GB−1并显示警告)。块大小为128,MySQL Server在存储变量值之前将值rounded down到下一个整数倍的块大小。解析器允许的最大值为平台的最大无符号整数值(4294967295或232−1对于32位系统,18446744073709551615或264−1对于64位系统),但实际最大值是块大小以下。除非使用 Block Nested-Loop 或 Batched Key Access 算法,否则将 buffer 大小设置为每个匹配行所需的大小,并且所有连接操作至少分配最小大小,因此在全局设置时请小心设置该变量。更好的是,在会话中设置较大值,只在执行大连接操作的会话中设置该变量,或者使用
SET_VAR
优化提示 (见第10.9.3节,“Optimizer Hints”)。内存分配时间可能会导致性能下降,如果全局大小大于大多数查询所需的大小。当使用 Block Nested-Loop 时,较大的连接缓冲区可以提高性能,直到所有必要的列从所有行中存储在连接缓冲区中。这取决于查询;最优大小可能小于存储所有行的第一张表。
当使用 Batched Key Access 时,
join_buffer_size
变量定义了每个请求到存储引擎的键批次大小。缓冲区越大,右侧表的顺序访问将变得更频繁,这可以显著提高性能。有关连接缓冲的更多信息,请见第10.2.1.7节,“Nested-Loop Join Algorithms”。有关 Batched Key Access 的信息,请见第10.2.1.12节,“Block Nested-Loop and Batched Key Access Joins”。有关 Hash 连接的信息,请见第10.2.1.4节,“Hash Join Optimization”。
-
Command-Line Format --keep-files-on-create[={OFF|ON}]
System Variable keep_files_on_create
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
如果使用
MyISAM
表创建了没有指定DATA DIRECTORY
选项的表,.MYD
文件将在数据库目录中创建。如果MyISAM
发现了现有.MYD
文件,在这种情况下,它将覆盖该文件。同样,对于没有指定INDEX DIRECTORY
选项的表,.MYI
文件将在数据库目录中创建。如果想要抑制这种行为,请将keep_files_on_create
变量设置为ON
(1),在这种情况下,MyISAM
不会覆盖现有文件,而是返回错误。默认值为OFF
(0)。如果使用
MyISAM
表创建了具有DATA DIRECTORY
或INDEX DIRECTORY
选项的表,并且发现了现有.MYD
或.MYI
文件,MyISAM
总是返回错误。它不会覆盖指定目录中的文件。 -
Command-Line Format --key-buffer-size=#
System Variable key_buffer_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8388608
Minimum Value 0
Maximum Value (64-bit platforms) OS_PER_PROCESS_LIMIT
Maximum Value (32-bit platforms) 4294967295
Unit 字节 MyISAM 表的索引块是缓冲的,所有线程共享。
key_buffer_size
是索引块缓冲区的大小。索引缓冲区也称为键缓冲区。最小的可接受设置是0,但是不能动态地将
key_buffer_size
设置为0。将key_buffer_size
设置为0只能在启动时进行,否则将无法初始化键缓冲区。将key_buffer_size
设置从0更改到非零值将初始化键缓冲区。key_buffer_size
只能以4096字节的倍数或整数增加或减少。增加或减少设置的非标准值将产生警告,并将设置截断到标准值。MyISAM 存储引擎的最大可接受设置为4GB-1在32位平台上。64位平台上允许更大的值。实际的最大值可能取决于您的可用物理RAM和每个进程的RAM限制,取决于您的操作系统或硬件平台。该变量的值表示请求的内存量。服务器将尽可能地分配内存,但实际分配的内存可能小于该值。
您可以增加该值以获得更好的索引处理性能,对于所有读取和多个写入操作;在使用
MyISAM
存储引擎的系统上,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,如果您主要使用更新和删除操作,但可能会小于1,如果您经常执行更新操作影响多行或使用key_buffer_size
系统变量。可以使用
key_buffer_size
和Key_blocks_unused
状态变量,结合缓冲区块大小,计算键缓冲区的使用率。1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)
这个值是一个近似值,因为一些缓冲区空间用于内部结构。影响这些结构的因素包括块大小和指针大小。块大小增加时,缓冲区的使用率会减少。较大块结果在读取操作中读取更多键,但读取的键不一定是查询的键。
可以创建多个
key_cache_block_size
系统变量。每个缓冲区的大小限制为4GB,不是总的限制。请参阅第10.10.2节,“MyISAM键缓存”。 -
Command-Line Format --key-cache-age-threshold=#
System Variable key_cache_age_threshold
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 300
Minimum Value 100
Maximum Value (64-bit platforms) 18446744073709551516
Maximum Value (32-bit platforms) 4294967196
Block Size 100
该值控制缓冲区从热子列表到温子列表的降级。较低的值会导致降级更快。最小值为100。默认值为300。见第10.10.2节,“MyISAM键缓存”。
-
Command-Line Format --key-cache-block-size=#
System Variable key_cache_block_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1024
Minimum Value 512
Maximum Value 16384
Unit 字节 Block Size 512
键缓存块的大小,以字节为单位。默认值为1024。见第10.10.2节,“MyISAM键缓存”。
-
Command-Line Format --key-cache-division-limit=#
System Variable key_cache_division_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 100
Minimum Value 1
Maximum Value 100
键缓存缓冲区列表的热和温子列表的分界点。值是缓冲区列表中用于温子列表的百分比。允许的值范围从1到100。默认值为100。见第10.10.2节,“MyISAM键缓存”。
-
System Variable large_files_support
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 是否编译了支持大文件的mysqld。
-
Command-Line Format --large-pages[={OFF|ON}]
System Variable large_pages
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Platform Specific Linux Type 布尔 Default Value OFF
是否启用大页支持(通过--large-pages选项)。见第10.12.3.3节,“Enabling Large Page Support”。
-
System Variable large_page_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 65535
Unit 字节 如果启用了大页支持,这将显示内存页的大小。只有在 Linux 平台上支持大页;在其他平台上,这个变量的值总是 0。请参阅第 10.12.3.3 节,“启用大页支持”。
-
将被返回的值是
LAST_INSERT_ID()
的值。这在使用LAST_INSERT_ID()
在更新表的语句时将被存储在二进制日志中。设置这个变量不会更新mysql_insert_id()
C API 函数的返回值。 -
Command-Line Format --lc-messages=name
System Variable lc_messages
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value en_US
错误消息的语言设置。默认为
en_US
。服务器将将参数转换为语言名称,并将其与lc_messages_dir
的值组合,以产生错误消息文件的位置。请参阅第 12.12 节,“设置错误消息语言”。 -
Command-Line Format --lc-messages-dir=dir_name
System Variable lc_messages_dir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 错误消息文件的目录。服务器将使用该值和
lc_messages
的值来产生错误消息文件的位置。请参阅第 12.12 节,“设置错误消息语言”。 -
Command-Line Format --lc-time-names=value
System Variable lc_time_names
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 该变量指定控制显示日期和月份名称和缩写的语言。该变量影响了
DATE_FORMAT()
、DAYNAME()
和MONTHNAME()
函数的输出。locale名称是POSIX风格的值,如'ja_JP'
或'pt_BR'
。默认值是'en_US'
,无论系统的locale设置如何。有关详细信息,请参见第12.16节,“MySQL Server Locale Support”。 -
服务器的许可类型。
-
Command-Line Format --local-infile[={OFF|ON}]
System Variable local_infile
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
该变量控制服务器端
LOAD DATA
语句的LOCAL能力。根据local_infile
设置,服务器拒绝或允许客户端具有LOCAL能力的数据加载。要明确地导致服务器拒绝或允许
LOAD DATA LOCAL
语句(无论客户端程序和库在编译或运行时的配置),启动mysqld并将local_infile
设置为禁用或启用。可以在运行时设置local_infile
。有关更多信息,请参见第8.1.6节,“LOAD DATA LOCAL安全考虑”。 -
Command-Line Format --lock-wait-timeout=#
System Variable lock_wait_timeout
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 31536000
Minimum Value 1
Maximum Value 31536000
Unit 秒 该变量指定尝试获取元数据锁定的超时秒数。允许的值范围从1到31536000(1年)。默认值为31536000。
该超时对所有使用元数据锁定的语句生效。这些语句包括DML和DDL操作、表、视图、存储过程和存储函数、
LOCK TABLES
、FLUSH TABLES WITH READ LOCK
和HANDLER
语句。该超时不适用于隐式访问系统表的隐式访问,例如
GRANT
或REVOKE
语句或表日志语句。超时适用于直接访问系统表的语句,例如SELECT
或UPDATE
。超时值对每个元数据锁定尝试单独生效。给定的语句可能需要多个锁定,因此语句可能会阻塞超过超时值之前报告超时错误。当超时发生时,
ER_LOCK_WAIT_TIMEOUT
将被报告。lock_wait_timeout
也定义了LOCK INSTANCE FOR BACKUP
语句等待锁定的超时时间。 -
System Variable locked_in_memory
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
-
Command-Line Format --log-error[=file_name]
System Variable log_error
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 默认错误日志目标。如果目标是控制台,值为
stderr
。否则,目标是文件,并且log_error
值是文件名。请参见第7.4.2节,“错误日志”。 -
Command-Line Format --log-error-services=value
System Variable log_error_services
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value log_filter_internal; log_sink_internal
错误日志的组件。该变量可能包含0、1或多个元素。在后一种情况下,元素可以使用分号或逗号分隔,optional后跟空格。给定的设置不能同时使用分号和逗号分隔符。组件顺序是有意义的,因为服务器将按照列表顺序执行组件。
任何可加载(不是内置)的组件名在
log_error_services
中,如果该组件尚未加载,则隐式加载。更多信息,请参见第7.4.2.1节,“错误日志配置”。 -
Command-Line Format --log-error-suppression-list=value
System Variable log_error_suppression_list
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 空字符串
变量
log_error_suppression_list
应用于错误日志事件,并指定在事件出现时要抑制的事件。例如,如果某种类型的警告被认为是错误日志中的“噪音”,因为它频繁出现,但不是感兴趣,可以被抑制。这项变量影响了log_filter_internal
错误日志过滤器组件的过滤操作,该组件默认启用(请参见第7.5.3节,“错误日志组件”)。如果log_error_suppression_list
被禁用,该变量无效。《
log_error_suppression_list
》值可以是空字符串,以表示无抑制,或者是一串逗号分隔的错误代码,以表示要抑制的错误代码。错误代码可以以符号或数字形式指定。数字代码可以以或不以MY-
前缀指定。数字部分的前导零不重要。以下是允许的代码格式示例:ER_SERVER_SHUTDOWN_COMPLETE MY-000031 000031 MY-31 31
符号值优于数字值,以提高可读性和可移植性。关于允许的错误符号和数字,请参见MySQL 8.4 Error Message Reference。
《
log_error_suppression_list
》的效果与《log_error_verbosity
》的效果相结合。更多信息,请见第7.4.2.5节,“基于优先级的错误日志过滤(log_filter_internal)”。 -
Command-Line Format --log-error-verbosity=#
System Variable log_error_verbosity
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 2
Minimum Value 1
Maximum Value 3
《
log_error_verbosity
》系统变量指定错误日志处理事件的详细程度。这一变量影响了log_filter_internal
错误日志过滤器组件的过滤效果,如果log_filter_internal
被禁用,那么《log_error_verbosity
》没有效果。为错误日志设计的事件具有优先级《ERROR》、《WARNING》或《INFORMATION》。《
log_error_verbosity
》根据优先级控制日志中写入的消息,如下表所示。log_error_verbosity Value Permitted Message Priorities 1 ERROR
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)”。 -
Command-Line Format --log-output=name
System Variable log_output
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 设置 Default Value FILE
Valid Values TABLE
FILE
NONE
通用查询日志和慢查询日志的输出目标。值是一个或多个用逗号分隔的单词,来自
TABLE
、FILE
和NONE
。TABLE
选择将日志写入general_log
和slow_log
表中的mysql
系统架构。FILE
选择将日志写入日志文件。NONE
禁用日志。如果NONE
在值中出现,它将优先于其他单词。TABLE
和FILE
都可以给出日志输出目标。这个变量选择日志输出目标,但不启用日志输出。要做到这点,请启用
general_log
和slow_query_log
系统变量。对于FILE
日志记录,general_log_file
和slow_query_log_file
系统变量确定日志文件位置。更多信息,请见第7.4.1节,“选择通用查询日志和慢查询日志输出目标”。 -
Command-Line Format --log-queries-not-using-indexes[={OFF|ON}]
System Variable log_queries_not_using_indexes
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果启用了慢查询日志,并且启用了该变量,查询将被记录。见第7.4.5节,“慢查询日志”。该选项并不一定意味着没有使用索引。例如,使用全索引扫描的查询使用了索引,但将被记录,因为索引不会限制行数。
-
Command-Line Format --log-raw[={OFF|ON}]
System Variable log_raw
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
log_raw系统变量最初设置为
--log-raw
选项的值。见该选项的描述,以获取更多信息。系统变量也可以在运行时更改,以更改密码masking行为。 -
Command-Line Format --log-slow-admin-statements[={OFF|ON}]
System Variable log_slow_admin_statements
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
将慢速管理员语句写入到慢查询日志中。管理员语句包括
ALTER TABLE
、ANALYZE TABLE
、CHECK TABLE
、CREATE INDEX
、DROP INDEX
、OPTIMIZE TABLE
和REPAIR TABLE
。 -
Command-Line Format --log-slow-extra[={OFF|ON}]
System Variable log_slow_extra
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果慢查询日志启用,并且输出目标包括
FILE
,服务器将在日志文件行中添加字段,以提供关于慢查询的信息。请参阅第7.4.5节,“慢查询日志”。TABLE
输出不受影响。 -
Command-Line Format --log-timestamps=#
System Variable log_timestamps
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value UTC
Valid Values UTC
SYSTEM
该变量控制错误日志、一般查询日志和慢查询日志中的时间戳的时区。它不影响表格中(
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
Command-Line Format --log-throttle-queries-not-using-indexes=#
System Variable log_throttle_queries_not_using_indexes
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4294967295
如果
log_queries_not_using_indexes
启用,log_throttle_queries_not_using_indexes
变量将限制慢查询日志中的查询数量。值为0(默认)表示“无限制”。更多信息,请参阅第7.4.5节,“慢查询日志”。 -
Command-Line Format --long-query-time=#
System Variable long_query_time
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 数字 Default Value 10
Minimum Value 0
Maximum Value 31536000
Unit 秒 如果查询时间超过这个值,服务器将增加
Slow_queries
状态变量。如果启用了慢查询日志,查询将被写入慢查询日志文件。这一值以实际时间为单位,而不是CPU时间,因此在轻负载系统上可能会超过阈值,而在重负载系统上可能不会。long_query_time
的最小和默认值分别为0和10。最大值为31536000,相当于365天。该值可以指定到微秒的精度。请参阅第7.4.5节,“慢查询日志”。较小的值将导致更多的语句被认为是长时间运行的,结果慢查询日志需要更多的空间。如果值小于1秒,日志可能在短时间内变得很大。增加语句被认为是长时间运行的结果也可能导致MySQL Enterprise Monitor中的““excessive Number of Long Running Processes”警报”。因此,在生产环境中,很小的值应该只在测试环境中使用,或者在生产环境中只使用短时间。
mysqldump执行了全表扫描,这意味着其查询可能会超过
long_query_time
设置的值。如果您想排除mysqldump生成的查询大多数或所有查询来自慢查询日志,可以使用--mysqld-long-query-time
将会话变量的值更改为更高的值。 -
Command-Line Format --low-priority-updates[={OFF|ON}]
System Variable low_priority_updates
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果将其设置为
1
,则所有INSERT
、UPDATE
、DELETE
和LOCK TABLE WRITE
语句将等待没有pending的SELECT
或LOCK TABLE READ
语句对该表。可以使用{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ...
来降低单个查询的优先级。这变量只影响使用表级锁定的存储引擎(如MyISAM
、MEMORY
和MERGE
),见第10.11.2节,“表锁定问题”。设置会话变量的值是一个受限制的操作。会话用户必须具有足够的权限来设置受限制的会话变量,见第7.1.9.1节,“系统变量权限”。
-
System Variable lower_case_file_system
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 该变量描述了文件系统中文件名的大小写敏感性。
OFF
表示文件名大小写敏感,ON
表示文件名大小写不敏感。这变量是只读的,因为它反映了文件系统属性,设置它将无效。 -
Command-Line Format --lower-case-table-names[=#]
System Variable lower_case_table_names
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value (macOS) 2
Default Value (Unix) 0
Default Value (Windows) 1
Minimum Value 0
Maximum Value 2
如果设置为0,表名将存储为指定的名称,并且比较大小写敏感。如果设置为1,表名将存储为小写,并且比较大小写不敏感。如果设置为2,表名将存储为指定的名称,但比较大小写为小写。这选项也适用于数据库名和表别名。更多详细信息,请见第11.2.3节,“标识符大小写敏感性”。
该变量的默认值是平台相关的(见
lower_case_file_system
)。在 Linux 和其他 Unix-like 系统上,默认值为0
。在 Windows 上,默认值为1
。在 macOS 上,默认值为2
。在 Linux (和其他 Unix-like 系统上),将值设置为2
不被支持;服务器将强制将值设置为0
。您不应该将
lower_case_table_names
设置为 0,如果您在运行 MySQL 的系统上数据目录位于一个不区分大小写的文件系统(例如 Windows 或 macOS)。这是一种不受支持的组合,可能会在运行一个错误的INSERT INTO ... SELECT ... FROM
操作时导致服务器崩溃。使用tbl_name
MyISAM
,使用不同大小写的表名可能会导致索引损坏。如果您尝试使用
--lower_case_table_names=0
启动服务器,在不区分大小写的文件系统上,服务器将打印错误信息并退出。该变量的设置将影响复制过滤器选项的大小写敏感性。有关更多信息,请见第19.2.5节,“服务器评估复制过滤器规则”。
禁止在启动服务器时使用与初始化服务器时不同的
lower_case_table_names
设置。限制是必要的,因为各种数据字典表字段的排序和比较是由初始化服务器时定义的设置确定,重新启动服务器时使用不同的设置将引入不一致。因此,在初始化服务器之前,需要配置
lower_case_table_names
到所需的设置。在大多数情况下,这需要在 MySQL 选项文件中配置lower_case_table_names
。对于 APT 安装在 Debian 和 Ubuntu 上,服务器将被初始化,您不能在选项文件中配置设置。您必须使用debconf-set-selection
工具在安装 MySQL 使用 APT 之前启用lower_case_table_names
。要做到这一点,请在安装 MySQL 使用 APT 之前运行以下命令:$> sudo debconf-set-selections <<< "mysql-server mysql-server/lowercase-table-names select Enabled"
-
Command-Line Format --mandatory-roles=value
System Variable mandatory_roles
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 空字符串
服务器应该将这些角色视为强制性角色。实际上,这些角色将自动授予每个用户,但是设置
mandatory_roles
不实际更改任何用户帐户,并且授予的角色在mysql.role_edges
系统表中不可见。变量值是一个逗号分隔的角色名称列表。示例:
SET PERSIST mandatory_roles = '`role1`@`%`,`role2`,role3,role4@localhost';
设置
mandatory_roles
的运行时值需要ROLE_ADMIN
特权,除非SUPER
特权(已弃用)或SYSTEM_VARIABLES_ADMIN
特权通常需要设置一个全局系统变量的运行时值。角色名称由用户部分和主机部分组成,格式为
。如果省略主机部分,默认为user_name
@host_name
%
。更多信息,请参见第8.2.5节,“指定角色名称”。mandatory_roles
值是一个字符串,因此用户名称和主机名称,如果被引用,必须以允许在引号字符串中的引号方式写入。在
mandatory_roles
值中指定的角色不能使用REVOKE
或DROP ROLE
或DROP USER
语句来撤销或删除。为了防止会话默认成为系统会话,可以在
mandatory_roles
值中列出一个具有SYSTEM_USER
特权的角色:-
如果
mandatory_roles
在启动时分配了一个具有SYSTEM_USER
特权的角色,服务器将在错误日志中写入一条消息并退出。 -
如果
mandatory_roles
在运行时分配了一个具有SYSTEM_USER
特权的角色,错误将发生,并且mandatory_roles
值将保持不变。
强制角色,像明确授予的角色,直到激活(见激活角色)才生效。在登录时,如果
activate_all_roles_on_login
系统变量启用,则激活所有授予的角色;否则,为设置为默认角色。运行时,SET ROLE
激活角色。分配给
mandatory_roles
的角色,但在分配时不存在,但后来创建了,可能需要特殊处理以被视为强制角色。详见定义强制角色。SHOW GRANTS
显示强制角色,根据Section 15.7.7.22, “SHOW GRANTS Statement”中描述的规则。 -
-
Command-Line Format --max-allowed-packet=#
System Variable max_allowed_packet
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 67108864
Minimum Value 1024
Maximum Value 1073741824
Unit 字节 Block Size 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
变量。例如,mysql和mysqldump的默认值分别为16MB和24MB,可以通过设置max_allowed_packet
变量来更改客户端值。该变量的会话值是只读的。客户端可以接收的字节数不超过会话值。但是,服务器不向客户端发送字节数超过当前全局
max_allowed_packet
值的字节数(如果全局值小于会话值,则可能小于会话值)。 -
Command-Line Format --max-connect-errors=#
System Variable max_connect_errors
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 100
Minimum Value 1
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
当一个主机的连续连接请求被中断而没有成功连接时,服务器将阻止该主机的进一步连接。如果从一个主机成功连接到服务器,则该主机的错误计数将被清零。要解除阻止的主机,请刷新主机缓存;请参阅刷新主机缓存。
-
Command-Line Format --max-connections=#
System Variable max_connections
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 151
Minimum Value 1
Maximum Value 100000
同时连接的客户端连接的最大数量。最大有效值是
open_files_limit
的实际值减去810,和实际设置的max_connections
值之间的较小值。更多信息,请见第7.1.12.1节,“连接接口”。
-
Command-Line Format --max-delayed-threads=#
Deprecated 是 System Variable max_delayed_threads
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 20
Minimum Value 0
Maximum Value 16384
这个系统变量已经弃用(因为
DELAYED
插入不支持)并且将在未来MySQL版本中删除。设置这个系统变量的会话值是一个受限制的操作。会话用户必须具有设置受限制的会话变量的权限。请见第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --max-digest-length=#
System Variable max_digest_length
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 1024
Minimum Value 0
Maximum Value 1048576
Unit 字节 每个会话用于计算normalized statement digests的内存保留字节数。该数量使用完毕后,会发生截断:在digest计算过程中不再收集或将其作为digest值的一部分。statements如果在该数量字节内不同,生产相同normalized statement digest并被认为是相同的,如果比较或聚合用于digest统计。
Warning将
max_digest_length
设置为零禁用digest生产,也禁用需要digest的服务器功能,如MySQL Enterprise Firewall。减少
max_digest_length
值减少内存使用,但使得更多语句的digest值变得不可区分。增加值允许更长语句被区分,但增加内存使用,特别是对于同时连接的会话较多的工作负载(服务器分配max_digest_length
字节每个会话)。解析器使用该系统变量作为normalized 语句摘要的最大长度限制,它计算的。性能 Schema,如果它跟踪语句摘要,使用
performance_schema_max_digest_length
系统变量作为摘要的最大长度限制。因此,如果performance_schema_max_digest_length
小于max_digest_length
,性能 Schema 中存储的摘要值将相对于原始摘要值进行截断。关于语句摘要的更多信息,请见第29.10节,“性能 Schema 语句摘要和采样”。
-
Command-Line Format --max-error-count=#
System Variable max_error_count
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 1024
Minimum Value 0
Maximum Value 65535
显示错误、警告和信息消息的最大数量,以便由
SHOW ERRORS
和SHOW WARNINGS
语句显示。这个值与诊断区域中的条件数相同,因此可以通过GET DIAGNOSTICS
语句检查的条件数相同。设置会话值的系统变量是一个受限的操作。会话用户必须具有设置受限的会话变量的权限。请见第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --max-execution-time=#
System Variable max_execution_time
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4294967295
Unit 毫秒 SELECT 语句的执行超时,单位为毫秒。如果值为 0,超时将被禁用。
max_execution_time
的应用如下:-
全局
max_execution_time
值提供了新连接的会话值。会话值适用于不包含MAX_EXECUTION_TIME(<em><code>N</code></em>)
优化器提示或为0的<em><code>N</code></em>的SELECT执行语句。 -
max_execution_time
适用于只读SELECT
语句。不能只读的语句是那些调用存储函数,修改数据作为副作用的语句。 -
max_execution_time
对于SELECT
语句在存储程序中被忽略。
-
-
Command-Line Format --max-heap-table-size=#
System Variable max_heap_table_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 16777216
Minimum Value 16384
Maximum Value (64-bit platforms) 18446744073709550592
Maximum Value (32-bit platforms) 4294966272
Unit 字节 Block Size 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.21节,“复制和 MEMORY 表”,和第19.5.1.39节,“复制和变量”,获取更多信息。 -
Deprecated 是 System Variable max_insert_delayed_threads
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 20
Maximum Value 16384
这个变量是
max_delayed_threads
的同义词。像max_delayed_threads
一样,它已被弃用(因为DELAYED
插入不支持)且将在未来的 MySQL 发布中删除。设置这个系统变量的会话值是一个受限制的操作。会话用户必须具有足够的权限来设置受限制的会话变量。请参阅第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --max-join-size=#
System Variable max_join_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 18446744073709551615
Minimum Value 1
Maximum Value 18446744073709551615
这个变量表示了连接的最大行访问数。如果服务器的估计表明连接需要读取的行数超过
max_join_size
,则语句将被拒绝。将这个变量设置为除
DEFAULT
外的值将重置sql_big_selects
的值为0
。如果您再次设置sql_big_selects
的值,max_join_size
变量将被忽略。 -
Command-Line Format --max-length-for-sort-data=#
Deprecated 是 System Variable max_length_for_sort_data
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 4096
Minimum Value 4
Maximum Value 8388608
Unit 字节 这个变量已经弃用,在 MySQL 8.4 中没有效果。
-
Command-Line Format --max-points-in-geometry=#
System Variable max_points_in_geometry
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 65536
Minimum Value 3
Maximum Value 1048576
ST_Buffer_Strategy() 函数的
points_per_circle
参数的最大值。 -
Command-Line Format --max-prepared-stmt-count=#
System Variable max_prepared_stmt_count
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 16382
Minimum Value 0
Maximum Value 4194304
这个变量限制了服务器中的总 Prepared 语句数量。在环境中,可能会出现基于服务器内存耗尽的拒绝服务攻击,可以使用该变量来限制 Prepared 语句的数量。如果设置的值小于当前 Prepared 语句的数量,当前 Prepared 语句将不受影响,但不能再添加新的 Prepared 语句。将值设置为 0 将禁用 Prepared 语句。
-
Command-Line Format --max-seeks-for-key=#
System Variable max_seeks_for_key
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value (Windows) 4294967295
Default Value (Other, 64-bit platforms) 18446744073709551615
Default Value (Other, 32-bit platforms) 4294967295
Minimum Value 1
Maximum Value (Windows) 4294967295
Maximum Value (Other, 64-bit platforms) 18446744073709551615
Maximum Value (Other, 32-bit platforms) 4294967295
限制索引搜索的最大次数。MySQL 优化器假设在搜索匹配行时,索引搜索的次数不会超过这个值,不管实际索引的 cardinality(see Section 15.7.7.23, “SHOW INDEX Statement”)。将这个值设置为一个低值(例如 100),可以强制 MySQL 优先使用索引,而不是表扫描。
-
Command-Line Format --max-sort-length=#
System Variable max_sort_length
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 1024
Minimum Value 4
Maximum Value 8388608
Unit 字节 排序字符串值时使用的字节数,使用
PAD SPACE
排序时的值。服务器将使用最多max_sort_length
字节的值,并忽略其它部分。因此,这些值在max_sort_length
字节前相同的值将被视为相等,以便于GROUP BY
、ORDER BY
和DISTINCT
操作。 (这与之前的MySQL版本不同,该设置将应用于所有值用于比较的值。)增加
max_sort_length
的值可能需要增加sort_buffer_size
的值。详见第10.2.1.16节,“ORDER BY Optimization” -
Command-Line Format --max-sp-recursion-depth[=#]
System Variable max_sp_recursion_depth
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 255
存储过程的递归调用次数。默认值为0,这完全禁用存储过程的递归调用。最大值为255。
存储过程的递归调用增加了对线程栈空间的需求。如果您增加
max_sp_recursion_depth
的值,可能需要增加线程栈大小通过在服务器启动时增加thread_stack
的值。 -
Command-Line Format --max-user-connections=#
System Variable max_user_connections
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4294967295
允许任何给定MySQL用户帐户的同时连接数的最大值。值为0(默认)意味着“无限制”。
这个变量具有全局值,可以在服务器启动或运行时设置。它还具有只读的会话值,该值表示当前会话关联的帐户的实际同时连接限制。会话值的初始化方式如下:
-
如果用户帐户具有非零的
MAX_USER_CONNECTIONS
资源限制,会话max_user_connections
值将设置为该限制。 -
否则,会话
max_user_connections
值将设置为全局值。
帐户资源限制使用
CREATE USER
或ALTER USER
语句指定。请参阅第8.2.21节,“设置帐户资源限制”。 -
-
Command-Line Format --max-write-lock-count=#
System Variable max_write_lock_count
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value (Windows) 4294967295
Default Value (Other, 64-bit platforms) 18446744073709551615
Default Value (Other, 32-bit platforms) 4294967295
Minimum Value 1
Maximum Value (Windows) 4294967295
Maximum Value (Other, 64-bit platforms) 18446744073709551615
Maximum Value (Other, 32-bit platforms) 4294967295
在写锁请求达到这个数量时,允许一些挂起的读锁请求被处理。在写锁请求中,读锁请求具有更高的优先级。然而,如果
max_write_lock_count
设置为某个低值(例如10),读锁请求可能会优先于挂起的写锁请求,因为读锁请求已经被10个写锁请求所超越。通常,这种行为不会发生,因为max_write_lock_count
默认值非常大。 -
Command-Line Format --mecab-rc-file=file_name
System Variable mecab_rc_file
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type File name mecab_rc_file选项用于设置MeCab全文搜索解析器。
\
mecab_rc_file
选项定义了 MeCab 配置文件的路径,该文件是 MeCab 的配置文件。该选项是只读的,不能在启动时设置。 MeCab 配置文件mecabrc
是 MeCab 初始化所需的。关于 MeCab 全文搜索解析器的信息,请参见第14.9.9节,“MeCab Full-Text Parser Plugin”。
关于在 MeCab 配置文件
mecabrc
中指定的选项,请参见MeCab 文档,在Google 开发者网站上。 -
Command-Line Format --min-examined-row-limit=#
System Variable min_examined_row_limit
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
查询少于这个数字的行不被记录到慢查询日志中。
设置会话变量的值是受限制的操作。会话用户必须具有设置受限制会话变量的权限。请参见第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --myisam-data-pointer-size=#
System Variable myisam_data_pointer_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 6
Minimum Value 2
Maximum Value 7
Unit 字节 用于创建
MyISAM
表时的默认指针大小,用于CREATE TABLE
语句。该变量不能小于 2 或大于 7。默认值为 6。请参见第 B.3.2.10 节,“表已满”。 -
Command-Line Format --myisam-max-sort-file-size=#
System Variable myisam_max_sort_file_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value (Windows) 2146435072
Default Value (Other, 64-bit platforms) 9223372036853727232
Default Value (Other, 32-bit platforms) 2147483648
Minimum Value 0
Maximum Value (Windows) 2146435072
Maximum Value (Other, 64-bit platforms) 9223372036853727232
Maximum Value (Other, 32-bit platforms) 2147483648
Unit 字节 MySQL 在重建
REPAIR TABLE
、ALTER TABLE
或LOAD DATA
时,允许使用的临时文件大小(以字节为单位)。如果文件大小超过这个值,索引将使用键缓存,而不是文件系统。这可以减慢性能。该值以字节为单位。如果
MyISAM
索引文件超过这个大小,并且磁盘空间可用,增加该值可能会提高性能。磁盘空间必须在包含原始索引文件的目录中可用。 -
Command-Line Format --myisam-mmap-size=#
System Variable myisam_mmap_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value (64-bit platforms) 18446744073709551615
Default Value (32-bit platforms) 4294967295
Minimum Value 7
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
Unit 字节 -
Command-Line Format --myisam-recover-options[=list]
System Variable myisam_recover_options
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 枚举 Default Value OFF
Valid Values OFF
DEFAULT
BACKUP
FORCE
QUICK
设置
MyISAM
存储引擎恢复模式。变量值是OFF
,DEFAULT
,BACKUP
,FORCE
或QUICK
的任意组合。如果您指定多个值,请使用逗号分隔。指定变量无值的服务器启动是相同的指定DEFAULT
,指定明确的值""
将禁用恢复(与OFF
值相同)。如果恢复启用,每当 mysqld 打开一个MyISAM
表,它将检查该表是否标记为崩溃或未正确关闭。如果是这样, mysqld 将对该表进行检查。如果该表损坏, mysqld 尝试修复它。以下选项影响修复的方式。
Option Description OFF
不进行恢复。 DEFAULT
不进行备份、强制或快速检查的恢复。 BACKUP
如果恢复过程中数据文件被修改,保存
文件的备份为tbl_name
.MYD
。tbl_name-datetime
.BAKFORCE
即使将删除多行,也强制修复表。 QUICK
不检查表中的行,如果没有删除块。 在服务器自动修复表之前,它将将修复信息写入错误日志。如果您想在用户干预下恢复大多数问题,可以使用选项
BACKUP,FORCE
。这将强制修复表,即使一些行将被删除,但它将保留旧数据文件,以便您后来检查。 -
Command-Line Format --myisam-sort-buffer-size=#
System Variable myisam_sort_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8388608
Minimum Value 4096
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
Unit 字节 当对
MyISAM
索引进行排序时,分配的缓冲区大小。在REPAIR TABLE
或在创建索引时使用CREATE INDEX
或ALTER TABLE
。 -
Command-Line Format --myisam-stats-method=name
System Variable myisam_stats_method
Scope 全局、会话
Dynamic 是
SET_VAR
Hint Applies否
Type 枚举
Default Value nulls_unequal
Valid Values 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 and MyISAM Index Statistics Collection”。
-
Command-Line Format --myisam-use-mmap[={OFF|ON}]
System Variable myisam_use_mmap
Scope 全局
Dynamic 是
SET_VAR
Hint Applies否
Type 布尔
Default Value OFF
使用内存映射来读取和写入
MyISAM
表。 -
mysql_native_password_proxy_users
Command-Line Format --mysql-native-password-proxy-users[={OFF|ON}]
System Variable mysql_native_password_proxy_users
Scope 全局
Dynamic 是
SET_VAR
Hint Applies否
Type 布尔
Default Value OFF
该变量控制是否支持
mysql_native_password
内置身份验证插件(已弃用)的代理用户功能。它只有在check_proxy_users
系统变量和mysql_native_password
插件启用时才生效。关于用户代理,请见第8.2.19节,“Proxy Users”。 -
Command-Line Format --named-pipe[={OFF|ON}]
System Variable named_pipe
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Platform Specific Windows Type 布尔 Default Value OFF
(仅限Windows.) 指示服务器是否支持命名管道连接。
-
Command-Line Format --named-pipe-full-access-group=value
System Variable named_pipe_full_access_group
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Platform Specific Windows Type 字符串 Default Value 空字符串
Valid Values 空字符串
有效的Windows本地组名称
*
(仅限Windows.) 在启用
named_pipe
系统变量支持命名管道连接时,MySQL服务器将将访问控制授予客户端在创建的命名管道上,以便成功通信。一些MySQL客户端软件可以打开命名管道连接无需额外配置;然而,其他客户端软件可能仍然需要完全访问以打开命名管道连接。该变量设置Windows本地组的名称,该组的成员将被授予使用命名管道客户端的足够访问权限。默认值为空字符串,这意味着没有Windows用户被授予对命名管道的完全访问权限。
可以创建一个新的Windows本地组(例如:
mysql_access_client_users
)并将其用作访问控制的替代方案。在这种情况下,限制组的成员数量,并在客户端软件升级时从组中移除用户。非组成员尝试打开连接到MySQL的命名管道客户端时将被拒绝访问,直到Windows管理员将用户添加到组中。新添加的用户必须重新登录以加入组(由Windows所需)。将值设置为
'*everyone*'
提供了语言无关的方式来引用Windows中的Everyone组。Everyone组默认不安全。 -
Command-Line Format --net-buffer-length=#
System Variable net_buffer_length
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 16384
Minimum Value 1024
Maximum Value 1048576
Unit 字节 Block Size 1024
每个客户端线程都关联一个连接缓冲区和结果缓冲区。两个缓冲区的初始大小由
net_buffer_length
确定,但可以动态扩展到max_allowed_packet
字节。结果缓冲区在每个SQL语句执行后将被缩小到net_buffer_length
。这个变量通常不需要更改,但如果您有很少的内存,可以将其设置为客户端发送的语句的预期长度。如果语句超过这个长度,连接缓冲区将自动扩展。该变量的最大值为1MB。
这个变量的会话值是只读的。
-
Command-Line Format --net-read-timeout=#
System Variable net_read_timeout
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 30
Minimum Value 1
Maximum Value 31536000
Unit 秒 连接读取超时的秒数。服务器读取客户端时,
net_read_timeout
控制读取超时。服务器写入客户端时,net_write_timeout
控制写入超时。见replica_net_timeout
。 -
Command-Line Format --net-retry-count=#
System Variable net_retry_count
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 10
Minimum Value 1
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
如果对通信端口的读取或写入被中断,重试这个次数后才放弃。这值在 FreeBSD 上应该设置得很高,因为内部中断将发送给所有线程。
-
Command-Line Format --net-write-timeout=#
System Variable net_write_timeout
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 60
Minimum Value 1
Maximum Value 31536000
Unit 秒 等待连接上写入一个块的秒数,直到写入操作失败。详见
net_read_timeout
。 -
Command-Line Format --ngram-token-size=#
System Variable ngram_token_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 2
Minimum Value 1
Maximum Value 10
定义n-gram全文本解析器的n-gram token size。
ngram_token_size
选项是只读的,不能在运行时修改。默认值为2(bigram)。最大值为10。了解如何配置该变量的更多信息,请见第14.9.8节,“ngram Full-Text Parser”。
-
Command-Line Format --offline-mode[={OFF|ON}]
System Variable offline_mode
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
在离线模式下,MySQL实例将断开客户端用户,除非他们具有相关权限,并且不允许他们建立新的连接。被拒绝访问的客户端将收到
ER_SERVER_OFFLINE_MODE
错误。将服务器设置为离线模式,请将
offline_mode
系统变量从OFF
更改为ON
。要恢复正常操作,请将offline_mode
从ON
更改为OFF
。控制离线模式需要管理员账户拥有SYSTEM_VARIABLES_ADMIN
特权和CONNECTION_ADMIN
特权(或弃用的SUPER
特权,涵盖这两个特权)。离线模式具有以下特征:
-
没有
CONNECTION_ADMIN
或SUPER
特权的客户端用户将在下一个请求中断开连接,并收到适当的错误。断开连接包括终止正在运行的语句和释放锁定。这些客户端用户也不能初始化新的连接,并收到适当的错误。 -
拥有
CONNECTION_ADMIN
或SUPER
特权的客户端用户不会断开连接,并且可以初始化新的连接以管理服务器。 -
如果将服务器设置为离线模式的用户没有
SYSTEM_USER
特权,拥有SYSTEM_USER
特权的客户端用户也不会断开连接。然而,这些用户不能在服务器处于离线模式时初始化新的连接,除非他们拥有CONNECTION_ADMIN
或SUPER
特权。只有他们的现有连接不能被终止,因为SYSTEM_USER
特权是必要的,以杀死执行中的会话或语句。 -
复制线程允许继续将数据应用于服务器。
-
-
Command-Line Format --old-alter-table[={OFF|ON}]
System Variable old_alter_table
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
当该变量启用时,服务器不使用优化的方法来处理
ALTER TABLE
操作。它会重新使用临时表,复制数据,并将临时表重命名为原始表,类似于MySQL 5.0和更早版本的操作。关于ALTER TABLE
的操作信息,请见第15.1.9节,“ALTER TABLE 语句”。ALTER TABLE ... DROP PARTITION
withold_alter_table=ON
重建分区表,并尝试将从删除的分区中移动数据到另一个具有相容PARTITION ... VALUES
定义的分区。无法移动到另一个分区的数据将被删除。在更早的版本中,ALTER TABLE ... DROP PARTITION
withold_alter_table=ON
将删除存储在分区中的数据,并删除分区。 -
Command-Line Format --open-files-limit=#
System Variable open_files_limit
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 5000,可能需要调整
Minimum Value 0
Maximum Value 平台依赖
可供mysqld从操作系统获取的文件描述符数量:
-
在启动时,mysqld使用
setrlimit()
将描述符保留,使用由直接设置该变量或使用--open-files-limit
选项来设置mysqld_safe。如果mysqld产生错误Too many open files
,请尝试增加open_files_limit
值。内部,该变量的最大值是最大无符号整数值,但实际最大值是平台依赖的。 -
在运行时,
open_files_limit
的值表示操作系统允许 mysqld 使用的文件描述符数量,这可能与启动时请求的值不同。如果不能分配请求的文件描述符数量,mysqld 将在错误日志中写入警告。
实际的
open_files_limit
值基于系统启动时指定的值(如果有)和max_connections
和table_open_cache
的值,使用以下公式:-
10 + max_connections + (table_open_cache * 2)
. 使用这些变量的默认值将得到 8161。在 Windows 上,只有 2048(C 运行时库文件描述符最大值)被添加到这个数字中。这总共是 10209,使用默认值的系统变量。
-
max_connections * 5
-
操作系统限制。
服务器尝试使用最大值中的文件描述符数量,如果不能获得那么多的描述符,服务器将尝试获得操作系统允许的最大数量。
实际值在系统上不能更改文件描述符数量的地方是 0。
在 Unix 上,这个值不能超过 ulimit -n 命令显示的值。在使用
systemd
的 Linux 系统上,这个值不能超过LimitNOFILE
(如果LimitNOFILE
没有设置),否则在 Linux 上,这个值不能超过 ulimit -n。 -
-
Command-Line Format --optimizer-prune-level=#
System Variable optimizer_prune_level
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 1
Minimum Value 0
Maximum Value 1
控制查询优化器在查询优化过程中应用的 heuristics,以 pruning 不太有希望的部分计划从优化器搜索空间中。值为 0 将禁用 heuristics,使优化器执行 exhaustive 搜索。值为 1 将使优化器根据中间计划中检索的行数来 pruning 计划。
-
Command-Line Format --optimizer-search-depth=#
System Variable optimizer_search_depth
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 62
Minimum Value 0
Maximum Value 62
查询优化器的搜索深度。值大于查询结果中的关系数,生成的查询计划更好,但生成时间更长。值小于查询结果中的关系数,生成查询计划更快,但生成的计划可能不太好。如果设置为0,系统将自动选择合理的值。
-
Command-Line Format --optimizer-switch=value
System Variable optimizer_switch
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 设置 Valid Values 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}
Valid Values 批量键访问={on|off}
块嵌套循环={on|off}
条件分支过滤={on|off}
派生合并={on|off}
重复weedout={on|off}
引擎条件推送={on|off}
首匹配={on|off}
哈希连接={on|off}
索引条件推送={on|off}
索引合并={on|off}
索引合并交叉={on|off}
索引合并排序并集={on|off}
索引合并并集={on|off}
松散扫描={on|off}
物化={on|off}
MRR={on|off}
MRR基于成本={on|off}
优先排序索引={on|off}
半连接={on|off}
跳过扫描={on|off}
子查询物化基于成本={on|off}
子查询到派生={on|off}
使用索引扩展={on|off}
使用不可见索引={on|off}
Valid Values 批量键访问={on|off}
块嵌套循环={on|off}
条件分支过滤={on|off}
派生合并={on|off}
重复weedout={on|off}
引擎条件推送={on|off}
首匹配={on|off}
哈希连接={on|off}
索引条件推送={on|off}
索引合并={on|off}
索引合并交叉={on|off}
索引合并排序并集={on|off}
索引合并并集={on|off}
松散扫描={on|off}
物化={on|off}
MRR={on|off}
MRR基于成本={on|off}
半连接={on|off}
跳过扫描={on|off}
子查询物化基于成本={on|off}
子查询到派生={on|off}
使用索引扩展={on|off}
使用不可见索引={on|off}
Valid Values 批处理键访问={on|off}
块嵌套循环={on|off}
条件扇出过滤={on|off}
派生合并={on|off}
重复weedout={on|off}
引擎条件推送={on|off}
首匹配={on|off}
索引条件推送={on|off}
索引合并={on|off}
索引合并交叉={on|off}
索引合并排序并集={on|off}
索引合并并集={on|off}
松散扫描={on|off}
物化={on|off}
MRR={on|off}
MRR基于成本={on|off}
半连接={on|off}
跳过扫描={on|off}
子查询物化基于成本={on|off}
使用索引扩展={on|off}
使用不可见索引={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节,“可切换优化”。
-
Command-Line Format --optimizer-trace=value
System Variable optimizer_trace
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 该变量控制优化器跟踪。详细信息,请见MySQL Internals: Tracing the Optimizer。
-
Command-Line Format --optimizer-trace-features=value
System Variable optimizer_trace_features
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 该变量启用或禁用选择的优化器跟踪功能。详细信息,请见MySQL Internals: Tracing the Optimizer.
-
Command-Line Format --optimizer-trace-limit=#
System Variable optimizer_trace_limit
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 0
Maximum Value 2147483647
显示的最大优化器跟踪数量。详细信息,请见MySQL Internals: Tracing the Optimizer.
-
Command-Line Format --optimizer-trace-max-mem-size=#
System Variable optimizer_trace_max_mem_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 1048576
Minimum Value 0
Maximum Value 4294967295
Unit 字节 存储的优化器跟踪的最大累积大小。详细信息,请见MySQL Internals: Tracing the Optimizer.
-
Command-Line Format --optimizer-trace-offset=#
System Variable optimizer_trace_offset
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value -1
Minimum Value -2147483647
Maximum Value 2147483647
优化器跟踪的偏移量。详细信息,请见MySQL Internals: Tracing the Optimizer.
-
performance_schema_
xxx
性能 Schema 系统变量列表见Section 29.15, “Performance Schema System Variables”。这些变量可能用于配置性能 Schema 操作。
-
Command-Line Format --parser-max-mem-size=#
System Variable parser_max_mem_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value (64-bit platforms) 18446744073709551615
Default Value (32-bit platforms) 4294967295
Minimum Value 10000000
Maximum Value (64-bit platforms) 18446744073709551615
Maximum Value (32-bit platforms) 4294967295
Unit 字节 解析器可用的最大内存量。默认值不限制内存可用量,可以将其减少以保护对长或复杂SQL语句的解析可能导致的内存不足情况。
-
Command-Line Format --partial-revokes[={OFF|ON}]
System Variable partial_revokes
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
(如果部分撤销不存在)ON
(如果部分撤销存在)启用该变量使得可以部分撤销权限。特别是,对于拥有全局权限的用户,
partial_revokes
允许在特定的架构中撤销权限,而不是撤销所有权限。例如,对于拥有全局UPDATE
权限的用户,可以限制其在mysql
架构中执行UPDATE
操作。换言之,该用户的全局UPDATE
权限部分撤销。启用
partial_revokes
后,不能禁用该变量,如果存在任何账户具有权限限制,禁用partial_revokes
将失败。-
在启动时尝试禁用
partial_revokes
,服务器将记录错误信息并启用partial_revokes
。 -
在运行时尝试禁用
partial_revokes
,将出现错误,并且partial_revokes
的值保持不变。
要禁用
partial_revokes
,首先修改每个具有部分撤销权限的账户,或者重新授予权限或删除账户。Note在权限分配中,启用
partial_revokes
将使MySQL将未转义的_
和%
SQL通配符字符在架构名称中解释为字面字符,就像它们被转义为\_
和\%
一样。由于这将改变MySQL解释权限的方式,因此在可能启用partial_revokes
的安装中,可能需要避免在权限分配中使用未转义的通配符字符。此外,使用
_
和%
作为通配符字符在授权中的使用已经被弃用,您应该预期在未来版本的MySQL中将其支持移除。有关更多信息,包括删除部分撤销的指令,请见第8.2.12节,“权限限制使用部分撤销”。
-
-
Command-Line Format --password-history=#
System Variable password_history
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4294967295
该变量定义了控制前密码重用限制的全局策略。对于之前使用的帐户密码,该变量指示了必须在重用密码之前发生的最少密码更改次数。如果值为0(默认),则没有基于密码更改次数的重用限制。
对该变量的更改将立即应用于使用
PASSWORD HISTORY DEFAULT
选项定义的所有帐户。全局密码更改次数限制可以在个别帐户中使用
PASSWORD HISTORY
选项的CREATE USER
和ALTER USER
语句中进行覆盖。请见第8.2.15节,“密码管理”。 -
Command-Line Format --password-require-current[={OFF|ON}]
System Variable password_require_current
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
该变量定义了控制帐户密码更改时是否需要指定当前密码的全局策略。
对该变量的更改将立即应用于使用
PASSWORD REQUIRE CURRENT DEFAULT
选项定义的所有帐户。全球验证所需的策略可以在使用
PASSWORD REQUIRE
选项的CREATE USER
和ALTER USER
语句中为单个帐户进行override。请参阅第8.2.15节,“密码管理”。 -
Command-Line Format --password-reuse-interval=#
System Variable password_reuse_interval
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 4294967295
Unit 天 该变量定义了全球密码重用策略,基于时间的延迟。对于之前使用的帐户密码,该变量指示了在重用密码之前必须经过的天数。如果值为0(默认值),则没有基于时间的重用限制。
对该变量的更改将立即应用于使用
PASSWORD REUSE INTERVAL DEFAULT
选项定义的所有帐户。全球时间延迟密码重用策略可以在使用
PASSWORD REUSE INTERVAL
选项的CREATE USER
和ALTER USER
语句中为单个帐户进行override。请参阅第8.2.15节,“密码管理”。 -
Command-Line Format --persisted-globals-load[={OFF|ON}]
System Variable persisted_globals_load
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value ON
是否从数据目录中的
mysqld-auto.cnf
文件中加载 persisted 配置设置。服务器通常在启动时处理该文件(见第6.2.2.2节,“使用选项文件”)。禁用persisted_globals_load
将使服务器启动序列跳过mysqld-auto.cnf
。要修改
mysqld-auto.cnf
的内容,使用SET PERSIST
、SET PERSIST_ONLY
和RESET PERSIST
语句。详见第7.1.9.3节,“ Persisted System Variables”。 -
persist_only_admin_x509_subject
Command-Line Format --persist-only-admin-x509-subject=string
System Variable persist_only_admin_x509_subject
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value 空字符串
SET PERSIST
和SET PERSIST_ONLY
使得系统变量可以被 persisted 到mysqld-auto.cnf
选项文件中(见第15.7.6.1节,“SET Syntax for Variable Assignment”)。persisting系统变量使得可以在服务器重启后应用配置更改,这对远程管理非常有用。但是,有些系统变量是不可 persist 的或只能在某些限制条件下 persist。系统变量
persist_only_admin_x509_subject
指定了用户必须具有的SSL证书X.509主体值,以便可以 persist persist-限制的系统变量。默认值是空字符串,这意味着不能 persist 任何用户的 persist-限制的系统变量。如果
persist_only_admin_x509_subject
非空,使用加密连接连接到服务器并提供指定主体值的SSL证书的用户,可以使用SET PERSIST_ONLY
来 persist persist-限制的系统变量。关于 persist-限制的系统变量和启用persist_only_admin_x509_subject
的配置信息,请见第7.1.9.4节,“Nonpersistible and Persist-Restricted System Variables”。 -
persist_sensitive_variables_in_plaintext
Command-Line Format --persist_sensitive_variables_in_plaintext[={OFF|ON}]
System Variable persist_sensitive_variables_in_plaintext
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
persist_sensitive_variables_in_plaintext
控制服务器是否允许将敏感系统变量的值存储在未加密的格式中,如果在使用SET PERSIST
将系统变量的值设置时,keyring 组件支持不可用。它还控制服务器是否可以启动,如果加密的系统变量值不能被解密。注意,keyring 插件不支持安全存储敏感系统变量的值;必须在 MySQL 服务器实例上启用keyring 组件(见第8.4.4节,“MySQL Keyring”)以支持安全存储。默认设置为
ON
,如果keyring 组件支持可用,服务器将加密值;否则,如果keyring 组件支持不可用,服务器将将敏感系统变量的值存储在未加密的格式中(带警告)。下次设置任何 persisted 系统变量时,如果keyring 组件支持可用,服务器将加密未加密的敏感系统变量的值。ON
设置也允许服务器在加密系统变量值不能被解密时启动,在这种情况下,服务器将发出警告,并使用默认值来设置系统变量的值。在这种情况下,不能更改系统变量的值,直到它们可以被解密。最安全的设置为
OFF
,这意味着敏感系统变量的值不能在keyring 组件支持不可用时被 persisted。如果设置为OFF
,服务器也不能在加密系统变量值不能被解密时启动。 -
Command-Line Format --pid-file=file_name
System Variable pid_file
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 服务器将写入进程 ID 的文件路径名。服务器在数据目录中创建文件,除非指定绝对路径名以指定不同的目录。如果您指定了这个变量,必须指定一个值。如果您没有指定这个变量,MySQL 将使用默认值
,其中host_name
.pidhost_name
是主机名称。进程 ID 文件由其他程序,如mysqld_safe,用于确定服务器的进程 ID。在 Windows 上,这个变量还影响默认错误日志文件名。请参阅第7.4.2节,“错误日志”。
-
Command-Line Format --plugin-dir=dir_name
System Variable plugin_dir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 Default Value BASEDIR/lib/plugin
插件目录的路径名。
如果插件目录是可写的,用户可能可以使用
SELECT ... INTO DUMPFILE
将可执行代码写入目录中的文件。这可以通过将plugin_dir
设置为只读或将secure_file_priv
设置为安全文件目录来防止。 -
Command-Line Format --port=port_num
System Variable port
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 3306
Minimum Value 0
Maximum Value 65535
服务器监听 TCP/IP 连接的端口号。这可以使用
--port
选项设置。 -
Command-Line Format --preload-buffer-size=#
System Variable preload_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 32768
Minimum Value 1024
Maximum Value 1073741824
Unit 字节 预加载索引时分配的缓冲区大小。
设置会话值的系统变量是受限的操作。会话用户必须具有足够的权限来设置受限的会话变量。请参阅第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --print-identified-with-as-hex[={OFF|ON}]
System Variable print_identified_with_as_hex
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
在
SHOW CREATE USER
的输出中,IDENTIFIED WITH
子句中的密码哈希值可能包含不可打印的字符,这些字符可能会对终端显示和其他环境产生不良影响。启用print_identified_with_as_hex
可以将这些哈希值显示为十六进制字符串,而不是常规字符串。哈希值中不包含不可打印字符的仍然显示为常规字符串,即使启用了该变量。 -
如果设置为0或
OFF
(默认值),语句 profiling 将被禁用。如果设置为1或ON
,语句 profiling 将被启用,并且SHOW PROFILE
和SHOW PROFILES
语句将提供 profiling 信息。请参阅Section 15.7.7.32, “SHOW PROFILES Statement”。该变量已弃用;在将来 MySQL 发布中将被删除。
-
如果启用
profiling
,则将维护的语句数量。默认值为15。最大值为100。将值设置为0将禁用 profiling。请参阅Section 15.7.7.32, “SHOW PROFILES Statement”。该变量已弃用;在将来 MySQL 发布中将被删除。
-
protocol_compression_algorithms
Command-Line Format --protocol-compression-algorithms=value
System Variable protocol_compression_algorithms
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 设置 Default Value zlib,zstd,uncompressed
Valid Values 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节,“连接压缩控制”。
-
-
System Variable protocol_version
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 10
Minimum Value 0
Maximum Value 4294967295
MySQL 服务器使用的客户端/服务器协议版本。
-
System Variable proxy_user
Scope 会话 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 如果当前客户端是另一个用户的代理,那么这个变量是代理用户帐户名称。否则,这个变量是
NULL
。请参阅第8.2.19节,“代理用户”。 -
System Variable pseudo_replica_mode
Scope 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 pseudo_replica_mode
是服务器内部使用的变量。它帮助正确地处理来自较老或较新的服务器的事务。mysqlbinlog 在执行任何 SQL 语句之前将pseudo_replica_mode
设置为 true。将
pseudo_replica_mode
的会话值是受限制的操作。会话用户必须拥有REPLICATION_APPLIER
特权(见第19.3.3节,“Replication Privilege Checks”)或具有设置受限制会话变量的权限(见第7.1.9.1节,“System Variable Privileges”)。然而,请注意该变量不供用户设置;它将自动由复制基础结构设置。pseudo_replica_mode
对于XA事务的处理方式如下,可以附加到或从会话中分离(默认情况下是会话,该会话执行XA START
语句):-
如果为真,并且会话已经执行了内部使用的
BINLOG
语句,XA事务将在事务的第一部分完成XA PREPARE
后自动从会话中分离,以便任何具有XA_RECOVER_ADMIN
特权的会话可以提交或回滚事务。 -
如果为假,XA事务将与会话保持关联直到会话关闭或服务器重启时才分离。
pseudo_replica_mode
对于original_server_version
系统变量和original_commit_timestamp
复制延迟时间戳有以下影响:-
如果为真,则不显式设置
original_commit_timestamp
或original_server_version
的事务被假设来自另一个未知的服务器,因此将0(未知)分配给时间戳和系统变量。 -
如果为假,则不显式设置
original_commit_timestamp
或original_server_version
的事务被假设来自当前服务器,因此将当前时间戳和当前服务器的版本分配给时间戳和系统变量。
pseudo_replica_mode
对处理设置一个或多个不支持(已删除或未知)的SQL模式的语句有以下影响:-
如果为真,服务器将忽略不支持的模式并发出警告。
-
如果为假,服务器将拒绝语句并返回
ER_UNSUPPORTED_SQL_MODE
错误。
-
-
Deprecated 是 System Variable pseudo_slave_mode
Scope 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 已弃用别名为
pseudo_replica_mode
。 -
System Variable pseudo_thread_id
Scope 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 2147483647
Minimum Value 0
Maximum Value 2147483647
该变量用于内部服务器使用。
Warning将会话值更改为
pseudo_thread_id
系统变量将更改CONNECTION_ID()
函数返回的值。将会话值设置为该系统变量是受限制的操作。会话用户必须具有设置受限制的会话变量的权限。请参阅第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --query-alloc-block-size=#
System Variable query_alloc_block_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8192
Minimum Value 1024
Maximum Value 4294966272
Unit 字节 Block Size 1024
内存块的分配大小,用于存储语句解析和执行期间创建的对象。如果您遇到内存碎片问题,可能需要增加该参数。
字节块的大小为1024。MySQL 服务器在存储该系统变量之前将值向下舍入到下一个字节块的整数倍。解析器允许的最大值是平台的最大无符号整数值(4294967295或2^32-1对于32位系统,18446744073709551615或2^64-1对于64位系统),但实际最大值是字节块的下一个整数倍。
-
Command-Line Format --query-prealloc-size=#
Deprecated 是 System Variable query_prealloc_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8192
Minimum Value 8192
Maximum Value (64-bit platforms) 18446744073709550592
Maximum Value (32-bit platforms) 4294966272
Unit 字节 Block Size 1024
query_prealloc_size
已弃用,设置它无效,您应该期望在未来的MySQL版本中删除它。 -
System Variable rand_seed1
Scope 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value N/A
Minimum Value 0
Maximum Value 4294967295
变量
rand_seed1
和rand_seed2
只存在于会话变量中,可以设置,但不能读取。这些变量——但不是它们的值——在SHOW VARIABLES
的输出中显示。这些变量的目的是支持
RAND()
函数的复制。对于调用RAND()
的语句,源端将传递两个值给副本,副本使用这些值来设置会话变量rand_seed1
和rand_seed2
,以便副本生成的随机数与源端相同。 -
请查看
rand_seed1
的描述。 -
Command-Line Format --range-alloc-block-size=#
System Variable range_alloc_block_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 4096
Minimum Value 4096
Maximum Value (64-bit platforms) 18446744073709550592
Maximum Value 4294966272
Unit 字节 Block Size 1024
当执行范围优化时分配的块大小(以字节为单位)。
字节的块大小为1024。MySQL Server在存储该系统变量的值之前将其值向下舍入到块大小的下一个整数倍。解析器允许的最大值为平台的最大无符号整数值(4294967295或2^32-1在32位系统上,18446744073709551615或2^64-1在64位系统上),但实际的最大值是块大小的下一个整数倍。
-
Command-Line Format --range-optimizer-max-mem-size=#
System Variable range_optimizer_max_mem_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8388608
Minimum Value 0
Maximum Value 18446744073709551615
Unit 字节 范围优化器的内存使用限制。值为0表示“无限制”。如果优化器估计使用的内存超过限制,它将放弃该计划并考虑其他计划。更多信息,请见Limiting Memory Use for Range Optimization。
-
System Variable rbr_exec_mode
Scope 会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value STRICT
Valid Values STRICT
IDEMPOTENT
为mysqlbinlog内部使用。该变量将服务器切换到
IDEMPOTENT
模式和STRICT
模式。IDEMPOTENT
模式会抑制在BINLOG
语句中出现的重复键和找不到键错误。该模式在重新播放基于行的二进制日志时非常有用,以避免与现有数据冲突。mysqlbinlog在指定--idempotent
选项时设置该模式。SET SESSION RBR_EXEC_MODE=IDEMPOTENT;
-
Command-Line Format --read-buffer-size=#
System Variable read_buffer_size
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesYes Type Integer Default Value 131072
Minimum Value 8192
Maximum Value 2147479552
Unit 字节 Block Size 4096
每个线程在扫描
MyISAM
表时分配一个缓冲区的大小(以字节为单位)。如果您执行多个顺序扫描,您可能想增加该值,default为131072。该值应该是4KB的倍数。如果设置的值不是4KB的倍数,则将其下舍到最近的4KB倍数。该选项在以下情况下也用于其他存储引擎,除了
InnoDB
:-
在排序行时缓存索引在临时文件(不是临时表)中的结果。
-
在批量插入分区时。
-
在缓存嵌套查询的结果时。
read_buffer_size
在其他存储引擎中还有一种使用方式:用于确定MEMORY
表的内存块大小。select_into_buffer_size
用于SELECT INTO DUMPFILE
和SELECT INTO OUTFILE
语句的I/O缓冲区大小(在所有其他情况下使用read_buffer_size
)。关于不同操作中的内存使用信息,请见第10.12.3.1节,“MySQL如何使用内存”。
-
-
Command-Line Format --read-only[={OFF|ON}]
System Variable read_only
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果启用
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
写入,这个表存储了执行的交易ID,该交易ID不在当前二进制日志文件中。 -
使用
ANALYZE TABLE
或OPTIMIZE TABLE
语句。读取模式的目的是防止对表结构或内容的更改。分析和优化不属于更改的范畴。这意味着,例如,可以使用mysqlcheck--all-databases
--analyze
对只读副本进行一致性检查。 -
使用
FLUSH STATUS
语句,这些语句总是写入到二进制日志中。 -
对临时表的操作。
-
将日志表(
mysql.general_log
和mysql.slow_log
)中的插入操作;见第7.4.1节,“选择通用查询日志和慢查询日志输出目的地”。 -
对性能Schema表的更新,例如
UPDATE
或TRUNCATE TABLE
操作。
在复制源服务器上设置
read_only
的值不会被复制到副本服务器上。该值可以在副本服务器上独立设置,不受源服务器的设置影响。以下条件适用于尝试启用
read_only
(包括隐式尝试结果来自启用super_read_only
):-
尝试失败,并出现错误,如果您拥有任何明确锁(使用
LOCK TABLES
)或有待处理的事务。 -
尝试阻塞其他客户端请求表锁或事务开始请求,直到锁释放和语句和事务结束为止。尝试启用
read_only
时,其他客户端的请求也会被阻塞,直到read_only
被设置为止。 -
尝试阻塞,如果有活动事务持有元数据锁,直到那些事务结束为止。
-
read_only
可以在您持有全局读锁(使用FLUSH TABLES WITH READ LOCK
)时启用,因为这不涉及表锁。
-
-
Command-Line Format --read-rnd-buffer-size=#
System Variable read_rnd_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 262144
Minimum Value 1
Maximum Value 2147483647
Unit 字节 该变量用于从MyISAM表中读取数据,以及对任何存储引擎进行Multi-Range Read优化。
在对MyISAM表进行排序读取操作时,rows将通过该缓冲区读取,以避免磁盘寻道。详见第10.2.1.16节,“ORDER BY Optimization”。将该变量设置为大值可以大大提高ORDER BY性能。但是,这是一个客户端分配的缓冲区,因此您不应该将全局变量设置为大值。相反,在需要运行大查询的客户端中更改会话变量。
关于内存使用的更多信息,请见第10.12.3.1节,“How MySQL Uses Memory”。关于Multi-Range Read优化的信息,请见第10.2.1.11节,“Multi-Range Read Optimization”。
-
Command-Line Format --regexp-stack-limit=#
System Variable regexp_stack_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8000000
Minimum Value 0
Maximum Value 2147483647
Unit 字节 该变量用于指定用于正则表达式匹配操作的内存栈的最大可用字节数,该操作由
REGEXP_LIKE()
和类似函数执行(详见第14.8.2节,“Regular Expressions”)。 -
Command-Line Format --regexp-time-limit=#
System Variable regexp_time_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 32
Minimum Value 0
Maximum Value 2147483647
对正则表达式匹配操作的时间限制,包括
REGEXP_LIKE()
和类似函数(见第14.8.2节,“正则表达式”)。这个限制是指匹配引擎执行的最大步骤数,因此只间接地影响执行时间。通常情况下,它是以毫秒为单位的。 -
System Variable require_row_format
Scope Session Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
这个变量是由复制和mysqlbinlog内部服务器使用。它限制了会话中的DML事件只能执行在行基于二进制日志格式中,并且不能创建临时表。不能满足限制的查询将失败。
将这个系统变量的会话值设置为
ON
不需要任何权限。将这个系统变量的会话值设置为OFF
是受限制的操作,会话用户必须具有设置受限制的会话变量的权限。见第7.1.9.1节,“系统变量权限”。 -
Command-Line Format --require-secure-transport[={OFF|ON}]
System Variable require_secure_transport
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
是否要求客户端连接到服务器时使用某种形式的安全传输。启用这个变量时,服务器仅允许使用TLS/SSL加密的TCP/IP连接或使用套接字文件(在Unix上)或共享内存(在Windows上)的连接。服务器将拒绝非安全连接尝试,这些尝试将以
ER_SECURE_TRANSPORT_REQUIRED
错误失败。这个功能补充了每个帐户的SSL要求,这些要求优先。例如,如果一个帐户被定义为
REQUIRE SSL
,启用require_secure_transport
不能使得使用套接字文件的帐户连接到服务器。可能会出现服务器没有可靠传输的情况。例如,在 Windows 上启动服务器时,如果没有指定 SSL 证书或密钥文件,并且禁用了
shared_memory
系统变量,那么服务器将在启动时写入错误日志并退出。尝试在启动时启用require_secure_transport
变量将导致服务器写入错误日志并退出。尝试在运行时启用变量将失败,并返回ER_NO_SECURE_TRANSPORTS_CONFIGURED
错误。详见强制加密连接。
-
System Variable resultset_metadata
Scope Session Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value FULL
Valid Values FULL
NONE
对于可选的元数据传输连接,客户端将设置
resultset_metadata
系统变量,以控制服务器是否返回结果集元数据。允许的值是FULL
(返回所有元数据,这是默认值)和NONE
(返回无元数据)。对于非元数据可选的连接,设置
resultset_metadata
到NONE
将导致错误。关于管理结果集元数据传输的详细信息,请见Optional Result Set Metadata。
-
secondary_engine_cost_threshold
System Variable secondary_engine_cost_threshold
Scope Session Dynamic 是 SET_VAR
Hint Applies是 Type 数字 Default Value 100000.000000
Minimum Value 0
Maximum Value DBL_MAX (maximum double value)
查询离线到次要引擎的优化成本阈值。
用于HeatWave。详见MySQL HeatWave User Guide。
-
Command-Line Format --schema-definition-cache=#
System Variable schema_definition_cache
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 256
Minimum Value 256
Maximum Value 524288
定义了 schema 定义对象的限制数量,包括已使用和未使用的对象,可以在字典对象缓存中保留。
未使用的 schema 定义对象仅在使用的数量小于由
schema_definition_cache
定义的容量时保留在字典对象缓存中。设置为
0
时,schema 定义对象仅在使用时保留在字典对象缓存中。更多信息,请见第16.4节,“字典对象缓存”。
-
Command-Line Format --secure-file-priv=dir_name
System Variable secure_file_priv
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value 平台相关
Valid Values 空字符串
dirname
NULL
该变量用于限制数据导入和导出操作,例如执行
LOAD DATA
和SELECT ... INTO OUTFILE
语句,以及LOAD_FILE()
函数。这些操作仅允许对拥有FILE
特权的用户执行。secure_file_priv
可以设置为以下值:-
如果为空,变量无效。这不是安全的设置。
-
如果设置为目录名称,服务器将限制导入和导出操作,以便只在该目录中工作。目录必须存在;服务器不创建它。
-
如果设置为
NULL
,服务器将禁用导入和导出操作。
默认值是平台相关的,取决于
INSTALL_LAYOUT
CMake 选项的值,如下表所示。如果您从源代码构建,使用INSTALL_SECURE_FILE_PRIVDIR
CMake 选项来指定明确的secure_file_priv
值。INSTALL_LAYOUT
ValueDefault secure_file_priv
ValueSTANDALONE
空 DEB
,RPM
,SVR4
/var/lib/mysql-files
否则 mysql-files
在CMAKE_INSTALL_PREFIX
值下服务器在启动时检查
secure_file_priv
的值,并在错误日志中记录警告,如果值不安全。非空值被认为是不安全的,如果值为空、是数据目录或其子目录、或所有用户都可以访问的目录。如果secure_file_priv
设置为不存在的路径,服务器将在错误日志中记录错误信息并退出。 -
-
Command-Line Format --select-into-buffer-size=#
System Variable select_into_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 131072
Minimum Value 8192
Maximum Value 2147479552
Unit 字节 Block Size 4096
使用
SELECT INTO OUTFILE
或SELECT INTO DUMPFILE
将数据写入一个或多个文件以进行备份、数据迁移或其他目的时,可以使用缓冲区来写入数据到存储设备,以确定缓冲区同步时机,以避免写入延迟 stall 其他查询。select_into_buffer_size
将覆盖read_buffer_size
的值。 (select_into_buffer_size
和read_buffer_size
具有相同的默认、最大和最小值。) 您还可以使用select_into_disk_sync_delay
设置同步延迟。设置会话变量的值是受限制的操作。会话用户必须具有设置受限制的会话变量的权限。请参阅第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --select-into-disk-sync={ON|OFF}
System Variable select_into_disk_sync
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
Valid Values OFF
ON
当设置为
ON
时,启用了输出文件的缓冲同步写入操作,用于长时间运行的SELECT INTO OUTFILE
或SELECT INTO DUMPFILE
语句。 -
Command-Line Format --select-into-disk-sync-delay=#
System Variable select_into_disk_sync_delay
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 31536000
Unit 毫秒 当启用了输出文件的缓冲同步写入操作时,这个变量设置了可选的延迟(以毫秒为单位),用于同步写入操作。
0
(默认值)表示没有延迟。设置会话变量的操作是受限制的。会话用户必须具有足够的权限来设置受限制的会话变量。见第7.1.9.1节,“系统变量权限”。
-
Command-Line Format --session-track-gtids=value
System Variable session_track_gtids
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value OFF
Valid Values OFF
OWN_GTID
ALL_GTIDS
控制服务器是否将GTIDs返回给客户端,以便客户端使用它们来跟踪服务器状态。根据变量值,服务器在每个事务结束时将其GTIDs捕获并将其返回给客户端作为确认。可能的
session_track_gtids
值如下所示:-
OFF
: 服务器不将GTID返回给客户端。这是默认设置。 -
OWN_GTID
: 服务器返回自当前会话中自上次确认以来的所有事务的GTID。通常,这是最后一个事务的单个GTID,但如果单个客户端请求导致多个事务,则服务器返回包含所有相关GTID的GTID集。 -
ALL_GTIDS
: 服务器返回其gtid_executed
系统变量的全局值,该变量在事务成功提交后由服务器读取。该GTID集除了事务刚刚提交的GTID外,还包括服务器上的所有客户端事务,以及可能在事务当前被确认时提交的事务。
session_track_gtids
不能在事务上下文中设置。有关会话状态跟踪的更多信息,请见第7.1.18节,“服务器跟踪客户端会话状态”。
-
-
Command-Line Format --session-track-schema[={OFF|ON}]
System Variable session_track_schema
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
控制服务器是否跟踪当前会话中的默认架构(数据库)设置,并通知客户端提供架构名称。
如果架构名称跟踪器启用,名称通知将在每次设置默认架构时发生,即使新架构名称与旧架构名称相同。
有关会话状态跟踪的更多信息,请见第7.1.18节,“服务器跟踪客户端会话状态”。
-
Command-Line Format --session-track-state-change[={OFF|ON}]
System Variable session_track_state_change
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
控制服务器是否跟踪当前会话的状态变化,并在状态变化时通知客户端。状态变化可以报告以下客户端会话状态属性的变化:
-
默认架构(数据库).
-
会话特定的系统变量值.
-
用户定义的变量.
-
临时表.
-
预备语句.
如果启用了会话状态跟踪器,通知将在每个跟踪的会话属性发生变化时发生,即使新值与旧值相同。例如,将用户定义的变量设置为其当前值将导致通知。
变量
session_track_state_change
仅控制变化的通知,而不是变化的内容。例如,状态变化通知将在设置默认架构或跟踪会话系统变量时发生,但通知不包括架构名称或变量值。要接收架构名称或会话系统变量值的通知,请使用session_track_schema
或session_track_system_variables
系统变量,分别。Note将
session_track_state_change
的值分配给自己不是状态变化,并且不会报告为这样。然而,如果其名称列在session_track_system_variables
的值中,则对其的任何分配将导致通知新的值。有关会话状态跟踪的更多信息,请见第7.1.18节,“服务器跟踪客户会话状态”。
-
-
session_track_system_variables
Command-Line Format --session-track-system-variables=#
System Variable session_track_system_variables
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type String Default Value 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
Command-Line Format --session-track-transaction-info=value
System Variable session_track_transaction_info
Scope 全局,会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value OFF
Valid Values 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节,“服务器跟踪客户会话状态”。
-
-
Command-Line Format --set-operations-buffer-size=#
System Variable set_operations_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 256K
Minimum Value 16K
Maximum Value 1 GB
设置
INTERSECT
和EXCEPT
操作的哈希表缓冲区大小,当hash_set_operations
优化器开关为ON
时。在一般情况下,增加该缓冲区的大小可以提高这些操作的性能,当哈希优化启用时。 -
sha256_password_auto_generate_rsa_keys
Command-Line Format --sha256-password-auto-generate-rsa-keys[={OFF|ON}]
Deprecated 是 System Variable sha256_password_auto_generate_rsa_keys
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
服务器使用该变量来确定是否自动生成RSA私钥/公钥对文件,如果它们不在数据目录中。
在启动时,服务器自动生成RSA私钥/公钥对文件,如果满足以下条件:
sha256_password_auto_generate_rsa_keys
或caching_sha2_password_auto_generate_rsa_keys
系统变量启用;没有指定RSA选项;RSA文件不在数据目录中。这些私钥/公钥对文件使得使用RSA加密的密码交换在未加密连接上进行身份验证,见第8.4.1.3节,“SHA-256可插拔身份验证”和第8.4.1.2节,“Caching SHA-2可插拔身份验证”。关于RSA文件自动生成的更多信息,包括文件名和特征,见第8.3.3.1节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”
系统变量
auto_generate_certs
与之相关,但控制使用 SSL 证书和密钥文件的自动生成,以便使用 SSL 进行安全连接。 -
sha256_password_private_key_path
Command-Line Format --sha256-password-private-key-path=file_name
Deprecated 是 System Variable sha256_password_private_key_path
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 Default Value private_key.pem
该变量的值是
sha256_password
身份验证插件的 RSA 私钥文件路径。如果文件名是相对路径,则将其解释为服务器数据目录相对路径。该文件必须是 PEM 格式。Important由于该文件存储私钥,因此其访问权限应限制为只有 MySQL 服务器才能读取。
关于
sha256_password
,见第8.4.1.3节,“SHA-256 可插拔身份验证” -
Command-Line Format --sha256-password-proxy-users[={OFF|ON}]
Deprecated 是 System Variable sha256_password_proxy_users
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
该变量控制
sha256_password
内置身份验证插件是否支持代理用户。如果check_proxy_users
系统变量启用,则无效。关于用户代理,请见第8.2.19节,“代理用户” -
sha256_password_public_key_path
Command-Line Format --sha256-password-public-key-path=file_name
Deprecated 是 System Variable sha256_password_public_key_path
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 文件名 Default Value public_key.pem
该变量的值是
sha256_password
身份验证插件的 RSA 公钥文件路径。如果文件名是相对路径,它将相对于服务器数据目录解释。文件必须以 PEM 格式保存。因为该文件存储的是公钥,可以自由分发给客户端用户。 (使用 RSA 密码加密连接到服务器的客户端必须使用与服务器相同的公钥。)有关
sha256_password
的信息,包括客户端指定 RSA 公钥的信息,请见第8.4.1.3节,“SHA-256 可插拔身份验证”。 -
Command-Line Format --shared-memory[={OFF|ON}]
System Variable shared_memory
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Platform Specific Windows Type 布尔 Default Value OFF
(仅限 Windows。) 服务器是否允许共享内存连接。
-
Command-Line Format --shared-memory-base-name=name
System Variable shared_memory_base_name
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Platform Specific Windows Type 字符串 Default Value MYSQL
(仅限 Windows。) 共享内存连接使用的共享内存名称。这对于在单个物理机上运行多个 MySQL 实例时非常有用。默认名称是
MYSQL
。名称是大小写敏感的。该变量仅在服务器启动时使用
shared_memory
系统变量启用支持共享内存连接时生效。 -
show_create_table_skip_secondary_engine
Command-Line Format --show-create-table-skip-secondary-engine[={OFF|ON}]
System Variable show_create_table_skip_secondary_engine
Scope 会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
启用
show_create_table_skip_secondary_engine
将使SHOW CREATE TABLE
输出和CREATE TABLE
语句中排除mysqldump工具dump的--show-create-skip-secondary-engine
选项。mysqldump提供了
--show-create-skip-secondary-engine
选项。当指定时,它将启用show_create_table_skip_secondary_engine
系统变量,以便在dump操作期间生效。用于HeatWave。请参阅MySQL HeatWave User Guide。
-
Command-Line Format --show-create-table-verbosity[={OFF|ON}]
System Variable show_create_table_verbosity
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
SHOW CREATE TABLE
normally does not show theROW_FORMAT
table option if the row format is the default format. Enabling this variable causesSHOW CREATE TABLE
to displayROW_FORMAT
regardless of whether it is the default format. -
show_gipk_in_create_table_and_information_schema
Command-Line Format --show-gipk-in-create-table-and-information-schema[={OFF|ON}]
System Variable show_gipk_in_create_table_and_information_schema
Scope Global, Session Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
Whether generated invisible primary keys are visible in the output of
SHOW
statements and in Information Schema tables. When this variable is set toOFF
, such keys are not shown.This variable is not replicated.
更多信息,请见第15.1.20.11节,“生成的不可见主键”.
-
Command-Line Format --skip-external-locking[={OFF|ON}]
System Variable skip_external_locking
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
如果mysqld使用外部锁定(系统锁定),则该变量为
OFF
;如果外部锁定被禁用,则该变量为ON
。这只影响MyISAM
表的访问。该变量可以通过
--external-locking
或--skip-external-locking
选项设置。外部锁定默认禁用。外部锁定只影响
MyISAM
表的访问。有关详细信息,包括在什么情况下可以和不能使用,请见第10.11.5节,“外部锁定”. -
Command-Line Format --skip-name-resolve[={OFF|ON}]
System Variable skip_name_resolve
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value 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';
-
Command-Line Format --skip-networking[={OFF|ON}]
System Variable skip_networking
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
这个变量控制服务器是否允许TCP/IP连接。默认情况下,它禁用了TCP连接。如果启用,服务器只允许本地(非TCP/IP)连接,并且所有与mysqld的交互必须使用命名管道或共享内存(在Windows上)或Unix套接字文件(在Unix上)。这项选项对系统非常有用,其中只允许本地客户端。请参阅第7.1.12.3节,“DNS Lookups and the Host Cache”。
由于使用
--skip-grant-tables
禁用身份验证检查,服务器也禁用远程连接,以启用skip_networking
。 -
Command-Line Format --skip-show-database
System Variable skip_show_database
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
这可以防止用户使用
SHOW DATABASES
语句,如果他们没有SHOW DATABASES
特权。这可以提高安全性,如果您对用户可以查看其他用户的数据库有所担忧。该变量的效果取决于SHOW DATABASES
特权:如果变量值为ON
,则SHOW DATABASES
语句只能由拥有SHOW DATABASES
特权的用户执行,并且语句将显示所有数据库名称。如果变量值为OFF
,则SHOW DATABASES
语句可以由所有用户执行,但是只显示用户拥有SHOW DATABASES
或其他特权的数据库名称。Caution由于任何静态全局特权都是所有数据库的特权,因此任何静态全局特权都允许用户使用
SHOW DATABASES
语句或通过检查SCHEMATA
表中的INFORMATION_SCHEMA
,除了通过部分撤销限制的数据库外。 -
Command-Line Format --slow-launch-time=#
System Variable slow_launch_time
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 2
Minimum Value 0
Maximum Value 31536000
Unit 秒 如果创建线程需要超过这个时间秒,服务器将增加
Slow_launch_threads
状态变量。 -
Command-Line Format --slow-query-log[={OFF|ON}]
System Variable slow_query_log
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
是否启用慢查询日志。该值可以是0(或
OFF
)以禁用日志或1(或ON
)以启用日志。日志输出的目标由log_output
系统变量控制;如果该值是NONE
,则不写入任何日志条目,即使日志启用。“慢”由
long_query_time
变量的值确定。请参阅第7.4.5节,“慢查询日志”。 -
Command-Line Format --slow-query-log-file=file_name
System Variable slow_query_log_file
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value 主机名-slow.log
慢查询日志文件的名称。默认值为
,但可以使用主机名
-slow.log--slow_query_log_file
选项来更改初始值。 -
Command-Line Format --socket={file_name|pipe_name}
System Variable socket
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value (Windows) MySQL
Default Value (Other) /tmp/mysql.sock
在Unix平台上,这个变量是本地客户端连接使用的套接字文件名称。默认值为
/tmp/mysql.sock
。(对于某些分发格式,目录可能不同,例如RPMs中的/var/lib/mysql
。)在Windows上,这个变量是本地客户端连接使用的命名管道名称。默认值为
MySQL
(不区分大小写)。 -
Command-Line Format --sort-buffer-size=#
System Variable sort_buffer_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 262144
Minimum Value 32768
Maximum Value (Windows) 4294967295
Maximum Value (Other, 64-bit platforms) 18446744073709551615
Maximum Value (Other, 32-bit platforms) 4294967295
Unit 字节 每个会话都需要对排序分配一个缓冲区的大小。
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外)允许更大的值,但将被截断到4GB−1,并显示警告。 -
System Variable sql_auto_is_null
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
如果该变量启用,则在成功插入自动生成的AUTO_INCREMENT值后,可以通过以下形式的语句找到该值:
SELECT * FROM tbl_name WHERE auto_col IS NULL
如果语句返回一行,返回的值与调用
LAST_INSERT_ID()
函数时相同。有关详细信息,包括多行插入后的返回值,请参见第14.15节,“信息函数”。如果没有成功插入AUTO_INCREMENT
值,SELECT
语句返回无行。使用
IS NULL
比较来获取AUTO_INCREMENT
值的行为是某些ODBC程序,例如Access使用的。请参见获取自增值。可以通过设置sql_auto_is_null
到OFF
来禁用该行为。默认值
sql_auto_is_null
是OFF
。 -
System Variable sql_big_selects
Scope 全局,会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value ON
如果设置为
OFF
,MySQL将中止可能需要很长时间执行的SELECT
语句(即optimizer估计的检查行数超过max_join_size
的值)。这对于在SELECT
语句中发出不良WHERE
子句时非常有用。新连接的默认值为ON
,允许所有SELECT
语句。如果将
max_join_size
系统变量设置为除DEFAULT
之外的值sql_big_selects
将设置为OFF
。 -
System Variable sql_buffer_result
Scope 全局,会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
如果启用,
sql_buffer_result
将强制将SELECT
语句的结果存储在临时表中。这可以帮助 MySQL 早期释放表锁定,并在将结果发送给客户端时可以节省时间。默认值为OFF
. -
sql_generate_invisible_primary_key
Command-Line Format --sql-generate-invisible-primary-key[={OFF|ON}]
System Variable sql_generate_invisible_primary_key
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
是否将生成不可见的主键添加到任何
InnoDB
表中,如果该表没有自动生成主键。这个变量不被复制。即使在副本上设置了该变量,它也将被忽略;这意味着,副本默认情况下不会为复制的表生成主键,如果源端的表没有自动生成主键。您可以通过在
CHANGE REPLICATION SOURCE TO
语句中设置REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE
,以便在副本上生成不可见的主键。更多信息和示例,请见
Section 15.1.20.11, “Generated Invisible Primary Keys”
. -
System Variable sql_log_off
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
Valid Values OFF
(启用日志记录)ON
(禁用日志记录)这个变量控制当前会话是否禁用一般查询日志记录(假设一般查询日志本身是启用的)。默认值为
OFF
(启用日志记录)。要禁用或启用当前会话的日志记录,可以将会话sql_log_off
变量设置为ON
或OFF
.设置会话变量的操作是受限的。会话用户必须具有足够的权限来设置受限的会话变量。见
Section 7.1.9.1, “System Variable Privileges”
. -
Command-Line Format --sql-mode=name
System Variable sql_mode
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 设置 Default Value ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
Valid Values 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 模式”。
NoteMySQL 安装程序可能在安装过程中配置 SQL 模式。
如果 SQL 模式与默认值或您期望的值不同,请检查服务器在启动时读取的选项文件中是否存在设置。
-
如果启用(默认),诊断将增加
Note
级别的warning_count
,并将其记录到服务器中。如果禁用,Note
诊断将不增加warning_count
,并且服务器将不记录它们。 mysqldump 包含了禁用该变量的输出,以便在重新加载dump文件时不产生警告,以免影响重新加载操作的完整性。 -
System Variable sql_quote_show_create
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
如果启用(默认),服务器将对
SHOW CREATE TABLE
和SHOW CREATE DATABASE
语句的标识符进行引用。如果禁用,引用将被禁用。这项选项默认启用,以便在需要引用时的复制工作。请参阅第15.7.7.11节,“SHOW CREATE TABLE Statement”和第15.7.7.7节,“SHOW CREATE DATABASE Statement”。 -
Command-Line Format --sql-require-primary-key[={OFF|ON}]
System Variable sql_require_primary_key
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
是否在创建新表或更改现有表的结构时强制要求表具有主键。
设置会话值的系统变量是受限制的操作。会话用户必须具有足够的权限以设置受限制的会话变量。请参阅第7.1.9.1节,“System Variable Privileges”。
启用该变量可以避免在没有主键的表上进行的更新或删除操作可能引起的性能问题。在复制源服务器上,这些操作可以使用单个表扫描,但在使用行基于复制时,结果是对每个要修改的行进行表扫描。具有主键的表扫描不再出现。
sql_require_primary_key
适用于基本表和TEMPORARY表,并且对其值的更改将被复制到副本服务器。表必须使用支持复制的MySQL存储引擎。启用
sql_require_primary_key
将产生以下效果:-
尝试创建一个没有主键的新表将失败,并且包括CREATE TABLE ... LIKE和CREATE TABLE ... SELECT。在CREATE TABLE部分包括主键定义除外。
-
尝试从现有表中删除主键将失败,唯一的例外是ALTER TABLE语句中同时删除主键并添加主键。
删除主键失败,即使表还包含一个
唯一不可空
索引。 -
尝试导入没有主键的表将失败并出现错误。
REQUIRE_TABLE_PRIMARY_KEY_CHECK
选项是CHANGE REPLICATION SOURCE TO
语句的 replica 可以选择自己的主键检查策略。当该选项设置为ON
时,对于一个复制通道,replica 始终使用ON
的值作为sql_require_primary_key
系统变量在复制操作中,要求主键。当该选项设置为OFF
时,对于一个复制通道,replica 始终使用OFF
的值作为sql_require_primary_key
系统变量在复制操作中,不要求主键。在REQUIRE_TABLE_PRIMARY_KEY_CHECK
选项设置为STREAM
时(这是默认值),replica 使用来自源的每个事务的值。使用STREAM
设置REQUIRE_TABLE_PRIMARY_KEY_CHECK
选项时,如果对复制通道启用了权限检查,PRIVILEGE_CHECKS_USER
帐户需要足够的权限来设置受限的会话变量,以便将sql_require_primary_key
系统变量的会话值。使用ON
或OFF
设置时,不需要这些权限。更多信息,请参见第19.3.3节,“Replication Privilege Checks”。 -
-
System Variable sql_safe_updates
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value OFF
如果该变量启用,
UPDATE
和DELETE
语句不使用键在WHERE
子句或LIMIT
子句中将产生错误。这使得可以捕捉UPDATE
和DELETE
语句,其中键未正确使用,并将可能改变或删除大量行。默认值为OFF
。对于mysql客户端,
sql_safe_updates
可以通过使用--safe-updates
选项启用。更多信息,请见使用安全更新模式 (--safe-updates)。 -
System Variable sql_select_limit
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 18446744073709551615
Minimum Value 0
Maximum Value 18446744073709551615
SELECT 语句返回的最大行数。更多信息,请见使用安全更新模式 (--safe-updates)。
新连接的默认值是服务器允许的每个表的最大行数。典型的默认值是(232)−1 或(264)−1。如果您已经更改了限制,可以通过将值设置为
DEFAULT
来恢复默认值。如果SELECT语句具有
LIMIT
子句,LIMIT
将优先于sql_select_limit
的值。 -
System Variable sql_warnings
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
该变量控制单行
INSERT
语句是否生成警告信息字符串。如果发生警告,服务器将生成信息字符串。默认值为OFF
。将值设置为ON
以生成信息字符串。 -
Command-Line Format --ssl-ca=file_name
System Variable ssl_ca
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value NULL
该变量指定了证书授权机构(CA)证书文件的路径名。文件包含了PEM格式的证书授权机构列表。
该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文,该连接在执行
ALTER INSTANCE RELOAD TLS
或重启后如果变量值被持久化。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections. -
Command-Line Format --ssl-capath=dir_name
System Variable ssl_capath
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 目录名称 Default Value NULL
包含PEM格式的受信任SSL证书_authority(CA)证书文件的目录路径。
该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文,该连接在执行
ALTER INSTANCE RELOAD TLS
或重启后如果变量值被持久化。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections. -
Command-Line Format --ssl-cert=file_name
System Variable ssl_cert
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名称 Default Value NULL
服务器SSL公钥证书文件的路径名称,格式为PEM。
如果服务器以
ssl_cert
设置为使用任何受限加密或加密类别的证书,服务器启动时将禁用加密连接支持。关于加密限制的信息,请见Connection Cipher Configuration.该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文,该连接在执行
ALTER INSTANCE RELOAD TLS
或重启后如果变量值被持久化。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections. -
Command-Line Format --ssl-cipher=name
System Variable ssl_cipher
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value NULL
用于TLSv1.2加密连接的加密cipher列表。如果列表中没有支持的cipher,使用该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
尝试将不在这里显示的cipher值添加到cipher列表中时,会引发错误(
ER_BLOCKED_CIPHER
)。为了获得最佳可移植性,cipher列表应该是cipher名称的列表,使用冒号分隔。以下示例显示了两个cipher名称之间使用冒号:
[mysqld] ssl_cipher="DHE-RSA-AES128-GCM-SHA256:AES128-SHA"
OpenSSL支持 OpenSSL文档中描述的cipher语法,见https://www.openssl.org/docs/manmaster/man1/ciphers.html。
关于MySQL支持的加密cipher列表,请见Section 8.3.2, “Encrypted Connection TLS Protocols and Ciphers”。
这个变量可以在运行时修改,以影响服务器用于新连接的TLS上下文。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections。
-
-
Command-Line Format --ssl-crl=file_name
System Variable ssl_crl
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value NULL
包含证书撤销列表的文件路径,以PEM格式。
该变量可以在运行时修改,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
或重启后新建立的连接的TLS上下文。见服务器端运行时配置和监控加密连接。 -
Command-Line Format --ssl-crlpath=dir_name
System Variable ssl_crlpath
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 目录名称 Default Value NULL
包含PEM格式证书撤销列表文件的目录路径。
该变量可以在运行时修改,以影响服务器在执行
ALTER INSTANCE RELOAD TLS
或重启后新建立的连接的TLS上下文。见服务器端运行时配置和监控加密连接。 -
Command-Line Format --ssl-fips-mode={OFF|ON|STRICT}
Deprecated 是 System Variable ssl_fips_mode
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 枚举 Default Value OFF
Valid Values OFF
(或 0)ON
(或 1)STRICT
(或 2)控制服务器端是否启用FIPS模式。该
ssl_fips_mode
系统变量不同于其他xxx
">ssl_
系统变量,因为它不是控制服务器是否允许加密连接,而是影响哪些加密操作被允许。见第8.8节,“FIPS支持”。xxx
这些
ssl_fips_mode
值是允许的:-
OFF
(或 0):禁用FIPS模式。 -
ON
(或 1):启用FIPS模式。 -
STRICT
(或 2):启用“严格”FIPS模式。
Note如果 OpenSSL FIPS 对象模块不可用,唯一允许的
ssl_fips_mode
值是OFF
。在这种情况下,设置ssl_fips_mode
到ON
或STRICT
将导致服务器产生错误信息并退出。这个选项已经弃用,并且已经设置为只读。预计在未来的 MySQL 版本中将其删除。
-
-
Command-Line Format --ssl-key=file_name
System Variable ssl_key
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 文件名 Default Value NULL
服务器 SSL 私钥文件的路径名,以 PEM 格式。为了更好的安全性,使用RSA 密钥大小至少2048 位的证书。
如果密钥文件被保护密码,服务器将提示用户输入密码。密码不能存储在文件中。如果密码错误,程序将继续像不能读取密钥一样。
这个变量可以在运行时修改,以影响服务器用于新连接的TLS上下文。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections。
-
Command-Line Format --ssl_session_cache_mode={ON|OFF}
System Variable ssl_session_cache_mode
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
Valid Values 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
状态变量观察。 -
-
Command-Line Format --ssl_session_cache_timeout
System Variable ssl_session_cache_timeout
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 300
Minimum Value 0
Maximum Value 84600
Unit 秒 设置了在建立新加密连接到服务器时,允许重新使用先前的会话的时间段,条件是
ssl_session_cache_mode
系统变量启用且先前的会话数据可用。如果会话超时,会话不能再被重新使用。默认值为 300 秒,最大值为 84600(或一天的秒数)。对
ssl_session_cache_timeout
系统变量的更改,只在ALTER INSTANCE RELOAD TLS
语句执行后或在重启时生效。当前ssl_session_cache_timeout
的值可以通过Ssl_session_cache_timeout
状态变量观察。 -
Command-Line Format --stored-program-cache=#
System Variable stored_program_cache
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 256
Minimum Value 16
Maximum Value 524288
设置了软上限,用于存储程序每个连接的缓存数量。该变量的值是根据存储程序在 MySQL 服务器中维护的两个缓存中,分别用于存储存储程序和存储函数的数量。
每当存储程序被执行时,这个缓存大小将在首次或顶级语句在程序中被解析之前被检查;如果同类型的存储程序(存储程序或存储函数)数量超过指定的限制,该对应的缓存将被刷新,并之前为缓存对象分配的内存将被释放。这允许缓存安全地刷新,即使存在存储程序之间的依赖关系。
存储程序和存储函数缓存在与字典对象缓存的存储程序定义缓存部分并行存在。存储程序和存储函数缓存在每个连接上,而存储程序定义缓存在共享上。存储程序和存储函数缓存中的对象存在与字典对象缓存中的对象存在无关联,反之亦然。更多信息,请见第16.4节,“字典对象缓存”。
-
stored_program_definition_cache
Command-Line Format --stored-program-definition-cache=#
System Variable stored_program_definition_cache
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 256
Minimum Value 256
Maximum Value 524288
定义了字典对象缓存中存储程序定义对象的数量限制,包括已使用和未使用的对象。
未使用的存储程序定义对象仅在在使用的数量少于缓存容量时在字典对象缓存中保留。
设置为0意味着存储程序定义对象仅在使用时在字典对象缓存中保留。
存储程序定义缓存分区与使用
stored_program_cache
选项配置的存储程序和存储函数缓存并行存在。选项
stored_program_cache
设置了每个连接的存储程序或函数缓存的软上限,每次连接执行存储程序或函数时都会检查该限制。存储程序定义缓存分区则是共享缓存,用于存储其他用途的存储程序定义对象。存储程序定义缓存分区中的对象存在与存储程序缓存或存储函数缓存中的对象存在无关联,反之亦然。相关信息,请见第16.4节,“字典对象缓存”。
-
Command-Line Format --super-read-only[={OFF|ON}]
System Variable super_read_only
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
如果
read_only
系统变量启用,服务器允许的客户端更新仅来自拥有CONNECTION_ADMIN
特权(或弃用的SUPER
特权)的用户。如果super_read_only
系统变量也启用,服务器禁止客户端更新,即使用户拥有CONNECTION_ADMIN
或SUPER
特权。请参阅read_only
系统变量的描述,以了解读写模式的描述和read_only
和super_read_only
的交互信息。在
super_read_only
启用时,客户端更新将被阻止,包括不一定看起来像更新的操作,如CREATE FUNCTION
(安装可加载函数)、INSTALL PLUGIN
和INSTALL COMPONENT
。这些操作被禁止,因为它们涉及到mysql
系统架构中的表。类似地,如果事件调度器启用,启用
super_read_only
系统变量将阻止事件调度器更新事件“last executed”时间戳在events
数据字典表中。这将导致事件调度器在下一次尝试执行计划事件时停止,并将错误信息写入服务器日志。 (在这种情况下,event_scheduler
系统变量不会从ON
切换到OFF
。这意味着该变量将拒绝DBAintent,即使实际状态可能不同。) 如果super_read_only
后续被禁用,服务器将自动重新启动事件调度器。在复制源服务器上更改
super_read_only
的值不会被复制到副本服务器。该值可以在副本服务器上独立设置。 -
Command-Line Format --syseventlog.facility=value
System Variable syseventlog.facility
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 守护进程
在
syslog
中写入错误日志的facility(是什么类型的程序发送了消息)。这个变量在log_sink_syseventlog
错误日志组件安装时不可用。请参阅第7.4.2.8节,“系统日志错误记录”。允许的值可能因操作系统而异,请查看您的系统
syslog
文档。这个变量在 Windows 上不可用。
-
Command-Line Format --syseventlog.include-pid[={OFF|ON}]
System Variable syseventlog.include_pid
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value 是
是否将服务器进程ID添加到每行错误日志输出中,写入到
syslog
中。这一个变量在log_sink_syseventlog
错误日志组件安装时不可用。请参阅第7.4.2.8节,“系统日志错误记录”。这个变量在 Windows 上不可用。
-
Command-Line Format --syseventlog.tag=tag
System Variable syseventlog.tag
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 空字符串
在
syslog
或 Windows 事件日志中添加的标签。这个变量在log_sink_syseventlog
错误日志组件安装时不可用。请参阅第7.4.2.8节,“系统日志错误记录”。默认情况下,不设置标签,因此服务器标识符将是
MySQL
在 Windows 上,mysqld
在其他平台上。如果指定的标签值为tag
,则将其追加到服务器标识符的开头,结果是syslog
标识符为mysqld-
(或tag
MySQL-
在 Windows 上)。tag
在 Windows 上,要使用不已经存在的标签,服务器必须以管理员权限运行,以便创建标签的注册表项。已存在的标签不需要管理员权限。
-
System Variable system_time_zone
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 服务器系统时间区。服务器启动时,继承自机器默认的时间区,可能受到运行服务器或启动脚本的环境变量的修改。该值用于设置
system_time_zone
。要显式指定系统时间区,可以设置环境变量TZ
或使用--timezone
选项的mysqld_safe脚本。此外,在服务器主机时间区变化(例如, daylight saving time)时,
system_time_zone
反映该变化,这对应用程序有以下影响:-
引用
system_time_zone
的查询将在日光节省时间变化前和后获取不同的值。 -
对于在日光节省时间变化前开始执行并在变化后结束的查询,
system_time_zone
在查询中保持不变,因为该值通常在执行开始时缓存。
system_time_zone
变量不同于time_zone
变量。虽然它们可能具有相同的值,但后者用于初始化每个客户端连接的时间区。请参阅第7.1.15节,“MySQL Server Time Zone Support”。 -
-
Command-Line Format --table-definition-cache=#
System Variable table_definition_cache
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value -1
(表示自动调整;不要分配该字面值)Minimum Value 400
Maximum Value 524288
可以存储在表定义缓存中的表定义数量。如果您使用大量表,可以创建一个大型表定义缓存以加速表打开。表定义缓存使用更少的空间,不像正常表缓存那样使用文件描述符。最小值为400。默认值基于以下公式, capped to a limit of 2000:
MIN(400 + table_open_cache / 2, 2000)
对于
InnoDB
,table_definition_cache
设置作为对表实例在字典对象缓存和文件表空间的软限制,可以同时打开的文件表空间数量。如果字典对象缓存中的表实例数量超过
table_definition_cache
限制,LRU机制将开始标记表实例为删除,并最终从字典对象缓存中删除它们。由于包含外键关系的表实例,不会被LRU列表中标记。可以同时打开的文件表空间数量受到
table_definition_cache
和innodb_open_files
设置的限制。如果两个变量都设置,则使用最高设置。如果两个变量都未设置,则使用table_definition_cache
设置,该设置的默认值更高。如果打开的表空间数量超过table_definition_cache
或innodb_open_files
定义的限制,LRU机制将搜索LRU列表中的文件表空间,寻找已经flush完毕且不在扩展中的文件表空间。每次打开新的文件表空间时都会执行这个过程。只关闭不活动的文件表空间。表定义缓存与字典对象缓存的表定义缓存部分并行存在。两个缓存存储表定义,但服务于MySQL服务器的不同部分。缓存中的对象之间没有相互依赖关系。更多信息,请见第16.4章,“字典对象缓存”。
-
table_encryption_privilege_check
Command-Line Format --table-encryption-privilege-check[={OFF|ON}]
System Variable table_encryption_privilege_check
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
控制
TABLE_ENCRYPTION_ADMIN
特权检查,该检查在创建或更改加密的架构或通用表空间时发生,或者在创建或更改加密设置不同的表时发生。该检查默认禁用。在运行时设置
table_encryption_privilege_check
需要SUPER
特权。table_encryption_privilege_check
支持SET PERSIST
和SET PERSIST_ONLY
语法。请见第7.1.9.3节,“Persisted System Variables”。更多信息,请见定义架构和通用表空间的加密默认值。
-
Command-Line Format --table-open-cache=#
System Variable table_open_cache
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 4000
Minimum Value 1
Maximum Value 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如何打开和关闭表”。 -
Command-Line Format --table-open-cache-instances=#
System Variable table_open_cache_instances
Scope Global Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 16
Minimum Value 1
Maximum Value 64
表缓存实例的数量。为了提高可扩展性,减少会话之间的竞争,可以将表缓存分割成多个较小的缓存实例,每个实例的大小为
table_open_cache
/table_open_cache_instances
。会话需要锁定一个实例来访问它,以便执行DML语句。这将将缓存访问分配到多个实例中,从而提高性能在有许多会话访问表时。 (DDL语句仍然需要锁定整个缓存,但DDL语句的频率远远低于DML语句。)8或16是推荐的设置,在系统中使用16或更多核心时。然而,如果您有许多大型触发器在您的表中,这些触发器会导致高内存负载,那么默认的
table_open_cache_instances
设置可能会导致内存使用过高。在这种情况下,可以将table_open_cache_instances
设置为1,以限制内存使用。 -
Command-Line Format --tablespace-definition-cache=#
System Variable tablespace_definition_cache
Scope Global Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 256
Minimum Value 256
Maximum Value 524288
定义了表空间定义对象的限制,包括已使用和未使用的对象,可以在字典对象缓存中保留的数量。
未使用的表空间定义对象仅在字典对象缓存中保留,直到使用的数量少于由
tablespace_definition_cache
定义的容量。设置为
0
时,表空间定义对象仅在使用时保留在字典对象缓存中。更多信息,请见第16.4节,“字典对象缓存”。
-
Command-Line Format --temptable-max-mmap=#
System Variable temptable_max_mmap
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 2^64-1
Unit 字节 定义了TempTable存储引擎可以从内存映射临时文件中分配的最大内存量(以字节为单位),以避免将数据写入到
InnoDB
内部临时表中。设置为0(默认)将禁用从内存映射临时文件中分配内存。更多信息,请见第10.4.4节,“MySQL中内部临时表的使用”。在MySQL 8.4之前,这个选项设置为1 GiB,而不是0。
-
Command-Line Format --temptable-max-ram=#
System Variable temptable_max_ram
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 3% of total memory: min 1 GB, max 4 GB
Minimum Value 2097152
Maximum Value 2^64-1
Unit 字节 定义了TempTable存储引擎可以占用的最大内存量,以避免将数据写入到磁盘中。默认值是服务器上的总内存的3%,但最小值和最大值为1-4 GiB。更多信息,请见第10.4.4节,“MySQL中内部临时表的使用”。
在MySQL 8.4之前,默认值为总内存的1 GiB。
-
Command-Line Format --temptable-use-mmap[={OFF|ON}]
Deprecated 是 System Variable temptable_use_mmap
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value OFF
定义了TempTable存储引擎是否将内存中临时表的空间分配为内存映射临时文件,当TempTable存储引擎占用的内存超过由
temptable_max_ram
变量定义的限制时。禁用temptable_use_mmap
(默认)时,TempTable存储引擎使用InnoDB
磁盘内部临时表。更多信息,请见第10.4.4节,“MySQL中内部临时表的使用”。 -
Command-Line Format --thread-cache-size=#
System Variable thread_cache_size
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value -1
(表示自动调整;不要分配该字面值)Minimum Value 0
Maximum Value 16384
服务器应该缓存多少线程以供重用。当客户端断开连接,客户端的线程将被缓存在缓存中,如果缓存中有少于
thread_cache_size
个线程。请求线程将被满足通过重用缓存中的线程,如果可能,然后才创建新的线程。这個变量可以增加以提高性能,如果您有很多新的连接。通常,这不会提供明显的性能改进,如果您有一个良好的线程实现。然而,如果您的服务器每秒看到数百个连接,您应该将thread_cache_size
设置高 enough,以便大多数新的连接使用缓存线程。通过检查Connections
和Threads_created
状态变量,您可以看到线程缓存的效率。详细信息,请见第7.1.10节,“服务器状态变量”。默认值基于以下公式, capped to a limit of 100:
8 + (max_connections / 100)
-
Command-Line Format --thread-handling=name
System Variable thread_handling
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 枚举 Default Value one-thread-per-connection
Valid Values no-threads
one-thread-per-connection
loaded-dynamically
服务器用于连接线程的处理模型。允许的值是
no-threads
(服务器使用单个线程处理一个连接)、one-thread-per-connection
(服务器使用一个线程处理每个客户端连接)和loaded-dynamically
(由线程池插件在初始化时设置)。no-threads
对于 Linux 调试非常有用;见第7.9节,“Debugging MySQL”。 -
Command-Line Format --thread-pool-algorithm=#
System Variable thread_pool_algorithm
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 0
Maximum Value 1
该变量控制线程池插件使用的算法:
-
0
: 使用保守的低并发算法。 -
1
: 使用激进的高并发算法,性能可能会在极高连接数时下降。
该变量仅在线程池插件启用时可用。见第7.6.3节,“MySQL Enterprise Thread Pool”。
-
-
thread_pool_dedicated_listeners
Command-Line Format --thread-pool-dedicated-listeners
System Variable thread_pool_dedicated_listeners
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
将每个线程组中的一个监听线程分配给连接,以便从连接中接收语句。
-
OFF
: (默认) 不启用专门的监听线程。 -
ON
: 将每个线程组中的一个监听线程分配给连接,以便从连接中接收语句。专门的监听线程不执行查询。
启用
thread_pool_dedicated_listeners
仅在定义了thread_pool_max_transactions_limit
时有用。否则,thread_pool_dedicated_listeners
不应该启用。MySQL HeatWave 服务使用该变量,该变量仅在 MySQL Enterprise Edition 中可用,并且在 MySQL 8.4 中不受支持。
-
-
thread_pool_high_priority_connection
Command-Line Format --thread-pool-high-priority-connection=#
System Variable thread_pool_high_priority_connection
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1
该变量影响执行前语句的排队。 如果值为0(false,缺省),语句排队使用低优先级和高优先级队列。如果值为1(true),排队语句总是进入高优先级队列。
该变量仅在启用线程池插件时可用。请参阅第7.6.3节,“MySQL Enterprise Thread Pool”。
-
thread_pool_max_active_query_threads
Command-Line Format --thread-pool-max-active-query-threads
System Variable thread_pool_max_active_query_threads
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 512
每个组中的活动(运行)查询线程的最大允许数量。如果值为0,线程池插件使用可用的线程数量。
该变量仅在启用线程池插件时可用。请参阅第7.6.3节,“MySQL Enterprise Thread Pool”。
-
thread_pool_max_transactions_limit
Command-Line Format --thread-pool-max-transactions-limit
System Variable thread_pool_max_transactions_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 1000000
线程池插件允许的最大事务数量。定义事务限制将一个线程绑定到事务中,直到它提交,这有助于在高并发情况下稳定通过率。
默认值为0表示没有事务限制。该变量是动态的,但不能在运行时从0更改为更高值或反之。非零值在启动时允许动态配置在运行时。需要
CONNECTION_ADMIN
权限来在运行时配置thread_pool_max_transactions_limit
。当您定义事务限制时,启用
thread_pool_dedicated_listeners
将在每个线程组中创建一个专用监听线程。额外的专用监听线程消耗更多资源,影响线程池性能。因此,thread_pool_dedicated_listeners
应该谨慎使用。当
thread_pool_max_transactions_limit
定义的限制达到时,新的连接将出现假死状态,直到一个或多个现有事务完成。同样,在尝试在现有连接上启动新事务时也会出现这种情况。如果存在阻塞或长时间运行的连接,可能需要具有特权连接来访问服务器以增加限制、删除限制或杀死运行的事务。见特权连接。MySQL HeatWave 服务使用该变量,该变量仅在 MySQL Enterprise Edition 中可用,不支持在 MySQL 8.4 中。
-
thread_pool_max_unused_threads
Command-Line Format --thread-pool-max-unused-threads=#
System Variable thread_pool_max_unused_threads
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 4096
线程池中允许的未使用线程最大数量。这使得可以限制睡眠线程占用的内存。
值为0(默认)意味着没有线程池限制。值为
N
,其中N
大于0,表示1个消费线程和N
−1保留线程。在这种情况下,如果线程准备睡眠,但睡眠线程数量已经达到最大,线程将退出,而不是睡眠。睡眠线程是消费线程或保留线程之一。线程池允许一个线程作为消费线程睡眠。如果线程睡眠,但没有现有消费线程,它将睡眠作为消费线程。当线程需要被唤醒时,将选择消费线程。如果没有消费线程,可以选择保留线程。
该变量仅在启用线程池插件时可用。见Section 7.6.3, “MySQL Enterprise Thread Pool”。
-
Command-Line Format --thread-pool-prio-kickup-timer=#
System Variable thread_pool_prio_kickup_timer
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1000
Minimum Value 0
Maximum Value 4294967294
Unit 毫秒 该变量影响等待执行的语句在低优先级队列中的状态。该值是等待语句被移动到高优先级队列的毫秒数。默认值为 1000(1 秒)。
该变量仅在线程池插件启用时可用。请参阅第7.6.3节,“MySQL Enterprise Thread Pool”。
-
thread_pool_query_threads_per_group
Command-Line Format --thread-pool-query-threads-per-group
System Variable thread_pool_query_threads_per_group
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 1
Maximum Value 4096
允许每个线程组中的查询线程数的最大值。最大值为 4096,但如果
thread_pool_max_transactions_limit
设置了值,则thread_pool_query_threads_per_group
不能超过该值。默认值为 1,这意味着每个线程组中只有一个活动查询线程,这在许多负载下工作良好。使用高并发线程池算法(
thread_pool_algorithm = 1
)时,考虑增加值以解决因长事务而导致的响应时间延迟。需要
CONNECTION_ADMIN
特权来在运行时配置thread_pool_query_threads_per_group
。如果在运行时减少
thread_pool_query_threads_per_group
的值,当前运行用户查询的线程将被允许完成,然后移到保留池或终止。如果在运行时增加该值,并且线程组需要更多线程,这些线程将从保留池中获取,如果可能,则创建新的线程。MySQL HeatWave 服务使用该变量,该变量仅在 MySQL Enterprise Edition 中可用,并且不支持 MySQL 8.4。
-
Command-Line Format --thread-pool-size=#
System Variable thread_pool_size
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 16
Minimum Value 1
Maximum Value 512
线程池中的线程组数。这是控制线程池性能的最重要参数。它影响了多少个语句可以同时执行。如果指定的值超出了允许的范围,线程池插件将不加载,服务器将在错误日志中写入一条消息。
这个变量只有在启用线程池插件时可用。见第7.6.3节,“MySQL Enterprise Thread Pool”。
-
Command-Line Format --thread-pool-stall-limit=#
System Variable thread_pool_stall_limit
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 6
Minimum Value 4
Maximum Value 600
Unit 毫秒 * 10 这个变量影响执行语句。值是语句开始执行后需要等待的时间,以便在语句变为阻塞状态时开始执行另一个语句。值以10毫秒为单位,故默认的6表示60ms。短的等待值允许线程更快地启动。短的值也更适合避免死锁情况。长的等待值对包含长时间运行语句的工作负载非常有用,以避免在当前语句执行时启动太多新的语句。
这个变量只有在启用线程池插件时可用。见第7.6.3节,“MySQL Enterprise Thread Pool”。
-
Command-Line Format --thread-pool-transaction-delay
System Variable thread_pool_transaction_delay
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 0
Maximum Value 300000
执行新事务前的延迟期限,以毫秒为单位。最大值为300000(5分钟)。
在并发事务影响其他操作的性能时,可以使用事务延迟。例如,如果并发事务影响索引创建或在线缓冲池重置操作,可以配置事务延迟以减少资源竞争在这些操作执行时。
工作线程睡眠指定的毫秒数,以便执行新事务。
thread_pool_transaction_delay
设置不影响来自特权连接(分配给Admin
线程组)的查询。这些查询不受配置的事务延迟影响。 -
Command-Line Format --thread-stack=#
System Variable thread_stack
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 1048576
Minimum Value 131072
Maximum Value (64-bit platforms) 18446744073709550592
Maximum Value (32-bit platforms) 4294966272
Unit 字节 Block Size 1024
每个线程的堆栈大小。默认值足以满足正常操作。如果线程堆栈大小太小,它将限制服务器可以处理的SQL语句的复杂度、存储过程的递归深度和其他内存消耗的操作。
-
System Variable time_zone
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 字符串 Default Value SYSTEM
Minimum Value -13:59
Maximum Value +14:00
当前时区。这個變數用於初始化每个客户端连接的时区。默认情况下,这個变量的初始值是
'SYSTEM'
(即使用system_time_zone
的值)。该值可以在服务器启动时使用--default-time-zone
选项指定。请参阅第7.1.15节,“MySQL Server Time Zone Support”。Note如果设置为
SYSTEM
,每个MySQL函数调用都需要时间戳计算时将调用系统库函数来确定当前系统时区。这可能会受到全局锁定的保护,从而导致竞争。 -
System Variable timestamp
Scope 会话 Dynamic 是 SET_VAR
Hint Applies是 Type 数字 Default Value UNIX_TIMESTAMP()
Minimum Value 1
Maximum Value 2147483647
设置这个客户端的时间。这用于从二进制日志中恢复行。
timestamp_value
应该是一个Unix epoch时间戳(类似于UNIX_TIMESTAMP()
的值,而不是'
格式的值)或YYYY-MM-DD hh:mm:ss
'DEFAULT
。将
timestamp
设置为常量值使其保持该值直到它被再次更改。将timestamp
设置为DEFAULT
使其值为当前日期和时间,以便在访问时获取。timestamp
是一个DOUBLE
而不是BIGINT
,因为其值包括微秒部分。最大值对应于'2038-01-19 03:14:07'
UTC,与TIMESTAMP
数据类型相同。SET timestamp
影响NOW()
返回的值,但不影响SYSDATE()
。这意味着在二进制日志中设置的时间戳设置对SYSDATE()
的调用没有影响。服务器可以使用--sysdate-is-now
选项来使SYSDATE()
成为NOW()
的同义词,在这种情况下SET timestamp
影响两个函数。 -
tls_certificates_enforced_validation
Command-Line Format --tls-certificates-enforced-validation[={OFF|ON}]
System Variable tls_certificates_enforced_validation
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value OFF
在启动时,服务器确保每个必要的SSL证书文件的位置在默认数据目录中,如果命令行上没有提供文件位置。然而,服务器不验证证书文件,因此可以在启动时使用无效证书。系统变量
tls_certificates_enforced_validation
控制是否在启动时强制证书验证。发现无效证书时,启用验证强制时启动执行将被中断。默认情况下,证书验证强制是禁用的(OFF
)。验证强制可以通过在命令行中指定
--tls-certificates-enforced-validation
选项来启用,或者不带ON
值。启用验证强制后,证书也将在通过ALTER INSTANCE RELOAD TLS
语句时被验证。这系统变量不能在重启时持久化。更多信息,请见配置证书验证强制。 -
Command-Line Format --tls-ciphersuites=ciphersuite_list
System Variable tls_ciphersuites
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 字符串 Default Value 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协议和加密套件”。
-
-
Command-Line Format --tls-version=protocol_list
System Variable tls_version
Scope 全局
Dynamic 是
SET_VAR
Hint Applies否
Type 字符串
Default Value TLSv1.2,TLSv1.3
服务器允许的加密连接协议。值是一个或多个以逗号分隔的协议名称,不区分大小写。可以命名的协议取决于MySQL使用的SSL库。选择的协议应该避免留下“空洞”。更多信息,请见第8.3.2节,“加密连接TLS协议和加密套件”。
该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文。见服务器端运行时配置和监控加密连接。
Important-
MySQL 8.4不支持TLSv1和TLSv1.1连接协议。见TLSv1和TLSv1.1协议的移除支持以获取更多信息。
-
MySQL 8.4支持TLSv1.3协议,但前提是MySQL Server使用OpenSSL 1.1.1或更高版本编译。服务器在启动时检查OpenSSL版本,如果低于1.1.1,TLSv1.3将从默认值中删除。在这种情况下,默认值为
TLSv1.2
。
-
-
Command-Line Format --tmp-table-size=#
System Variable tmp_table_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 整数 Default Value 16777216
Minimum Value 1024
Maximum Value 18446744073709551615
Unit 字节 定义了内存中临时表的最大大小,这些表由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
(和max_heap_table_size
如果必要)的值,以便使用MEMORY存储引擎创建内存中临时表。您可以通过比较内存磁盘临时表的数量和总的临时表数量来比较。可以比较
Created_tmp_disk_tables
和Created_tmp_tables
的值。 -
Command-Line Format --tmpdir=dir_name
System Variable tmpdir
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 目录名称 用于创建临时文件的目录路径。可能有用的是,如果您的默认
/tmp
目录位于一个存储空间太小的分区上。该变量可以设置为多个路径的列表,这些路径将按顺序使用。路径应该使用Unix上的冒号字符(:
)或Windows上的分号字符(;
)分隔。tmpdir
可以是一个非永久的位置,如内存文件系统或重启服务器时清除的目录。如果MySQL服务器作为副本,并且您使用了非永久的位置来设置tmpdir
,请考虑为副本设置不同的临时目录使用replica_load_tmpdir
变量。对于副本,临时文件用于复制LOAD DATA
语句的存储在这个目录中,因此在机器重启时可以存储这些文件,以便在重启后继续复制。关于临时文件存储位置的更多信息,请参见第B.3.3.5节,“MySQL中临时文件的存储位置”。
-
Command-Line Format --transaction-alloc-block-size=#
System Variable transaction_alloc_block_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 8192
Minimum Value 1024
Maximum Value 131072
Unit 字节 Block Size 1024
每个事务内存池的增加量(以字节为单位)。请参见
transaction_prealloc_size
的描述。 -
Command-Line Format --transaction-isolation=name
System Variable transaction_isolation
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 枚举 Default Value REPEATABLE-READ
Valid Values 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 Statement”。 -
-
Command-Line Format --transaction-prealloc-size=#
Deprecated 是 System Variable transaction_prealloc_size
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 4096
Minimum Value 1024
Maximum Value 131072
Unit 字节 Block Size 1024
每个事务都有一个内存池,从中各种事务相关的分配都可以从中获取内存。该池的初始大小是
transaction_prealloc_size
字节。每次分配都无法从池中获取足够的内存时,池将增加transaction_alloc_block_size
字节。事务结束时,池将被截断到transaction_prealloc_size
字节。通过将transaction_prealloc_size
设置为包含所有语句的单个事务中,可以避免许多malloc()
调用。transaction_prealloc_size
已弃用,设置该变量现在没有任何影响。预计transaction_prealloc_size
将在未来的MySQL版本中被删除。 -
Command-Line Format --transaction-read-only[={OFF|ON}]
System Variable transaction_read_only
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value 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 语句”。 -
-
System Variable unique_checks
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value ON
如果设置为1(默认值),则在
InnoDB
表中执行secondary索引的唯一性检查。如果设置为0,存储引擎可以假设输入数据中不包含唯一性违规。如果您确定您的数据不包含唯一性违规,可以将其设置为0,以加速大表的导入到InnoDB
中。将该变量设置为0不要求存储引擎忽略唯一性违规。引擎仍然可以检查它们并在检测到违规时发出错误信息。
-
Command-Line Format --updatable-views-with-limit[={OFF|ON}]
System Variable updatable_views_with_limit
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value 1
该变量控制了是否可以在视图中执行更新操作,而视图不包含所有的主键列,如果更新语句包含
LIMIT
子句。更新操作是UPDATE
或DELETE
语句。主键这里指的是PRIMARY KEY或UNIQUE索引,其中不包含NULL值。该变量可以有两个值:
-
1
或YES
: 发出警告(而不是错误信息)。这是默认值。 -
0
或NO
: 禁止更新操作。
-
-
System Variable use_secondary_engine
Scope 会话 Dynamic 是 SET_VAR
Hint Applies是 Type 枚举 Default Value ON
Valid Values OFF
ON
FORCED
为将来使用。
是否执行查询使用辅助引擎。
与HeatWave一起使用。请参阅MySQL HeatWave用户指南。
-
validate_password.
xxx
validate_password组件实现了一组名为validate_password.
xxx
的系统变量,这些变量影响该组件的密码测试;请参阅第8.4.3.2节,“密码验证选项和变量”。 -
服务器的版本号。这可能还包括服务器构建或配置信息的后缀。
-debug
表示服务器在启用调试支持时构建。 -
System Variable version_comment
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 CMake配置程序有一个
COMPILATION_COMMENT_SERVER
选项,允许在构建MySQL时指定注释。这变量包含注释的值。 -
System Variable version_compile_machine
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 服务器二进制文件的类型。
-
System Variable version_compile_os
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 MySQL构建时的操作系统类型。
-
System Variable version_compile_zlib
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 编译时使用的zlib库的版本。
-
Command-Line Format --wait-timeout=#
System Variable wait_timeout
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 Default Value 28800
Minimum Value 1
Maximum Value (Windows) 2147483
Maximum Value (Other) 31536000
Unit 秒 服务器等待非交互连接上的活动时间,以便关闭连接。
线程启动时,会话
wait_timeout
值将从全局wait_timeout
值或全局interactive_timeout
值初始化,取决于客户端类型(由mysql_real_connect()
中的CLIENT_INTERACTIVE
连接选项定义)。请参见interactive_timeout
。 -
上一个语句生成的错误、警告和注意的数量。这变量是只读的。请参见Section 15.7.7.41, “SHOW WARNINGS Statement”。
-
Command-Line Format --windowing-use-high-precision[={OFF|ON}]
System Variable windowing_use_high_precision
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies是 Type 布尔 Default Value ON
是否计算窗口操作不失精度。请参见Section 10.2.1.21, “Window Function Optimization”。
-
Command-Line Format --xa-detach-on-prepare[={OFF|ON}]
System Variable xa_detach_on_prepare
Scope 全局、会话 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
当设置为
ON
(启用)时,所有XA事务将与连接(会话)分离(断开)作为XA PREPARE
的一部分。这意味着,即使原始连接未终止,XA事务也可以由另一个连接提交或回滚,并且该连接可以开始新的事务。在分离的XA事务中不能使用临时表。
当设置为
OFF
(禁用)时,XA事务将严格与同一连接相关直到会话断开。建议您允许启用(默认行为)以便于复制。更多信息,请见第15.3.8.2节,“XA事务状态”。