Documentation Home
MySQL 8.0 参考手册  / 第 5 章 MySQL 服务器管理  / 5.1 MySQL 服务器  /  5.1.8 服务器系统变量

5.1.8 服务器系统变量

MySQL 服务器维护许多配置其操作的系统变量。每个系统变量都有一个默认值。可以在服务器启动时使用命令行或选项文件中的选项设置系统变量。它们中的大多数都可以在运行时使用 SET 语句动态更改,这使您无需停止并重新启动服务器即可修改服务器的操作。您还可以在表达式中使用系统变量值。

设置全局系统变量运行时值通常需要SYSTEM_VARIABLES_ADMIN 特权(或已弃用的SUPER 特权)。设置会话系统运行时变量值通常不需要特殊权限,并且可以由任何用户完成,但也有例外。有关详细信息,请参阅 第 5.1.9.1 节,“系统变量权限”

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

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

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

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

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

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

笔记

以下一些变量描述涉及 启用禁用变量。这些变量可以通过将它们设置为 或 来启用 SET ,或者通过将它们设置为 或ON1禁用 。布尔变量可以在启动时设置为值 、、 和(不区分大小写),以及和 。请参阅第 4.2.2.4 节,“程序选项修饰符”OFF0ONTRUEOFFFALSE10

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

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

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

  • activate_all_roles_on_login

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

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

    授予的角色包括明确授予用户的角色和在 mandatory_roles系统变量值中命名的角色。

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

  • admin_address

    命令行格式 --admin-address=addr
    介绍 8.0.14
    系统变量 admin_address
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳

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

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

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

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

    • 从 MySQL 8.0.22 开始,该值可能包含网络命名空间说明符。

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

    服务器按如下方式处理不同类型的地址:

    • 如果地址是 IPv4 映射地址,则服务器接受该地址的 IPv4 或 IPv6 格式的 TCP/IP 连接。例如,如果服务器绑定到::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

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

    • 主机系统必须支持网络命名空间,并且每个命名空间必须之前已经设置。命名不存在的名称空间会产生错误。

    有关网络名称空间的其他信息,请参阅 第 5.1.14 节,“网络名称空间支持”

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

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

  • admin_port

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

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

    如果未指定, 则 设置admin_port无效,因为在这种情况下,服务器不维护管理网络接口。admin_address

  • admin_ssl_ca

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

    系统admin_ssl_ca变量类似于ssl_ca,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_ssl_capath

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

    系统admin_ssl_capath变量类似于ssl_capath,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_ssl_cert

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

    系统admin_ssl_cert变量类似于ssl_cert,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_ssl_cipher

    命令行格式 --admin-ssl-cipher=name
    介绍 8.0.21
    系统变量 admin_ssl_cipher
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 NULL

    系统admin_ssl_cipher变量类似于ssl_cipher,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_ssl_crl

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

    系统admin_ssl_crl变量类似于ssl_crl,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_ssl_crlpath

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

    系统admin_ssl_crlpath变量类似于ssl_crlpath,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_ssl_key

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

    系统admin_ssl_key变量类似于ssl_key,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_tls_ciphersuites

    命令行格式 --admin-tls-ciphersuites=ciphersuite_list
    介绍 8.0.21
    系统变量 admin_tls_ciphersuites
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 NULL

    系统admin_tls_ciphersuites 变量类似于 tls_ciphersuites,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

  • admin_tls_version

    命令行格式 --admin-tls-version=protocol_list
    介绍 8.0.21
    系统变量 admin_tls_version
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值(≥ 8.0.28) TLSv1.2,TLSv1.3
    默认值(≥ 8.0.21,≤ 8.0.27) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

    系统admin_tls_version变量类似于tls_version,只是它适用于管理连接接口而不是主连接接口。有关为管理界面配置加密支持的信息,请参阅 加密连接的管理界面支持

    重要的
    • 从 MySQL 8.0.28 开始,对 TLSv1 和 TLSv1.1 连接协议的支持已从 MySQL 服务器中删除。这些协议已从 MySQL 8.0.26 中弃用。有关详细信息,请参阅 取消对 TLSv1 和 TLSv1.1 协议的支持

    • 从 MySQL 8.0.16 开始,MySQL Server 支持 TLSv1.3 协议,前提是 MySQL Server 是使用 OpenSSL 1.1.1 或更高版本编译的。服务器在启动时检查 OpenSSL 的版本,如果它低于 1.1.1,则从系统变量的默认值中删除 TLSv1.3。在这种情况下,默认 值为TLSv1,TLSv1.1,TLSv1.2 (包括 MySQL 8.0.27)和 TLSv1.2(来自 MySQL 8.0.28)。

  • authentication_policy

    命令行格式 --authentication-policy=value
    介绍 8.0.27
    系统变量 authentication_policy
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 *,,

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

    因为authentication_policy 仅在创建或更改帐户时适用,所以对其值的更改对现有用户帐户没有影响。

    笔记

    虽然 系统变量对和 语句authentication_policy 的认证相关子句进行了一定的约束,但是 拥有 权限的用户不受约束。(对于否则不允许的语句,确实会出现警告。) CREATE USERALTER USERAUTHENTICATION_POLICY_ADMIN

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

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

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

      此外,该插件成为N未明确命名插件的因素身份验证方法的默认插件。有关详细信息,请参阅 默认身份验证插件

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

      • authenication_policy = 'caching_sha2_password, sha256_password'

      • authentication_policy = 'caching_sha2_password, authetication_fido, sha256_password'

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

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

    • 如果列表中缺少元素N(即值中的逗号少于 −1),则禁止N使用 factor 的身份验证方法 。N例如,值'*'只允许单一因素,因此 CREATE USER对使用ALTER USER. 在这种情况下,此类语句无法指定因素 2 或 3 的身份验证。

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

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

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

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

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

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

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

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

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

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

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

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

    下表显示了一些 authentication_policy值以及各自为创建或更改帐户而建立的策略。

    表 5.4 authentication_policy 值示例

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

  • authentication_windows_log_level

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

    仅当 authentication_windows启用 Windows 身份验证插件并启用调试代码时,此变量才可用。请参阅 第 6.4.1.6 节,“Windows 可插入身份验证”

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

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

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

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

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

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

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

  • autocommit

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

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

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

    [mysqld]
    autocommit=0
  • automatic_sp_privileges

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

    当此变量的值为 1(默认值)时 ,如果用户无法执行和更改或删除例程,服务器会自动将权限授予存储例程的创建者EXECUTEALTER ROUTINEALTER ROUTINE删除例程需要特权。)当例程被删除时,服务器也会自动删除创建者的那些特权。如果 automatic_sp_privileges为 0,服务器不会自动添加或删除这些权限。

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

    如果您使用 启动mysqld--skip-newautomatic_sp_privileges设置为OFF.

    另见第 25.2.2 节,“存储例程和 MySQL 权限”

  • auto_generate_certs

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

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

    在启动时,如果启用了系统变量,服务器会自动在数据目录中生成服务器端和客户端 SSL 证书和密钥文件, 除指定auto_generate_certs之外 --ssl没有指定任何 SSL 选项,并且数据中缺少服务器端 SSL 文件目录。这些文件启用使用 SSL 的安全客户端连接;参见 第 6.3.1 节,“配置 MySQL 以使用加密连接”

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

    sha256_password_auto_generate_rsa_keys 和 系统变量是相关 的 caching_sha2_password_auto_generate_rsa_keys ,但控制在未加密连接上使用 RSA 进行安全密码交换所需的 RSA 密钥对文件的自动生成。

  • avoid_temporal_upgrade

    命令行格式 --avoid-temporal-upgrade[={OFF|ON}]
    弃用 是的
    系统变量 avoid_temporal_upgrade
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    此变量控制是否ALTER TABLE隐式升级发现采用 5.6.4 之前格式的时间列(TIMEDATETIMETIMESTAMP不支持小数秒精度的列)。升级此类列需要重建表,这会阻止使用可能以其他方式应用于要执行的操作的快速更改。

    默认情况下禁用此变量。启用它会导致 ALTER TABLE不重建时间列,从而能够利用可能的快速更改。

    此变量已弃用;希望在未来的 MySQL 版本中将其删除。

  • back_log

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

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

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

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

  • basedir

    命令行格式 --basedir=dir_name
    系统变量 basedir
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 目录名称
    默认值 parent of mysqld installation directory

    MySQL 安装基本目录的路径。

  • big_tables

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

    如果启用,服务器会将所有临时表存储在磁盘上而不是内存中。这可以防止需要大型临时表的操作的大多数错误,但也会减慢内存表就足够的查询。 The table tbl_name is fullSELECT

    新连接的默认值为 OFF(使用内存临时表)。通常,永远不需要启用此变量。当内存内部 临时表由 存储引擎管理(默认),并且超过存储引擎 TempTable可以占用的最大内存量时 ,存储引擎开始将数据存储到磁盘上的临时文件中。当内存临时表由存储引擎管理时,内存表会根据需要自动转换为基于磁盘的表。有关详细信息,请参阅 TempTableTempTableMEMORY第 8.4.4 节,“MySQL 中的内部临时表使用”

  • bind_address

    命令行格式 --bind-address=addr
    系统变量 bind_address
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 *

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

    如果bind_address指定,其值必须满足以下要求:

    • 在 MySQL 8.0.13 之前, bind_address接受单个地址值,它可以指定单个非通配符 IP 地址或主机名,或者允许在多个网络接口( 、 或 )上侦听的通配符地址*格式 0.0.0.0之一::

    • 从 MySQL 8.0.13 开始, bind_address接受刚才描述的单个值或逗号分隔值列表。当变量命名多个值的列表时,每个值必须指定一个非通配符 IP 地址(IPv4 或 IPv6)或主机名。值列表中不允许使用 通配符地址格式(*0.0.0.0或)。::

    • 从 MySQL 8.0.22 开始,地址可能包含网络名称空间说明符。

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

    服务器按如下方式处理不同类型的地址:

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

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

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

    • 如果地址是 IPv4 映射地址,则服务器接受该地址的 IPv4 或 IPv6 格式的 TCP/IP 连接。例如,如果服务器绑定到::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

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

    • 主机系统必须支持网络命名空间,并且每个命名空间必须之前已经设置。命名不存在的名称空间会产生错误。

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

    有关网络名称空间的其他信息,请参阅 第 5.1.14 节,“网络名称空间支持”

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

    例子:

    • bind_address=*

      *服务器侦听通配符 指定的所有 IPv4 或 IPv6 地址。

    • bind_address=198.51.100.20

      服务器仅侦听 198.51.100.20IPv4 地址。

    • 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::1IPv6 地址 blue192.0.2.50全局命名空间中的 IPv4 地址。

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

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

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

  • block_encryption_mode

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

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

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

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

    SET block_encryption_mode = 'aes-256-cbc';

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

  • build_id

    介绍 8.0.31
    系统变量 build_id
    范围 全球的
    动态的
    SET_VAR提示适用
    特定于平台 Linux

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

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

  • bulk_insert_buffer_size

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

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

    从 MySQL 8.0.14 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • caching_sha2_password_digest_rounds

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

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

    将散列轮数增加到默认值以上会导致与增加量相关的性能损失:

    • 创建使用该 caching_sha2_password插件的帐户不会影响创建该帐户的客户端会话,但服务器必须执行散列循环才能完成操作。

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

  • caching_sha2_password_auto_generate_rsa_keys

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

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

    在启动时,如果所有这些条件都为真,服务器会自动在数据目录中生成 RSA 私钥/公钥对文件: sha256_password_auto_generate_rsa_keys or caching_sha2_password_auto_generate_rsa_keys 系统变量已启用;没有指定 RSA 选项;数据目录中缺少 RSA 文件。这些密钥对文件允许使用 RSA 在未加密的连接上为由 sha256_passwordcaching_sha2_password插件验证的帐户安全交换密码;请参阅 第 6.4.1.3 节,“SHA-256 可插入身份验证”第 6.4.1.2 节,“缓存 SHA-2 可插入身份验证”

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

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

  • caching_sha2_password_private_key_path

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

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

    重要的

    因为这个文件存储了一个私钥,所以应该限制它的访问方式,只有MySQL服务器才能读取它。

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

  • caching_sha2_password_public_key_path

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

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

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

  • character_set_client

    系统变量 character_set_client
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 utf8mb4

    从客户端到达的语句的字符集。当客户端连接到服务器时,使用客户端请求的字符集设置此变量的会话值。(许多客户端支持 --default-character-set显式指定此字符集的选项。另请参阅 第 10.4 节,“连接字符集和排序规则”。)变量的全局值用于在客户端请求的情况下设置会话值值未知或不可用,或者服务器配置为忽略客户端请求:

    • 客户端请求服务器不知道的字符集。例如,支持日语的客户端 sjis在连接到未配置sjis支持的服务器时发出请求。

    • 客户端来自 MySQL 4.1 之前的 MySQL 版本,因此不请求字符集。

    • mysqld以该 --skip-character-set-client-handshake 选项启动,这导致它忽略客户端字符集配置。这重现了 MySQL 4.0 的行为,如果您希望升级服务器而不升级所有客户端,这将很有用。

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

  • character_set_connection

    系统变量 character_set_connection
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 utf8mb4

    用于在没有字符集引入器的情况下指定的文字和数字到字符串转换的字符集。有关介绍人的信息,请参阅 第 10.3.8 节,“字符集介绍人”

  • character_set_database

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

    默认数据库使用的字符集。每当默认数据库更改时,服务器都会设置此变量。如果没有默认数据库,则该变量的值与character_set_server.

    从 MySQL 8.0.14 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

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

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

  • character_set_filesystem

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

    文件系统字符集。此变量用于解释引用文件名的字符串文字,例如在LOAD DATAand SELECT ... INTO OUTFILE语句和 LOAD_FILE()函数中。 在尝试打开文件之前,此类文件名将从 转换为 character_set_clientcharacter_set_filesystem默认值为 binary,表示不发生转换。对于允许多字节文件名的系统,不同的值可能更合适。例如,如果系统使用 UTF-8 表示文件名,则设置 character_set_filesystem'utf8mb4'.

    从 MySQL 8.0.14 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • character_set_results

    系统变量 character_set_results
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 utf8mb4

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

  • character_set_server

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

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

  • character_set_system

    系统变量 character_set_system
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 utf8mb3

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

  • character_sets_dir

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

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

  • check_proxy_users

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

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

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

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

  • collation_connection

    系统变量 collation_connection
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 细绳

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

  • collation_database

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

    默认数据库使用的排序规则。每当默认数据库更改时,服务器都会设置此变量。如果没有默认数据库,则该变量的值与 collation_server.

    从MySQL 8.0.18开始,设置这个系统变量的session值不再是受限操作。

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

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

  • collation_server

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

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

  • completion_type

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

    NO_CHAIN

    CHAIN

    RELEASE

    0

    1

    2

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

    价值 描述
    NO_CHAIN(或 0) COMMIT并且 ROLLBACK 不受影响。这是默认值。
    CHAIN(或 1) COMMITROLLBACK 分别相当于COMMIT AND CHAINROLLBACK AND CHAIN。(新事务立即开始,隔离级别与刚刚终止的事务相同。)
    RELEASE(或 2) COMMITROLLBACK 分别相当于COMMIT RELEASEROLLBACK RELEASE。(服务器在终止事务后断开连接。)

    completion_type影响以or 开头并以 START TRANSACTIONor BEGIN结尾的事务。它不适用于因执行第 13.3.3 节“导致隐式提交的语句”中列出的语句而导致的隐式提交。它也不适用于 , , 或 when 。 COMMITROLLBACKXA COMMITXA ROLLBACKautocommit=1

  • concurrent_insert

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

    NEVER

    AUTO

    ALWAYS

    0

    1

    2

    如果AUTO(默认),MySQL 允许 INSERT和 statements 对于数据文件中间没有空闲块的表 SELECT并发运行。MyISAM

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

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

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

    另见第 8.11.3 节,“并发插入”

  • connect_timeout

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

    mysqld 服务器在响应之前等待连接数据包 的秒数Bad handshake。默认值为 10 秒。

    connect_timeout如果客户经常遇到表单错误, 增加该 值可能会有所帮助。 Lost connection to MySQL server at 'XXX', system error: errno

  • connection_memory_chunk_size

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

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

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

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

  • connection_memory_limit

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

    设置单个用户连接可以使用的最大内存量。如果任何用户连接使用超过此数量,来自此连接的任何新查询将被拒绝并带有 ER_CONN_LIMIT

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

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

  • core_file

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

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

  • create_admin_listener_thread

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

    是否对管理网络接口上的客户端连接使用专用侦听线程(请参阅 第 5.1.12.1 节,“连接接口”)。默认是 OFF; 也就是说,主界面上普通连接的管理器线程也处理管理界面的连接。

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

    如果未指定, 则 设置 create_admin_listener_thread 无效, 因为在这种情况下,服务器不维护管理网络接口。admin_address

  • cte_max_recursion_depth

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

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

  • datadir

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

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

  • debug

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

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

    设置这个系统变量的会话值是一个受限的操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.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       |
    +---------+

    有关详细信息,请参阅第 5.9.4 节,“DBUG 包”

  • debug_sync

    系统变量 debug_sync
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 细绳

    此变量是调试同步工具的用户界面。使用调试同步需要使用CMake选项配置 MySQL(请参阅 第 2.9.7 节,“MySQL 源配置选项”)。如果未编译 Debug Sync,则此系统变量不可用。 -DENABLE_DEBUG_SYNC=1

    全局变量值是只读的,表示该工具是否已启用。默认情况下,Debug Sync 处于禁用状态,debug_sync 值为OFF. 如果服务器以 启动 ,其中是大于 0 的超时值,则启用调试同步并且 的值 后跟信号名称。此外, 成为各个同步点的默认超时。 --debug-sync-timeout=NNdebug_syncON - current signalN

    会话值可以被任何用户读取并且与全局变量具有相同的值。可以设置会话值来控制同步点。

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

    有关调试同步工具的描述以及如何使用同步点,请参阅 MySQL 内部结构:测试同步

  • default_authentication_plugin

    命令行格式 --default-authentication-plugin=plugin_name
    弃用 8.0.27
    系统变量 default_authentication_plugin
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 枚举
    默认值 caching_sha2_password
    有效值

    mysql_native_password

    sha256_password

    caching_sha2_password

    默认身份验证插件。这必须是使用内部凭据存储的插件,因此允许这些值:

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

    笔记

    在 MySQL 8.0 中,caching_sha2_password是默认的身份验证插件,而不是 mysql_native_password. 有关此更改对服务器操作的影响以及服务器与客户端和连接器的兼容性的信息,请参阅caching_sha2_password 作为首选身份验证插件

    在 MySQL 8.0.27 之前,该 default_authentication_plugin 值会影响服务器操作的这些方面:

    • 它确定服务器将哪个身份验证插件分配给由 CREATE USER未明确指定身份验证插件的语句创建的新帐户。

    • 对于使用以下形式的语句创建的帐户,服务器将该帐户与默认身份验证插件相关联,并为该帐户分配给定的密码,并根据该插件的要求进行哈希处理:

      CREATE USER ... IDENTIFIED BY 'cleartext password';

    从引入多因素身份验证的 MySQL 8.0.27 开始,它 default_authentication_plugin 仍然被使用,但与系统变量一起使用并且优先级低于 authentication_policy系统变量。有关详细信息,请参阅 默认身份验证插件。由于作用减弱, default_authentication_plugin 从 MySQL 8.0.27 开始弃用,并在未来的 MySQL 版本中删除。

  • default_collation_for_utf8mb4

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

    utf8mb4_0900_ai_ci

    utf8mb4_general_ci

    重要的

    系统default_collation_for_utf8mb4变量仅供 MySQL 复制内部使用。

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

    从MySQL 8.0.18开始,设置这个系统变量的session值不再是受限操作。

    默认utf8mb4排序规则用于以下语句:

    另见第 10.9 节,“Unicode 支持”

  • default_password_lifetime

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

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

    CREATE USER可以使用and ALTER USER语句 的密码过期选项根据个人帐户的需要覆盖全局密码过期策略。请参阅 第 6.2.15 节,“密码管理”

  • default_storage_engine

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

    表的默认存储引擎。请参阅 第 16 章,替代存储引擎。此变量仅为永久表设置存储引擎。TEMPORARY要为表 设置存储引擎,请设置default_tmp_storage_engine 系统变量。

    要查看可用和启用的存储引擎,请使用SHOW ENGINES语句或查询INFORMATION_SCHEMA ENGINES表。

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

  • default_table_encryption

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

    ENCRYPTION定义在未指定子句 的情况下创建模式和常规表空间时应用于它们的默认加密设置。

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

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

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

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

  • default_tmp_storage_engine

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

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

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

  • default_week_format

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

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

  • delay_key_write

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

    OFF

    ON

    ALL

    此变量指定如何使用延迟键写入。它仅适用于MyISAM表格。延迟的密钥写入导致密钥缓冲区在写入之间不被刷新。另见第 16.2.1 节,“MyISAM 启动选项”

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

    选项 描述
    OFF DELAY_KEY_WRITE被忽略。
    ON MySQL 尊重语句中DELAY_KEY_WRITE指定的任何选项 。CREATE TABLE这是默认值。
    ALL 所有新打开的表都被视为是在 DELAY_KEY_WRITE启用该选项的情况下创建的。
    笔记

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

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

    如果您使用 启动mysqld--skip-newdelay_key_write设置为 OFF.

    警告

    如果使用 启用外部锁定 --external-locking,则无法防止使用延迟键写入的表的索引损坏。

  • delayed_insert_limit

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

    此系统变量已弃用(因为 DELAYED不支持插入),您应该期望在未来的版本中将其删除。

  • delayed_insert_timeout

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

    此系统变量已弃用(因为 DELAYED不支持插入),您应该期望在未来的版本中将其删除。

  • delayed_queue_size

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

    此系统变量已弃用(因为 DELAYED不支持插入),您应该期望在未来的版本中将其删除。

  • disabled_storage_engines

    命令行格式 --disabled-storage-engines=engine[,engine]...
    系统变量 disabled_storage_engines
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 empty string

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

    [mysqld]
    disabled_storage_engines="MyISAM,FEDERATED"

    默认情况下, disabled_storage_engines为空(未禁用任何引擎),但可以将其设置为一个或多个引擎的逗号分隔列表(不区分大小写)。值中指定的任何引擎都不能用于使用 或 来创建表或表空间 CREATE TABLECREATE TABLESPACE也不能用于 ALTER TABLE ... ENGINEor ALTER TABLESPACE ... ENGINE更改现有表或表空间的存储引擎。尝试这样做会导致ER_DISABLED_STORAGE_ENGINE 错误。

    disabled_storage_engines不限制现有表的其他 DDL 语句,例如 CREATE INDEXTRUNCATE TABLEANALYZE TABLEDROP TABLEDROP TABLESPACE。这允许平滑过渡,以便使用禁用引擎的现有表或表空间可以通过诸如 . ALTER TABLE ... ENGINE permitted_engine

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

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

    笔记

    设置 disabled_storage_engines 可能会导致mysql_upgrade出现问题。有关详细信息,请参阅第 4.4.5 节,“mysql_upgrade — 检查和升级 MySQL 表”

  • disconnect_on_expired_password

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

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

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

  • div_precision_increment

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

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

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

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

    log_filter_dragnet控制错误日志过滤器组件 操作的过滤器规则 。如果log_filter_dragnet未安装,则不 dragnet.log_error_filter_rules 可用。如果log_filter_dragnet已安装但未启用,则更改 dragnet.log_error_filter_rules 无效。

    默认值的效果类似于设置为 的过滤器执行的log_sink_internal过滤 log_error_verbosity=2

    从 MySQL 8.0.12 开始, dragnet.Status可以查询状态变量以确定最近分配给 dragnet.log_error_filter_rules.

    在 MySQL 8.0.12 之前, dragnet.log_error_filter_rules 在运行时成功分配给会产生一条确认新值的注释:

    mysql> SET GLOBAL dragnet.log_error_filter_rules = 'IF prio <> 0 THEN unset prio.';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> SHOW WARNINGS\G
    *************************** 1. row ***************************
      Level: Note
       Code: 4569
    Message: filter configuration accepted:
             SET @@GLOBAL.dragnet.log_error_filter_rules=
             'IF prio!=ERROR THEN unset prio.';

    SHOW WARNINGSby显示 的值 表示规则集被成功解析并编译为内部形式后的反编译”规范表示。从语义上讲,这种规范形式与分配给 的值相同 dragnet.log_error_filter_rules,但分配值和规范值之间可能存在一些差异,如前面的示例所示:

    • <>运算符更改 !=为 。

    • 数字优先级 0 更改为相应的优先级符号ERROR

    • 可选空格已删除。

    有关其他信息,请参阅 第 5.4.2.4 节,“错误日志过滤的类型”第 5.5.3 节,“错误日志组件”

  • enterprise_encryption.maximum_rsa_key_size

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

    此变量限制 MySQL Enterprise Encryption 生成的 RSA 密钥的最大大小。该变量仅在 component_enterprise_encryption安装了 MySQL Enterprise Encryption 组件时可用,该组件可从 MySQL 8.0.30 获得。openssl_udf如果共享库用于提供 MySQL Enterprise Encryption 功能, 则该变量不可用。

    最低设置为 2048 位,这是当前最佳实践可接受的最小 RSA 密钥长度。默认设置为 4096 位。最高设置为 16384 位。生成更长的密钥会消耗大量 CPU 资源,因此您可以使用此设置将密钥的长度限制为能够为您的要求提供足够的安全性,同时平衡它与资源使用。请注意,openssl_udf 共享库提供的函数允许密钥长度从 1024 位开始,并且在升级组件后,最小密钥长度大于此值。有关详细信息,请参阅 第 6.6.2 节,“配置 MySQL 企业加密”

  • enterprise_encryption.rsa_support_legacy_padding

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

    此变量控制 MySQL Enterprise Encryption openssl_udf使用 MySQL 8.0.30 之前使用的共享库函数生成的加密数据和签名是否可以通过 MySQL Enterprise Encryption 组件的功能进行解密或验证,该组件 component_enterprise_encryption可从 MySQL 8.0.30 获得。该变量只有在安装了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,如果组件函数无法使用其正常方案解密或验证内容,它们将返回空输出。看 第 6.6.2 节,“配置 MySQL 企业加密”了解更多信息。

  • end_markers_in_json

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

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

  • eq_range_index_dive_limit

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

    当优化器在估计符合条件的行数时应从使用索引潜水切换到索引统计信息时,此变量指示相等比较条件中的相等范围数。它适用于具有以下任一等效形式的表达式的计算,其中优化器使用非唯一索引来查找 col_name值:

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

    在这两种情况下,表达式都包含 N相等范围。优化器可以使用索引潜水或索引统计信息进行行估计。如果eq_range_index_dive_limit 大于 0,优化器使用现有的索引统计信息而不是索引潜水,如果有 eq_range_index_dive_limit或更多的平等范围。因此,要允许在N相等范围内使用索引潜水,请设置 eq_range_index_dive_limitN+ 1。要禁用索引统计信息并始终使用索引潜水,而不管 N,请设置 eq_range_index_dive_limit为 0。

    有关详细信息,请参阅 多值比较的相等范围优化

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

  • error_count

    由生成消息的最后一条语句导致的错误数。该变量是只读的。请参阅 第 13.7.7.17 节,“显示错误语句”

  • event_scheduler

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

    ON

    OFF

    DISABLED

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

  • explicit_defaults_for_timestamp

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

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

    从MySQL 8.0.18开始,设置这个系统变量的session值不再是受限操作。

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

    • TIMESTAMP未使用该属性显式声明的列NULL 将自动使用该NOT NULL属性声明。允许为这样的列分配一个值,NULL并将该列设置为当前时间戳。 异常:从 MySQL 8.0.22 开始,尝试插入NULL声明为的生成列TIMESTAMP NOT NULL被错误拒绝。

    • 表中的第一TIMESTAMP列,如果未使用 NULL属性或显式 DEFAULTON UPDATE 属性显式声明,则自动使用 DEFAULT CURRENT_TIMESTAMPand ON UPDATE CURRENT_TIMESTAMP属性声明。

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

      根据是否 NO_ZERO_DATE启用严格 SQL 模式或 SQL 模式,默认值'0000-00-00 00:00:00'可能无效。请注意, TRADITIONALSQL 模式包括严格模式和 NO_ZERO_DATE. 请参阅 第 5.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 模式,则结果对于单行插入是错误的,或者'0000-00-00 00:00:00'对于禁用了严格 SQL 模式的多行插入,结果是插入的。在任何情况下都不会为列分配一个值,NULL将其设置为当前时间戳。

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

    • 没有TIMESTAMP列自动声明为DEFAULT CURRENT_TIMESTAMPorON UPDATE CURRENT_TIMESTAMP属性。必须明确指定这些属性。

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

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

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

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

    笔记

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

    有关其他信息,请参阅 第 11.2.5 节,“TIMESTAMP 和 DATETIME 的自动初始化和更新”

  • external_user

    系统变量 external_user
    范围 会议
    动态的
    SET_VAR提示适用
    类型 细绳

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

  • flush

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

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

    笔记

    如果flush启用,则值flush_time无关紧要,并且更改为 flush_time对刷新行为没有影响。

  • flush_time

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

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

    笔记

    如果flush启用,则值flush_time无关紧要,并且更改为 flush_time对刷新行为没有影响。

  • foreign_key_checks

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

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

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

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

    笔记

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

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

  • ft_boolean_syntax

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

    使用 执行的布尔全文搜索支持的运算符列表IN BOOLEAN MODE。请参阅 第 12.10.2 节,“布尔全文搜索”

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

    • 运算符函数由字符串中的位置决定。

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

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

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

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

    • 位置 10、13 和 14(默认设置为 :&|)保留用于将来的扩展。

  • ft_max_word_len

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

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

    笔记

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

  • ft_min_word_len

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

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

    笔记

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

  • ft_query_expansion_limit

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

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

  • ft_stopword_file

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

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

    笔记

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

  • general_log

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

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

  • general_log_file

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

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

  • generated_random_password_length

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

    CREATE USER为、 ALTER USERSET PASSWORD语句 生成的随机密码中允许的最大字符数。有关详细信息,请参阅 随机密码生成

  • global_connection_memory_limit

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

    设置所有用户连接可以使用的内存总量;也就是说, Global_connection_memory 不应超过这个数额。任何时候,来自用户的任何新查询都会被拒绝 ER_GLOBAL_CONN_LIMIT

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

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

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

  • global_connection_memory_tracking

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

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

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

  • group_concat_max_len

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

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

  • have_compress

    YESzlib 压缩库是否可用于服务器, 否则NO。如果不是,则 不能使用 COMPRESS()和 函数。UNCOMPRESS()

  • have_dynamic_loading

    YES如果mysqld支持动态加载插件,NO如果不支持。如果值为NO,则不能使用诸如--plugin-load在服务器启动时INSTALL PLUGIN加载插件或在运行时加载插件的语句等选项。

  • have_geometry

    YES如果服务器支持空间数据类型,NO如果不支持。

  • have_openssl

    此变量是 的同义词 have_ssl

    从 MySQL 8.0.26 开始, have_openssl已弃用并在未来的 MySQL 版本中删除。有关 MySQL 连接接口的 TLS 属性的信息,请使用该 tls_channel_status表。

  • have_profiling

    YES如果存在语句分析功能,NO如果不存在。如果存在, profiling系统变量控制是启用还是禁用此功能。请参阅 第 13.7.7.31 节,“SHOW PROFILES 语句”

    此变量已弃用,您应该期望在未来的 MySQL 版本中将其删除。

  • have_query_cache

    MySQL 8.0.3 中删除了查询缓存。 have_query_cache已弃用,其值始终为NO,您应该期望在未来的 MySQL 版本中将其删除。

  • have_rtree_keys

    YES如果RTREE索引可用,NO如果没有。(这些用于MyISAM表中的空间索引。)

  • have_ssl

    弃用 8.0.26
    系统变量 have_ssl
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    有效值

    YES(提供 SSL 支持)

    DISABLED(SSL 支持已编译到服务器中,但服务器未启动启用它的必要选项)

    YES如果mysqld支持 SSL 连接,DISABLED如果服务器是使用 SSL 支持编译的,但没有使用适当的连接加密选项启动。有关详细信息,请参阅 第 2.9.6 节 “配置 SSL 库支持”

    从 MySQL 8.0.26 开始,have_ssl 已弃用并在未来的 MySQL 版本中删除。有关 MySQL 连接接口的 TLS 属性的信息,请使用该 tls_channel_status表。

  • have_statement_timeout

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

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

  • have_symlink

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

    此变量在 Windows 上没有意义。

    笔记

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

  • histogram_generation_max_mem_size

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

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

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

  • host_cache_size

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

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

    host_cache_size变量控制主机缓存的大小,以及host_cache 公开缓存内容的性能模式表的大小。设置 host_cache_size具有以下效果:

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

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

    默认值自动调整为 128,值 max_connections达到 500 时加 1,值超过 500 时每增加 20 加 1 max_connections,上限为 2000。

    使用该--skip-host-cache 选项类似于将 host_cache_size系统变量设置为 0,但 host_cache_size更灵活,因为它还可以用于在运行时调整、启用和禁用主机缓存,而不仅仅是在服务器启动时。

    使用 启动服务器 --skip-host-cache不会阻止对 值的运行时更改 host_cache_size,但此类更改没有任何效果,即使 host_cache_size设置大于 0,也不会重新启用缓存。

    出于上一段中给出的原因,首选 设置host_cache_size系统变量而不是 选项。--skip-host-cache此外,该--skip-host-cache选项已被弃用,预计在未来版本的 MySQL 中将其删除;在 MySQL 8.0.29 及更高版本中,使用该选项会引发警告。

  • hostname

    系统变量 hostname
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳

    服务器在启动时将此变量设置为服务器主机名。根据 RFC 1034,从 MySQL 8.0.17 开始,最大长度为 255 个字符,在此之前为 60 个字符。

  • identity

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

  • init_connect

    命令行格式 --init-connect=name
    系统变量 init_connect
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳

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

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

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

    服务器丢弃由值中的语句生成的任何结果集init_connect

  • information_schema_stats_expiry

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

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

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

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

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

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

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

    要始终直接从存储引擎检索最新统计信息并绕过缓存值,请设置 information_schema_stats_expiry0.

    mysql.index_stats在这些情况下, 查询统计列不会在mysql.table_stats字典表中存储或更新统计信息:

    在知道事务是否提交之前,可以在多语句事务期间更新统计缓存。因此,缓存可能包含与已知提交状态不对应的信息。这可能发生在 autocommit=0或之后 START TRANSACTION

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

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

  • init_file

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

    如果指定,此变量将命名一个文件,其中包含在启动过程中要读取和执行的 SQL 语句。在 MySQL 8.0.18 之前,每条语句必须在一行中并且不应包含注释。从 MySQL 8.0.18 开始,文件中语句的可接受格式被扩展以支持这些结构:

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

    • delimiter $$, 将语句定界符设置为$$字符序列。

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

    • 多行语句。

    • #从一个字符到行尾的 注释。

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

    • /*从一个序列到下一个序列的 C 风格注释*/,包括多行。

    • 包含在单引号 ( ') 或双引号 ( ") 字符中的多行字符串文字。

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

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

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

  • innodb_xxx

    InnoDB系统变量在第 15.14 节,“InnoDB 启动选项和系统变量”中列出。这些变量控制表的存储、内存使用和 I/O 模式的许多方面,InnoDB并且现在InnoDB是默认存储引擎尤其重要。

  • insert_id

    插入值时 由以下 INSERTor 语句使用的值。这主要与二进制日志一起使用。 ALTER TABLEAUTO_INCREMENT

  • interactive_timeout

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

    服务器在关闭交互式连接之前等待其活动的秒数。交互式客户端定义为使用 CLIENT_INTERACTIVE选项 的客户端mysql_real_connect()。另见 wait_timeout

  • internal_tmp_disk_storage_engine

    命令行格式 --internal-tmp-disk-storage-engine=#
    删除 8.0.16
    系统变量 internal_tmp_disk_storage_engine
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 INNODB
    有效值

    MYISAM

    INNODB

    重要的

    在 MySQL 8.0.16 及更高版本中,磁盘内部临时表始终使用InnoDB存储引擎;从 MySQL 8.0.16 开始,此变量已被删除,因此不再受支持。

    在 MySQL 8.0.16 之前,此变量确定用于磁盘内部临时表的 存储引擎(请参阅磁盘内部临时表的存储引擎)。允许的值为MYISAMand INNODB(默认值)。

  • internal_tmp_mem_storage_engine

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

    MEMORY

    TempTable

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

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

    从 MySQL 8.0.27 开始,配置会话设置 internal_tmp_mem_storage_engine 需要 SESSION_VARIABLES_ADMINSYSTEM_VARIABLES_ADMIN 权限。

  • join_buffer_size

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

    用于普通索引扫描、范围索引扫描和不使用索引并因此执行全表扫描的连接的缓冲区的最小大小。在 MySQL 8.0.18 及更高版本中,此变量还控制用于散列连接的内存量。通常,获得快速连接的最佳方式是添加索引。join_buffer_size在无法添加索引时增加 的值 以获得更快的完全连接。为两个表之间的每个完全连接分配一个连接缓冲区。对于未使用索引的多个表之间的复杂连接,可能需要多个连接缓冲区。

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

    除非使用 Block Nested-Loop 或 Batched Key Access 算法,否则将缓冲区设置得大于保存每个匹配行所需的大小没有任何好处,并且所有连接至少分配最小大小,因此在将此变量设置为全球范围内的巨大价值。最好保持全局设置较小并仅在进行大型连接的会话中将会话设置更改为较大的值,或者通过使用 SET_VAR优化器提示在每个查询的基础上更改设置(参见 第 8.9.3 节,“优化器提示”)。如果全局大小大于大多数使用它的查询所需的内存分配时间,则可能会导致性能大幅下降。

    当使用 Block Nested-Loop 时,更大的连接缓冲区可能是有益的,直到第一个表中所有行的所有必需列都存储在连接缓冲区中。这取决于查询;最佳大小可能小于保存第一个表中的所有行。

    当使用 Batched Key Access 时, 的值 join_buffer_size定义了对存储引擎的每个请求中的批量密钥的大小。缓冲区越大,对连接操作的右侧表进行的顺序访问就越多,这可以显着提高性能。

    有关连接缓冲的其他信息,请参阅 第 8.2.1.7 节,“嵌套循环连接算法”。有关批量密钥访问的信息,请参阅 第 8.2.1.12 节,“阻止嵌套循环和批量密钥访问连接”。有关散列连接的信息,请参阅第 8.2.1.4 节,“散列连接优化”

  • keep_files_on_create

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

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

    如果使用or选项MyISAM创建表 并且找到现有的 or文件,MyISAM 总是返回错误。它不会覆盖指定目录中的文件。 DATA DIRECTORYINDEX DIRECTORY.MYD.MYI

  • key_buffer_size

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

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

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

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

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

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

    要在同时写入多行时获得更快的速度,请使用LOCK TABLES. 请参阅 第 8.2.5.1 节,“优化 INSERT 语句”

    您可以通过发出 SHOW STATUS语句并检查 Key_read_requestsKey_readsKey_write_requestsKey_writesstatus 变量来检查密钥缓冲区的性能。(请参阅第 13.7.7 节,“SHOW 语句”。) Key_reads/Key_read_requests比率通常应小于 0.01。如果您主要使用更新和删除,该 比率通常接近 1,但如果您倾向于执行同时影响许多行的更新,或者如果您使用表选项 ,则该Key_writes/Key_write_requests比率可能会小得多 。DELAY_KEY_WRITE

    使用中的密钥缓冲区的分数可以 key_buffer_size结合 Key_blocks_unused状态变量和缓冲区块大小来确定,缓冲区块大小可从key_cache_block_size 系统变量中获得:

    1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)

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

    可以创建多个MyISAM 密钥缓存。4GB 的大小限制单独适用于每个缓存,而不是作为一个组。参见 第 8.10.2 节,“MyISAM 密钥缓存”

  • key_cache_age_threshold

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

    该值控制缓冲区从键缓存的热子列表降级到暖子列表。较低的值会导致降级更快。最小值为 100。默认值为 300。请参阅第 8.10.2 节,“MyISAM 密钥缓存”

    块大小为 100。在存储系统变量的值之前,MySQL 服务器会将不是块大小精确倍数的值向下舍入为块大小的下一个较低倍数。解析器允许值最大为平台的最大无符号整数值(对于 32 位系统为 4294967295 或 2 32 -1,对于 64 位系统为 18446744073709551615 或 2 64 -1),但实际最大值比块大小小.

  • key_cache_block_size

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

    键缓存中块的大小(以字节为单位)。默认值为 1024。请参阅第 8.10.2 节,“MyISAM 密钥缓存”

  • key_cache_division_limit

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

    键缓存缓冲区列表的热子列表和温子列表之间的划分点。该值是用于暖子列表的缓冲区列表的百分比。允许的值范围从 1 到 100。默认值为 100。请参阅 第 8.10.2 节,“MyISAM 密钥缓存”

  • large_files_support

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

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

  • large_pages

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

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

  • large_page_size

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

    如果启用了大页面支持,这将显示内存页面的大小。仅在 Linux 上支持大内存页;在其他平台上,此变量的值始终为 0。请参阅第 8.12.3.2 节,“启用大页面支持”

  • last_insert_id

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

  • lc_messages

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

    用于错误消息的语言环境。默认值为 en_US。服务器将参数转换为语言名称并将其与 的值组合 lc_messages_dir以生成错误消息文件的位置。请参阅 第 10.12 节,“设置错误消息语言”

  • lc_messages_dir

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

    错误信息所在的目录。服务器使用该值和 的值 lc_messages来生成错误消息文件的位置。请参阅 第 10.12 节,“设置错误消息语言”

  • lc_time_names

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

    此变量指定区域设置,该区域设置控制用于显示日期和月份名称及缩写的语言。此变量影响 DATE_FORMAT(), DAYNAME()MONTHNAME()函数的输出。语言环境名称是 POSIX 样式的值,例如 'ja_JP''pt_BR'。默认值'en_US'与系统的区域设置无关。有关详细信息,请参阅 第 10.16 节,“MySQL 服务器语言环境支持”

  • license

    系统变量 license
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 GPL

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

  • local_infile

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

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

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

  • lock_wait_timeout

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

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

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

    此超时不适用于对mysql数据库中系统表的隐式访问,例如由GRANTor REVOKE语句或表日志记录语句修改的授权表。超时确实适用于直接访问的系统表,例如使用 SELECTUPDATE

    超时值分别适用于每个元数据锁定尝试。一个给定的语句可能需要多个锁,因此语句阻塞的时间可能比 lock_wait_timeout报告超时错误之前的值更长。当发生锁超时时, ER_LOCK_WAIT_TIMEOUT被报告。

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

  • locked_in_memory

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

    mysqld 是否被锁定在内存中 --memlock

  • log_error

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

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

  • log_error_services

    命令行格式 --log-error-services=value
    系统变量 log_error_services
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 log_filter_internal; log_sink_internal

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

    log_error_services从 MySQL 8.0.30 开始,如果尚未加载,则隐式加载 中命名的任何可加载(非内置)组件。在 MySQL 8.0.30 之前,值中命名的任何可加载(非内置)组件 log_error_services必须首先安装INSTALL COMPONENT。有关详细信息,请参阅 第 5.4.2.1 节,“错误日志配置”

  • log_error_suppression_list

    命令行格式 --log-error-suppression-list=value
    介绍 8.0.13
    系统变量 log_error_suppression_list
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 empty string

    log_error_suppression_list 系统变量适用于用于错误日志的事件,并指定当事件以 或 的优先级发生时要抑制 的 WARNING事件 INFORMATION。例如,如果某种特定类型的警告在错误日志中被认为是不受欢迎的噪音 ,因为它经常出现但并不令人感兴趣,则可以将其抑制。此变量影响 log_filter_internal错误日志过滤器组件执行的过滤,该组件默认启用(请参阅 第 5.5.3 节,“错误日志组件”)。如果 log_filter_internal禁用, log_error_suppression_list 则无效。

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

    ER_SERVER_SHUTDOWN_COMPLETE
    MY-000031
    000031
    MY-31
    31

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

    的效果 与 的效果log_error_suppression_list 相结合 log_error_verbosity。有关其他信息,请参阅 第 5.4.2.5 节,“基于优先级的错误日志过滤 (log_filter_internal)”

  • log_error_verbosity

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

    log_error_verbosity 系统变量指定处理用于错误日志的事件的详细程度 。此变量影响log_filter_internal错误日志过滤器组件执行的过滤,该组件默认启用(请参阅 第 5.5.3 节,“错误日志组件”)。如果 log_filter_internal禁用, log_error_verbosity则无效。

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

    log_error_verbosity 值 允许的消息优先级
    1个 ERROR
    2个 ERROR,WARNING
    3个 ERROR, WARNING, INFORMATION

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

    的效果 与 的效果log_error_verbosity相结合 log_error_suppression_list。有关其他信息,请参阅 第 5.4.2.5 节,“基于优先级的错误日志过滤 (log_filter_internal)”

  • log_output

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

    TABLE

    FILE

    NONE

    一般查询日志和慢速查询日志输出的目的地。TABLE该值是从, FILE, 和中选择的一个或多个以逗号分隔的单词的列表NONETABLE选择记录到 系统架构 中的general_logslow_log表 。选择日志记录到日志文件。 禁用日志记录。如果 存在于值中,则它优先于存在的任何其他词。 并且可以同时给出以选择两个日志输出目的地。 mysqlFILENONENONETABLEFILE

    该变量选择日志输出目的地,但不启用日志输出。为此,请启用 general_logslow_query_log系统变量。对于FILE日志记录, general_log_fileslow_query_log_file系统变量确定日志文件位置。有关详细信息,请参阅第 5.4.1 节,“选择一般查询日志和慢速查询日志输出目的地”

  • log_queries_not_using_indexes

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

    如果在启用慢速查询日志的情况下启用此变量,则会记录预期检索所有行的查询。请参阅 第 5.4.5 节,“慢速查询日志”。该选项并不一定意味着不使用索引。例如,使用全索引扫描的查询使用索引但会被记录下来,因为索引不会限制行数。

  • log_raw

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

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

  • log_slow_admin_statements

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

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

  • log_slow_extra

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

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

  • log_syslog

    命令行格式 --log-syslog[={OFF|ON}]
    弃用 是(在 8.0.13 中删除)
    系统变量 log_syslog
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON(当启用错误记录到系统日志时)

    在 MySQL 8.0 之前,此变量控制是否将错误记录到系统日志(Windows、syslogUnix 和类 Unix 系统上的事件日志)。

    在 MySQL 8.0 中, log_sink_syseventlog日志组件将错误记录到系统日志中(请参阅 第 5.4.2.8 节,“将错误记录到系统日志”),因此可以通过将该组件添加到 log_error_services系统变量来启用这种类型的日志记录。log_syslog已移除。(在 MySQL 8.0.13 之前, log_syslog存在但已弃用且无效。)

  • log_syslog_facility

    命令行格式 --log-syslog-facility=value
    删除 8.0.13
    系统变量 log_syslog_facility
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 daemon

    此变量在 MySQL 8.0.13 中被删除并替换为 syseventlog.facility.

  • log_syslog_include_pid

    命令行格式 --log-syslog-include-pid[={OFF|ON}]
    删除 8.0.13
    系统变量 log_syslog_include_pid
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    此变量在 MySQL 8.0.13 中被删除并替换为 syseventlog.include_pid.

  • log_syslog_tag

    命令行格式 --log-syslog-tag=tag
    删除 8.0.13
    系统变量 log_syslog_tag
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 empty string

    此变量在 MySQL 8.0.13 中被删除并替换为 syseventlog.tag.

  • log_timestamps

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

    UTC

    SYSTEM

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

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

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

  • log_throttle_queries_not_using_indexes

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

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

  • long_query_time

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

    如果查询花费的时间超过此秒数,则服务器会递增Slow_queries 状态变量。如果启用了慢查询日志,查询将被记录到慢查询日志文件中。该值是实时测量的,而不是 CPU 时间,因此在轻负载系统上低于阈值的查询可能在重负载系统上高于阈值。的最小值和默认值 long_query_time 分别为 0 和 10。最大值为 31536000,即 365 天,以秒为单位。该值可以指定为微秒级的分辨率。请参阅 第 5.4.5 节,“慢速查询日志”

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

    mysqldump执行全表扫描,这意味着它的查询通常可以超过 long_query_time对常规查询有用的设置。从 MySQL 8.0.30 开始,如果你想从慢查询日志 中排除大部分或全部mysqldump的查询,你可以设置mysqldump--mysqld-long-query-time 命令行选项,将系统变量的会话值更改为更高的值。

  • low_priority_updates

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

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

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • lower_case_file_system

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

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

  • lower_case_table_names

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

    如果设置为 0,则表名按指定存储并且比较区分大小写。如果设置为 1,则表名以小写形式存储在磁盘上并且比较不区分大小写。如果设置为 2,表名按给定的形式存储,但以小写形式进行比较。此选项也适用于数据库名称和表别名。有关其他详细信息,请参阅 第 9.2.3 节,“标识符区分大小写”

    这个变量的默认值是平台相关的(参见 参考资料 lower_case_file_system)。在 Linux 和其他类 Unix 系统上,默认为 0. 在 Windows 上,默认值为 1. 在 macOS 上,默认值为 2. 在 Linux(和其他类 Unix 系统)上,2不支持将值设置为;服务器强制该值0改为。

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

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

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

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

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

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

    MySQL 8.0.17 中添加了 启用 lower_case_table_names using的功能。debconf-set-selections启用 lower_case_table_names会将值设置为 1。

  • mandatory_roles

    命令行格式 --mandatory-roles=value
    系统变量 mandatory_roles
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 empty string

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

    变量值是以逗号分隔的角色名称列表。例子:

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

    除了 设置全局系统变量运行时值通常需要 的 特权(或已弃用的 特权)之外, 设置 的运行时值 还mandatory_roles需要 特权。ROLE_ADMINSYSTEM_VARIABLES_ADMINSUPER

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

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

    在值中命名的角色 mandatory_roles不能用 or 撤销或 REVOKE删除。 DROP ROLEDROP USER

    为了防止会话默认成为系统会话,具有 SYSTEM_USER特权的角色不能列在 mandatory_roles系统变量的值中:

    强制角色,如明确授予的角色,在激活之前不会生效(请参阅 激活角色)。activate_all_roles_on_login 在登录时,如果启用了系统变量,则所有授予的角色都会发生角色激活 ;否则,或者对于设置为默认角色的角色。在运行时, SET ROLE激活角色。

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

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

  • max_allowed_packet

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

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

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

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

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

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

  • max_connect_errors

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

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

  • max_connections

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

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

    有关详细信息,请参阅 第 5.1.12.1 节,“连接接口”

  • max_delayed_threads

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

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

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • max_digest_length

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

    每个会话为计算规范化语句摘要保留的最大内存字节数。一旦在摘要计算期间使用了该数量的空间,就会发生截断:不再收集来自已解析语句的标记或将其计入其摘要值。仅在许多字节的已解析令牌产生相同的规范化语句摘要之后才不同的语句,如果进行比较或汇总以获取摘要统计信息,则这些语句被认为是相同的。

    警告

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

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

    解析器使用此系统变量作为对其计算的规范化语句摘要的最大长度的限制。如果性能模式跟踪语句摘要,则使用 performance_schema_max_digest_length. 系统变量作为对其存储的最大摘要长度的限制。因此,如果 performance_schema_max_digest_length 小于 max_digest_length,存储在性能模式中的摘要值将相对于原始摘要值被截断。

    有关语句摘要的更多信息,请参阅 第 27.10 节,“性能模式语句摘要和采样”

  • max_error_count

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

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

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • max_execution_time

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

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

    max_execution_time适用如下:

  • max_heap_table_size

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

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

    块大小为 1024。在存储系统变量的值之前,MySQL 服务器会将不是块大小精确倍数的值向下舍入为块大小的下一个较低倍数。解析器允许值最大为平台的最大无符号整数值(对于 32 位系统为 4294967295 或 2 32 -1,对于 64 位系统为 18446744073709551615 或 2 64 -1),但实际最大值比块大小小.

    设置此变量对任何现有 MEMORY表都没有影响,除非使用诸如 CREATE TABLEor altered with ALTER TABLEor 之类的语句重新创建表TRUNCATE TABLE。服务器重新启动还会将现有 MEMORY表的最大大小设置为全局 max_heap_table_size值。

    此变量还与 结合使用 tmp_table_size以限制内部内存表的大小。请参阅 第 8.4.4 节,“MySQL 中的内部临时表使用”

    max_heap_table_size不被复制。有关详细信息,请参阅 第 17.5.1.21 节,“复制和内存表”第 17.5.1.39 节,“复制和变量”

  • max_insert_delayed_threads

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

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

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • max_join_size

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

    从 MySQL 8.0.31 开始,这表示对由连接进行的基表中的最大行访问数的限制。如果服务器的估计表明需要从基表中读取的行数多于max_join_size必须从基表中读取的行数,则该语句将被拒绝并报错。

    MySQL 8.0.30 及更早版本:不允许可能需要检查多 max_join_size行(对于单表语句)或行组合(对于多表语句)或可能比 max_join_size磁盘查找更多的语句。通过设置此值,您可以捕获键未正确使用且可能需要很长时间的语句。如果您的用户倾向于执行缺少 WHERE子句、需要很长时间或返回数百万行的联接,请设置它。有关详细信息,请参阅 使用安全更新模式 (--safe-updates)

    DEFAULT无论 MySQL 发布版本如何,将此变量设置为除重置 值以外的值sql_big_selectsto 0。如果您 sql_big_selects再次设置该值,该 max_join_size变量将被忽略。

  • max_length_for_sort_data

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

    由于优化器更改使其过时且无效,因此从 MySQL 8.0.20 开始不推荐使用此变量。以前,它充当决定filesort使用哪种算法的索引值大小的截止点。请参阅第 8.2.1.16 节,“ORDER BY 优化”

  • max_points_in_geometry

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

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

  • max_prepared_stmt_count

    命令行格式 --max-prepared-stmt-count=#
    系统变量 max_prepared_stmt_count
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 16382
    最小值 0
    最大值 (≥ 8.0.18) 4194304
    最大值(≤ 8.0.17) 1048576

    此变量限制服务器中准备好的语句的总数。它可用于可能因准备大量语句使服务器内存不足而导致拒绝服务攻击的环境。如果该值设置为低于当前准备语句的数量,则现有语句不受影响并可以使用,但在当前数量低于限制之前不能准备新语句。将该值设置为 0 会禁用准备好的语句。

  • max_seeks_for_key

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

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

  • max_sort_length

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

    对使用排序规则的字符串值进行PAD SPACE排序时使用的字节数。服务器只使用 max_sort_length任何此类值的前几个字节,而忽略其余部分。因此,对于 、 和 操作,仅在第一个字节之后不同的值 比较为相等max_sort_length。(此行为不同于以前版本的 MySQL,此设置应用于比较中使用的所有值。) GROUP BYORDER BYDISTINCT

    增加 的值 max_sort_length可能也需要增加 的值 sort_buffer_size。有关详细信息,请参阅第 8.2.1.16 节,“ORDER BY 优化”

  • max_sp_recursion_depth

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

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

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

  • max_user_connections

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

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

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

    CREATE USER使用or ALTER USER语句 指定帐户资源限制 。请参阅 第 6.2.21 节,“设置帐户资源限制”

  • max_write_lock_count

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

    在这么多写锁之后,允许在其间处理一些挂起的读锁请求。写锁请求的优先级高于读锁请求。但是,如果 max_write_lock_count设置为某个较低的值(比如 10),如果读取锁定请求已被传递以支持 10 个写入锁定请求,则读取锁定请求可能优先于挂起的写入锁定请求。通常不会发生此行为,因为 max_write_lock_count默认情况下具有非常大的值。

  • mecab_rc_file

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

    mecab_rc_file选项在设置 MeCab 全文解析器时使用。

    mecab_rc_file选项定义了配置文件的路径mecabrc,这是 MeCab 的配置文件。该选项是只读的,只能在启动时设置。mecabrc配置文件是初始化 MeCab 所必需的 。

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

    有关可在 MeCabmecabrc配置文件中指定的选项的信息,请参阅 Google Developers站点 上 的MeCab 文档。

  • metadata_locks_cache_size

    命令行格式 --metadata-locks-cache-size=#
    弃用 是(在 8.0.13 中删除)
    系统变量 metadata_locks_cache_size
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 1024
    最小值 1
    最大值 1048576
    单元 字节

    该系统变量在 MySQL 8.0.13 中被移除。

  • metadata_locks_hash_instances

    命令行格式 --metadata-locks-hash-instances=#
    弃用 是(在 8.0.13 中删除)
    系统变量 metadata_locks_hash_instances
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 8
    最小值 1
    最大值 1024

    该系统变量在 MySQL 8.0.13 中被移除。

  • min_examined_row_limit

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

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

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • myisam_data_pointer_size

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

    默认指针大小(以字节为单位), 在未指定选项时CREATE TABLEMyISAM表 使用。MAX_ROWS此变量不能小于 2 或大于 7。默认值为 6。请参阅第 B.3.2.10 节,“表已满”

  • myisam_max_sort_file_size

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

    MySQL 在重新创建MyISAM索引时(在REPAIR TABLEALTER TABLE或 期间LOAD DATA)被允许使用的临时文件的最大大小。如果文件大小大于此值,则使用键缓存创建索引,速度较慢。该值以字节为单位给出。

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

  • myisam_mmap_size

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

    用于内存映射压缩MyISAM文件的最大内存量。如果使用许多压缩MyISAM表,可以减小该值以减少内存交换问题的可能性。

  • myisam_recover_options

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

    OFF

    DEFAULT

    BACKUP

    FORCE

    QUICK

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

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

    选项 描述
    OFF 没有恢复。
    DEFAULT 无需备份、强制或快速检查即可恢复。
    BACKUP 如果数据文件在恢复过程中被更改,请将该 tbl_name.MYD 文件的备份另存为 tbl_name-datetime.BAK.
    FORCE .MYD即使我们会从文件中丢失不止一行,也要运行恢复 。
    QUICK 如果没有任何删除块,请不要检查表中的行。

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

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

  • myisam_repair_threads

    命令行格式 --myisam-repair-threads=#
    弃用 8.0.29(在 8.0.30 中删除)
    系统变量 myisam_repair_threads
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值(64 位平台) 18446744073709551615
    最大值(32 位平台) 4294967295
    笔记

    此系统变量在 MySQL 8.0.29 中已弃用,并在 MySQL 8.0.30 中删除。

    从 MySQL 8.0.29 开始,1 以外的值会产生警告。

    如果此值大于 1,MyISAM 则在此过程中并行创建表索引(每个索引在其自己的线程中)Repair by sorting 。默认值为 1。

    笔记

    多线程修复是测试版质量 代码。

  • myisam_sort_buffer_size

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

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

  • myisam_stats_method

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

    nulls_unequal

    nulls_equal

    nulls_ignored

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

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

  • myisam_use_mmap

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

    使用内存映射来读写 MyISAM表。

  • mysql_native_password_proxy_users

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

    该变量控制 mysql_native_password内置认证插件是否支持代理用户。check_proxy_users 除非启用系统变量,否则它不起作用。有关用户代理的信息,请参阅第 6.2.19 节,“代理用户”

  • named_pipe

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

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

  • named_pipe_full_access_group

    命令行格式 --named-pipe-full-access-group=value
    介绍 8.0.14
    系统变量 named_pipe_full_access_group
    范围 全球的
    动态的
    SET_VAR提示适用
    特定于平台 视窗
    类型 细绳
    默认值 empty string
    有效值

    empty string

    valid Windows local group name

    *everyone*

    named_pipe(仅限 Windows。)当启用系统变量以支持命名管道连接 时,授予客户端对 MySQL 服务器创建的命名管道的访问控制设置为成功通信所需的最小值 。一些MySQL客户端软件无需任何额外配置即可打开命名管道连接;但是,其他客户端软件可能仍需要完全访问权限才能打开命名管道连接。

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

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

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

  • net_buffer_length

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

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

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

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

  • net_read_timeout

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

    在中止读取之前等待来自连接的更多数据的秒数。当服务器正在从客户端读取时,net_read_timeout是控制何时中止的超时值。当服务器正在写入客户端时, net_write_timeout是控制何时中止的超时值。另见 replica_net_timeoutslave_net_timeout

  • net_retry_count

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

    如果通信端口上的读取或写入中断,请在放弃之前重试多次。在 FreeBSD 上这个值应该设置得相当高,因为内部中断被发送到所有线程。

  • net_write_timeout

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

    在中止写入之前等待块写入连接的秒数。另见 net_read_timeout

  • new

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

    此变量在 MySQL 4.0 中用于打开某些 4.1 行为,并保留以实现向后兼容性。它的价值总是OFF

    在 NDB Cluster 中,将此变量设置为ON 可以使用表以外的分区类型 KEYLINEAR KEYNDB表一起使用。此功能仅是实验性的,在生产中不受支持。有关其他信息,请参阅 用户定义的分区和 NDB 存储引擎(NDB Cluster)

  • ngram_token_size

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

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

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

  • offline_mode

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

    在离线模式下,MySQL实例断开客户端用户,除非他们有相关权限,并且不允许他们发起新的连接。被拒绝访问的客户端会收到 ER_SERVER_OFFLINE_MODE错误消息。

    要将服务器置于离线模式,请将 offline_mode系统变量的值从更改OFFON。要恢复正常操作, 请offline_mode 从更改ONOFF。要控制离线模式,管理员帐户必须具有 SYSTEM_VARIABLES_ADMIN 特权和 CONNECTION_ADMIN特权(或已弃用的SUPER特权,涵盖这两种特权)。 CONNECTION_ADMIN从 MySQL 8.0.31 开始需要,并在所有版本中推荐使用,以防止意外锁定。

    离线模式具有以下特点:

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

    • CONNECTION_ADMIN具有或 SUPER权限的 已连接客户端用户 不会断开连接,并且可以发起新的连接来管理服务器。

    • 从 MySQL 8.0.30 开始,如果将服务器置于离线模式的用户没有 SYSTEM_USER权限,则具有权限的已连接客户端用户 SYSTEM_USER也不会断开连接。但是,这些用户无法在服务器处于脱机模式时发起与服务器的新连接,除非他们也具有 CONNECTION_ADMINSUPER 权限。只有他们现有的连接无法终止,因为 SYSTEM_USER需要特权才能终止以特权执行的会话或语句SYSTEM_USER

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

  • old

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

    old是兼容性变量。默认情况下它是禁用的,但可以在启动时启用以将服务器恢复到旧版本中存在的行为。

    启用后old,它将索引提示的默认范围更改为 MySQL 5.1.17 之前使用的范围。也就是说,没有 FOR子句的索引提示仅适用于索引如何用于行检索,而不适用于ORDER BYorGROUP BY子句的解析。(参见 第 8.9.4 节,“索引提示”。)注意在复制设置中启用它。对于基于语句的二进制日志记录,源和副本的不同模式可能会导致复制错误。

  • old_alter_table

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

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

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

  • open_files_limit

    命令行格式 --open-files-limit=#
    系统变量 open_files_limit
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 5000, with possible adjustment
    最小值 0
    最大值 platform dependent

    操作系统 对mysqld 可用的文件描述符的数量 :

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

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

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

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

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

    • max_connections * 5

    • MySQL 8.0.19 及更高版本:操作系统限制。

    • 在 MySQL 8.0.19 之前:

      • 如果该限制为正但不是 Infinity,则为操作系统限制。

      • 如果操作系统限制为 Infinity: open_files_limit如果在启动时指定值,则为 5000,否则为 5000。

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

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

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

  • optimizer_prune_level

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

    控制在查询优化期间应用的启发式方法,以从优化器搜索空间中修剪不太有前途的部分计划。值为 0 将禁用试探法,以便优化器执行详尽搜索。值为 1 会导致优化器根据中间计划检索的行数修剪计划。

  • optimizer_search_depth

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

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

  • optimizer_switch

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

    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}

    有效值 (≥ 8.0.21)

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    prefer_ordering_index={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    subquery_to_derived={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值 (≥ 8.0.18)

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值 (≥ 8.0.13)

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值(≤ 8.0.12)

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    系统optimizer_switch变量可以控制优化器的行为。该变量的值是一组标志,每个标志的值为 onoroff以指示相应的优化器行为是启用还是禁用。该变量具有全局值和会话值,可以在运行时更改。可以在服务器启动时设置全局默认值。

    要查看当前的优化器标志集,请选择变量值:

    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

    有关此变量的语法及其控制的优化器行为的更多信息,请参阅 第 8.9.2 节,“可切换优化”

  • optimizer_trace

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

    此变量控制优化器跟踪。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器

  • optimizer_trace_features

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

    此变量启用或禁用选定的优化器跟踪功能。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器

  • optimizer_trace_limit

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

    要显示的优化器跟踪的最大数量。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器

  • optimizer_trace_max_mem_size

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

    存储的优化器跟踪的最大累积大小。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器

  • optimizer_trace_offset

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

    要显示的优化器跟踪的偏移量。有关详细信息,请参阅 MySQL 内部结构:跟踪优化器

  • performance_schema_xxx

    性能模式系统变量在第 27.15 节,“性能模式系统变量” 中列出 。这些变量可用于配置性能模式操作。

  • parser_max_mem_size

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

    解析器可用的最大内存量。默认值对可用内存没有限制。可以减少该值以防止因解析长或复杂的 SQL 语句而导致内存不足的情况。

  • partial_revokes

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

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

    ON(如果存在部分撤销)

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

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

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

    笔记

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

    有关更多信息,包括删除部分撤销的说明,请参阅第 6.2.12 节,“使用部分撤销的权限限制”

  • password_history

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

    此变量定义了全局策略,用于根据所需的最少密码更改次数来控制以前密码的重用。对于以前使用过的帐户密码,此变量指示在可以重新使用密码之前必须发生的后续帐户密码更改次数。如果值为 0(默认值),则没有基于密码更改次数的重用限制。

    对此变量的更改会立即应用于使用该PASSWORD HISTORY DEFAULT 选项定义的所有帐户。

    可以使用and 语句的PASSWORD HISTORY选项根据 个人帐户的需要覆盖全局更改次数密码重用策略 。请参阅 第 6.2.15 节,“密码管理”CREATE USERALTER USER

  • password_require_current

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

    此变量定义全局策略,用于控制尝试更改帐户密码是否必须指定要替换的当前密码。

    对此变量的更改会立即应用于使用该PASSWORD REQUIRE CURRENT DEFAULT选项定义的所有帐户。

    可以使用and 语句的PASSWORD REQUIRE选项根据 个人帐户的需要覆盖全局需要验证的策略。请参阅第 6.2.15 节,“密码管理”CREATE USERALTER USER

  • password_reuse_interval

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

    此变量定义了全局策略,用于根据经过的时间控制以前密码的重用。对于以前使用的帐户密码,此变量表示在密码可以重复使用之前必须经过的天数。如果该值为 0(默认值),则没有基于经过时间的重用限制。

    对此变量的更改会立即应用于使用该PASSWORD REUSE INTERVAL DEFAULT选项定义的所有帐户。

    可以使用and 语句的PASSWORD REUSE INTERVAL选项根据 个人帐户的需要覆盖全局超时密码重用策略 。请参阅 第 6.2.15 节,“密码管理”CREATE USERALTER USER

  • persisted_globals_load

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

    是否从 mysqld-auto.cnf数据目录中的文件加载持久配置设置。服务器通常在启动时在所有其他选项文件之后处理此文件(请参阅 第 4.2.2.2 节,“使用选项文件”)。禁用 persisted_globals_load会导致服务器启动顺序跳过 mysqld-auto.cnf

    要修改 的内容 mysqld-auto.cnf,请使用 SET PERSISTSET PERSIST_ONLYRESET PERSIST语句。请参阅 第 5.1.9.3 节,“持久化系统变量”

  • persist_only_admin_x509_subject

    命令行格式 --persist-only-admin-x509-subject=string
    介绍 8.0.14
    系统变量 persist_only_admin_x509_subject
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 empty string

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

    系统变量指定 SSL 证书 X.509 Subject 值,用户必须拥有该 persist_only_admin_x509_subject 值才能保留持久受限的系统变量。默认值为空字符串,它会禁用主题检查,以便任何用户都无法持久保存受持久限制的系统变量。

    如果 persist_only_admin_x509_subject 为非空,则使用加密连接连接到服务器并提供具有指定 Subject 值的 SSL 证书的用户可以使用 SET PERSIST_ONLY来保留持久受限的系统变量。有关持久性受限系统变量的信息和配置 MySQL 以启用的说明 persist_only_admin_x509_subject,请参阅第 5.1.9.4 节,“非持久性和持久性受限系统变量”

  • persist_sensitive_variables_in_plaintext

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

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

    默认设置 ,ON如果密钥环组件支持可用,则对值进行加密,如果不支持,则以未加密的方式(带有警告)持久保存它们。下一次设置任何持久化系统变量时,如果当时密钥环支持可用,服务器将加密任何未加密的敏感系统变量的值。ON如果无法解密加密的系统变量值,该 设置还允许服务器启动,在这种情况下会发出警告并使用系统变量的默认值。在那种情况下,它们的值在被解密之前无法更改。

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

    有关详细信息,请参阅 保留敏感系统变量

  • pid_file

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

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

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

  • plugin_dir

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

    插件目录的路径名。

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

  • port

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

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

  • preload_buffer_size

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

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

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • print_identified_with_as_hex

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

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

  • profiling

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

    此变量已弃用;希望在未来的 MySQL 版本中将其删除。

  • profiling_history_size

    profiling启用 时维护分析信息的语句数。默认值为 15。最大值为 100。将值设置为 0 会有效地禁用分析。请参阅 第 13.7.7.31 节,“SHOW PROFILES 语句”

    此变量已弃用;希望在未来的 MySQL 版本中将其删除。

  • protocol_compression_algorithms

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

    zlib

    zstd

    uncompressed

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

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

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

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

    • zstd: 允许使用 zstd压缩算法 (zstd 1.3) 的连接。

    • uncompressed:允许未压缩的连接。如果此算法名称未包含在该 protocol_compression_algorithms 值中,则服务器不允许未压缩的连接。它只允许使用值中指定的任何其他算法的压缩连接,并且不会回退到未压缩的连接。

    默认值zlib,zstd,uncompressed 表示服务器允许所有压缩算法。

    有关更多信息,请参阅 第 4.2.8 节,“连接压缩控制”

  • protocol_version

    系统变量 protocol_version
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 10
    最小值 0
    最大值 4294967295

    MySQL 服务器使用的客户端/服务器协议的版本。

  • proxy_user

    系统变量 proxy_user
    范围 会议
    动态的
    SET_VAR提示适用
    类型 细绳

    如果当前客户端是另一个用户的代理,则此变量是代理用户帐户名。否则,此变量为NULL. 请参阅 第 6.2.19 节,“代理用户”

  • pseudo_replica_mode

    介绍 8.0.26
    系统变量 pseudo_replica_mode
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 布尔值

    从 MySQL 8.0.26 开始, pseudo_replica_mode用于代替 pseudo_slave_mode,该版本已弃用。操作和效果是一样的,只是术语发生了变化。

    pseudo_replica_mode供内部服务器使用。它有助于正确处理源自比当前处理它们的服务器更旧或更新的服务器的事务。 mysqlbinlogpseudo_replica_mode在执行任何 SQL 语句之前 将 的值设置 为 true。

    设置会话值 pseudo_replica_mode是一个受限操作。会话用户必须具有 REPLICATION_APPLIER权限(请参阅第 17.3.3 节,“复制权限检查”),或足以设置受限会话变量的权限(请参阅 第 5.1.9.1 节,“系统变量权限”)。但是请注意,该变量不是供用户设置的;它由复制基础设施自动设置。

    pseudo_replica_mode对准备好的 XA 事务的处理有以下影响,这些事务可以附加到处理会话(默认情况下,发出的会话 XA START)或从中分离:

    • 如果为 true,并且处理会话已执行内部使用BINLOG 语句,则 XA 事务会在事务的第一部分完成后立即自动从会话中分离XA PREPARE,因此它们可以由具有该事务的任何会话提交或回滚 XA_RECOVER_ADMIN特权。

    • 如果为 false,只要该会话处于活动状态,XA 事务就会保持附加到处理会话,在此期间没有其他会话可以提交该事务。只有在会话断开连接或服务器重新启动时,准备好的事务才会分离。

    pseudo_replica_modeoriginal_commit_timestamp复制延迟时间戳和 original_server_version 系统变量有以下影响:

    • 如果为真,则事务未明确设置 original_commit_timestamporiginal_server_version 假定起源于另一台未知服务器,因此值 0(表示未知)被分配给时间戳和系统变量。

    • 如果为 false,未明确设置 original_commit_timestamporiginal_server_version 假定源自当前服务器的事务,则当前时间戳和当前服务器的版本被分配给时间戳和系统变量。

    在 MySQL 8.0.14 及更高版本中, pseudo_replica_mode对设置一个或多个不支持(删除或未知)SQL 模式的语句的处理有以下影响:

    • 如果为真,服务器将忽略不受支持的模式并发出警告。

    • 如果为 false,则服务器拒绝带有 的语句 ER_UNSUPPORTED_SQL_MODE

  • pseudo_slave_mode

    弃用 8.0.26
    系统变量 pseudo_slave_mode
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 布尔值

    从 MySQL 8.0.26 开始, pseudo_slave_mode不推荐使用,而是使用别名 pseudo_replica_modepseudo_slave_mode供内部服务器使用。它有助于正确处理源自比当前处理它们的服务器更旧或更新的服务器的事务。 mysqlbinlogpseudo_slave_mode在执行任何 SQL 语句之前 将 的值设置 为 true。

    设置这个系统变量的会话值是一个受限的操作。会话用户必须具有 REPLICATION_APPLIER权限(请参阅第 17.3.3 节,“复制权限检查”),或足以设置受限会话变量的权限(请参阅 第 5.1.9.1 节,“系统变量权限”)。但是请注意,该变量不是供用户设置的;它由复制基础设施自动设置。

    的作用见 pseudo_replica_mode系统变量的 说明pseudo_slave_mode

  • pseudo_thread_id

    系统变量 pseudo_thread_id
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 2147483647
    最小值 0
    最大值 2147483647

    此变量供内部服务器使用。

    警告

    pseudo_thread_id更改系统变量 的会话值会 更改CONNECTION_ID()函数返回的值。

    从 MySQL 8.0.14 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • query_alloc_block_size

    命令行格式 --query-alloc-block-size=#
    系统变量 query_alloc_block_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8192
    最小值 1024
    最大值 4294966272
    单元 字节
    块大小 1024

    为语句解析和执行期间创建的对象分配的内存块的分配大小(以字节为单位)。如果您遇到内存碎片问题,增加此参数可能会有所帮助。

    字节数的块大小为 1024。在存储系统变量的值之前,MySQL 服务器会将不是块大小精确倍数的值向下舍入为块大小的下一个较低倍数。解析器允许值最大为平台的最大无符号整数值(对于 32 位系统为 4294967295 或 2 32 -1,对于 64 位系统为 18446744073709551615 或 2 64 -1),但实际最大值比块大小小.

  • query_prealloc_size

    命令行格式 --query-prealloc-size=#
    弃用 8.0.29
    系统变量 query_prealloc_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8192
    最小值 8192
    最大值(64 位平台) 18446744073709550592
    最大值(32 位平台) 4294966272
    单元 字节
    块大小 1024

    MySQL 8.0.28 及更早版本:这设置用于语句解析和执行的持久缓冲区的大小(以字节为单位)。该缓冲区不会在语句之间释放。如果您正在运行复杂的查询,较大的 query_prealloc_size值可能有助于提高性能,因为它可以减少服务器在查询执行操作期间执行内存分配的需要。您应该知道这样做并不一定完全消除分配;在某些情况下,服务器可能仍会分配内存,例如与事务相关的操作或存储的程序。

    从 MySQL 8.0.29 开始,query_prealloc_size已弃用,设置它不再有任何效果;你应该期待它在未来的 MySQL 版本中被删除。

    块大小为 1024。在存储系统变量的值之前,MySQL 服务器会将不是块大小精确倍数的值向下舍入为块大小的下一个较低倍数。解析器允许值最大为平台的最大无符号整数值(对于 32 位系统为 4294967295 或 2 32 -1,对于 64 位系统为 18446744073709551615 或 2 64 -1),但实际最大值比块大小小.

  • rand_seed1

    系统变量 rand_seed1
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 N/A
    最小值 0
    最大值 4294967295

    和变量仅作为会话变量存在rand_seed1rand_seed2只能设置但不能读取。变量(但不是它们的值)显示在 的输出中SHOW VARIABLES

    这些变量的目的是支持RAND()函数的复制。对于调用RAND()的语句,源将两个值传递给副本,它们用于为随机数生成器提供种子。副本使用这些值来设置会话变量 rand_seed1rand_seed2以便 RAND()在副本上生成与源上相同的值。

  • rand_seed2

    请参阅说明 rand_seed1

  • range_alloc_block_size

    命令行格式 --range-alloc-block-size=#
    系统变量 range_alloc_block_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 4096
    最小值 4096
    最大值(64 位平台) 18446744073709550592
    最大值 4294966272
    单元 字节
    块大小 1024

    进行范围优化时分配的块大小(以字节为单位)。

    字节数的块大小为 1024。在存储系统变量的值之前,MySQL 服务器会将不是块大小精确倍数的值向下舍入为块大小的下一个较低倍数。解析器允许值最大为平台的最大无符号整数值(对于 32 位系统为 4294967295 或 2 32 -1,对于 64 位系统为 18446744073709551615 或 2 64 -1),但实际最大值比块大小小.

  • range_optimizer_max_mem_size

    命令行格式 --range-optimizer-max-mem-size=#
    系统变量 range_optimizer_max_mem_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8388608
    最小值 0
    最大值 18446744073709551615
    单元 字节

    范围优化器的内存消耗限制。值为 0 表示无限制。如果优化器考虑的执行计划使用范围访问方法,但优化器估计此方法所需的内存量将超过限制,则放弃该计划并考虑其他计划。有关详细信息,请参阅 限制内存使用以进行范围优化

  • rbr_exec_mode

    系统变量 rbr_exec_mode
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 STRICT
    有效值

    STRICT

    IDEMPOTENT

    供mysqlbinlog 内部使用。IDEMPOTENT此变量在模式和 模式之间切换服务器 STRICTIDEMPOTENT mode 会抑制mysqlbinlogBINLOG生成的语句中的 duplicate-key 和 no-key-found 错误。当在导致与现有数据冲突的服务器上重放基于行的二进制日志时,此模式很有用。 当您通过将以下内容写入输出来指定选项 时, mysqlbinlog会设置此模式:--idempotent

    SET SESSION RBR_EXEC_MODE=IDEMPOTENT;

    从MySQL 8.0.18开始,设置这个系统变量的session值不再是受限操作。

  • read_buffer_size

    命令行格式 --read-buffer-size=#
    系统变量 read_buffer_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 131072
    最小值 8192
    最大值 2147479552
    单元 字节
    块大小 4096

    对表进行顺序扫描的每个线程都会为其扫描的每个 MyISAM表分配此大小(以字节为单位)的缓冲区。如果进行多次顺序扫描,您可能希望增加此值,默认值为 131072。此变量的值应为 4KB 的倍数。如果设置的值不是 4KB 的倍数,则其值向下舍入为最接近的 4KB 倍数。

    此选项也用于所有存储引擎的以下上下文中:

    • 用于在临时文件(不是临时表)中缓存索引,当为ORDER BY.

    • 用于批量插入分区。

    • 用于缓存嵌套查询的结果。

    read_buffer_size也用于另一种特定于存储引擎的方式:确定MEMORY 表的内存块大小。

    从 MySQL 8.0.22 开始,使用 的值 select_into_buffer_size代替 read_buffer_size执行SELECT INTO DUMPFILESELECT INTO OUTFILE语句时使用的缓冲区的值。

    有关不同操作期间内存使用的更多信息,请参阅第 8.12.3.1 节,“MySQL 如何使用内存”

  • read_only

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

    如果read_only启用了系统变量,则服务器不允许客户端更新,除非具有 CONNECTION_ADMIN特权(或已弃用的SUPER 特权)的用户。默认情况下禁用此变量。

    服务器还支持 super_read_only系统变量(默认情况下禁用),它具有以下效果:

    read_only启用时和 启用时super_read_only,服务器仍然允许这些操作:

    复制源服务器上的更改read_only不会复制到副本服务器。该值可以独立于源上的设置在副本上设置。

    以下条件适用于启用尝试 read_only(包括启用导致的隐式尝试 super_read_only):

    • LOCK TABLES如果您有任何显式锁(通过 获取)或有挂起的事务 ,则尝试失败并发生错误。

    • 当其他客户端有任何正在进行的语句、活动LOCK TABLES WRITE或正在进行的提交时,尝试会阻塞,直到锁被释放并且语句和事务结束。当启用的尝试处于read_only挂起状态时,其他客户端对表锁或开始事务的请求也会阻塞,直到 read_only被设置。

    • 如果存在持有元数据锁的活动事务,则尝试阻塞,直到这些事务结束。

    • read_only可以在持有全局读锁(通过 获取 FLUSH TABLES WITH READ LOCK)时启用,因为这不涉及表锁。

  • read_rnd_buffer_size

    命令行格式 --read-rnd-buffer-size=#
    系统变量 read_rnd_buffer_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 262144
    最小值 1
    最大值 2147483647
    单元 字节

    此变量用于从MyISAM 表中读取,并且对于任何存储引擎,用于多范围读取优化。

    MyISAM在键排序操作后按排序顺序 从表中读取行时,将通过此缓冲区读取行以避免磁盘查找。请参阅 第 8.2.1.16 节,“ORDER BY 优化”。将变量设置为较大的值可以大大提高ORDER BY 性能。但是,这是为每个客户端分配的缓冲区,因此您不应将全局变量设置为过大的值。相反,仅从那些需要运行大型查询的客户端中更改会话变量。

    有关不同操作期间内存使用的更多信息,请参阅第 8.12.3.1 节,“MySQL 如何使用内存”。有关多范围读取优化的信息,请参阅 第 8.2.1.11 节,“多范围读取优化”

  • regexp_stack_limit

    命令行格式 --regexp-stack-limit=#
    系统变量 regexp_stack_limit
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8000000
    最小值 0
    最大值 2147483647
    单元 字节

    REGEXP_LIKE()用于由和类似函数 执行的正则表达式匹配操作的内部堆栈的最大可用内存(以字节为单位 )(请参阅第 12.8.2 节,“正则表达式”)。

  • regexp_time_limit

    命令行格式 --regexp-time-limit=#
    系统变量 regexp_time_limit
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 32
    最小值 0
    最大值 2147483647

    REGEXP_LIKE()和类似功能 执行的正则表达式匹配操作的时间限制(请参阅第 12.8.2 节,“正则表达式”)。此限制表示为匹配引擎执行的最大允许步骤数,因此仅间接影响执行时间。通常,它是毫秒级的。

  • require_row_format

    介绍 8.0.19
    系统变量 require_row_format
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    此变量供复制和 mysqlbinlog使用的内部服务器使用。它将会话中执行的 DML 事件限制为仅以基于行的二进制日志记录格式编码的事件,并且无法创建临时表。不遵守限制的查询会失败。

    将此系统变量的会话值设置为 ON不需要任何权限。将此系统变量的会话值设置为 OFF是受限制的操作,会话用户必须具有足够的权限才能设置受限制的会话变量。请参阅 第 5.1.9.1 节,“系统变量权限”

  • require_secure_transport

    命令行格式 --require-secure-transport[={OFF|ON}]
    系统变量 require_secure_transport
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    客户端与服务器的连接是否需要使用某种形式的安全传输。启用此变量后,服务器仅允许使用 TLS/SSL 加密的 TCP/IP 连接,或使用套接字文件(在 Unix 上)或共享内存(在 Windows 上)的连接。服务器拒绝不安全的连接尝试,这些尝试会因 ER_SECURE_TRANSPORT_REQUIRED 错误而失败。

    此功能补充了优先考虑的每个帐户的 SSL 要求。例如,如果一个帐户是用 定义的REQUIRE SSL,启用 require_secure_transport后就无法使用该帐户使用 Unix 套接字文件进行连接。

    服务器可能没有可用的安全传输。例如,如果在未指定任何 SSL 证书或密钥文件且 shared_memory禁用系统变量的情况下启动,则 Windows 上的服务器不支持安全传输。在这些情况下,尝试 require_secure_transport在启动时启用会导致服务器将消息写入错误日志并退出。尝试在运行时启用该变量失败并出现 ER_NO_SECURE_TRANSPORTS_CONFIGURED 错误。

    另请参阅将加密连接配置为强制性

  • resultset_metadata

    系统变量 resultset_metadata
    范围 会议
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 FULL
    有效值

    FULL

    NONE

    对于元数据传输是可选的连接,客户端设置 resultset_metadata系统变量来控制服务器是否返回结果集元数据。允许的值为FULL(返回所有元数据;这是默认值)和NONE (不返回任何元数据)。

    对于非元数据可选的连接,设置 resultset_metadataNONE会产生错误。

    有关管理结果集元数据传输的详细信息,请参阅 可选结果集元数据

  • secondary_engine_cost_threshold

    介绍 8.0.16
    系统变量 secondary_engine_cost_threshold
    范围 会议
    动态的 是的
    SET_VAR提示适用 是的
    类型 数字
    默认值 100000.000000
    最小值 0
    最大值 DBL_MAX (maximum double value)

    查询卸载到辅助引擎的优化器成本阈值。

    与 HeatWave 一起使用。请参阅MySQL HeatWave 用户指南

  • schema_definition_cache

    命令行格式 --schema-definition-cache=#
    系统变量 schema_definition_cache
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义可以保存在字典对象缓存中的模式定义对象(包括已使用和未使用)的数量限制。

    未使用的模式定义对象仅在使用中的数量小于定义的容量时才保留在字典对象缓存中 schema_definition_cache

    设置0意味着模式定义对象仅在使用时保留在字典对象缓存中。

    有关详细信息,请参阅 第 14.4 节,“字典对象缓存”

  • secure_file_priv

    命令行格式 --secure-file-priv=dir_name
    系统变量 secure_file_priv
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 platform specific
    有效值

    empty string

    dirname

    NULL

    该变量用于限制数据导入和导出操作的影响,例如 LOAD DATAand SELECT ... INTO OUTFILE语句和 LOAD_FILE()函数执行的操作。这些操作只允许有 FILE权限的用户进行。

    secure_file_priv可以设置如下:

    • 如果为空,则变量无效。这不是一个安全的设置。

    • 如果设置为目录名称,则服务器将导入和导出操作限制为仅使用该目录中的文件。该目录必须存在;服务器不会创建它。

    • 如果设置为NULL,服务器将禁用导入和导出操作。

    默认值是特定于平台的,取决于CMake选项的值,如下表所示。如果您从源代码构建, 要明确指定默认 值,请使用CMake选项。 INSTALL_LAYOUT secure_file_privINSTALL_SECURE_FILE_PRIVDIR

    INSTALL_LAYOUT价值 默认secure_file_priv
    STANDALONE 空的
    DEB, RPM,SVR4 /var/lib/mysql-files
    否则 mysql-filesCMAKE_INSTALL_PREFIX值以下

    服务器 secure_file_priv在启动时检查 的值,如果该值不安全,则将警告写入错误日志。非NULL值如果为空,或者值为数据目录或其子目录,或者所有用户都可以访问的目录,则被认为是不安全的。如果secure_file_priv设置为不存在的路径,则服务器将错误消息写入错误日志并退出。

  • select_into_buffer_size

    命令行格式 --select-into-buffer-size=#
    介绍 8.0.22
    系统变量 select_into_buffer_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 131072
    最小值 8192
    最大值 2147479552
    单元 字节
    块大小 4096

    当使用数据SELECT INTO OUTFILESELECT INTO DUMPFILE将数据转储到一个或多个文件中以进行备份创建、数据迁移或其他目的时,写入通常会被缓冲,然后触发对磁盘或其他存储设备的大量写入 I/O 活动并停止其他查询对延迟更敏感。您可以使用此变量来控制用于将数据写入存储设备的缓冲区的大小,以确定何时应发生缓冲区同步,从而防止发生刚刚描述的那种写入停顿。

    select_into_buffer_size覆盖为 设置的任何值read_buffer_size。(select_into_buffer_size并且 read_buffer_size具有相同的默认值、最大值和最小值。)您还可以使用 select_into_disk_sync_delay 设置超时,以便在每次同步发生后观察到。

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • select_into_disk_sync

    命令行格式 --select-into-disk-sync={ON|OFF}
    介绍 8.0.22
    系统变量 select_into_disk_sync
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 布尔值
    默认值 OFF
    有效值

    OFF

    ON

    设置为 on 时,ON通过 使用 . SELECT INTO OUTFILESELECT INTO DUMPFILEselect_into_buffer_size

  • select_into_disk_sync_delay

    命令行格式 --select-into-disk-sync-delay=#
    介绍 8.0.22
    系统变量 select_into_disk_sync_delay
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 0
    最小值 0
    最大值 31536000
    单元 毫秒

    SELECT INTO OUTFILE当 启用长时间运行的orSELECT INTO DUMPFILE 语句 写入输出文件的缓冲区同步时 select_into_disk_sync,此变量设置同步后的可选延迟(以毫秒为单位)。0(默认)意味着没有延迟。

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • session_track_gtids

    命令行格式 --session-track-gtids=value
    系统变量 session_track_gtids
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF

    OWN_GTID

    ALL_GTIDS

    控制服务器是否将 GTID 返回给客户端,使客户端能够使用它们来跟踪服务器状态。根据变量值,在执行每个事务结束时,服务器的 GTID 被捕获并作为确认的一部分返回给客户端。的可能值session_track_gtids如下:

    • OFF: 服务器不向客户端返回 GTID。这是默认值。

    • OWN_GTID:服务器返回自上次确认以来此客户端在其当前会话中成功提交的所有事务的 GTID。通常,这是最后提交的事务的单个 GTID,但如果单个客户端请求导致多个事务,则服务器返回包含所有相关 GTID 的 GTID 集。

    • ALL_GTIDS:服务器返回其 gtid_executed系统变量的全局值,它在事务成功提交后的某个时间点读取该值。除了刚刚提交的事务的 GTID 之外,此 GTID 集还包括任何客户端在服务器上提交的所有事务,并且可以包括在提交当前确认的事务之后提交的事务。

    session_track_gtids不能在事务上下文中设置。

    有关会话状态跟踪的更多信息,请参阅 第 5.1.18 节,“客户端会话状态的服务器跟踪”

  • session_track_schema

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

    控制服务器是否跟踪在当前会话中设置默认架构(数据库)并通知客户端使架构名称可用。

    如果启用了架构名称跟踪器,则每次设置默认架构时都会发出名称通知,即使新架构名称与旧架构名称相同也是如此。

    有关会话状态跟踪的更多信息,请参阅 第 5.1.18 节,“客户端会话状态的服务器跟踪”

  • session_track_state_change

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

    控制服务器是否跟踪当前会话状态的变化,并在状态变化发生时通知客户端。可以报​​告客户端会话状态的这些属性的变化:

    • 默认架构(数据库)。

    • 系统变量的会话特定值。

    • 用户定义的变量。

    • 临时表。

    • 准备好的陈述。

    如果启用了会话状态跟踪器,则每次涉及跟踪的会话属性的更改都会发出通知,即使新属性值与旧属性值相同也是如此。例如,将用户定义的变量设置为其当前值会导致通知。

    session_track_state_change 变量仅控制更改发生时间的通知,而不控制更改内容。例如,当设置默认模式或分配跟踪会话系统变量时会发生状态更改通知,但通知不包括模式名称或变量值。要接收架构名称或会话系统变量值的通知,请分别使用 session_track_schemasession_track_system_variables 系统变量。

    笔记

    给自己赋值 session_track_state_change 不被认为是状态变化,也不会这样报告。但是,如果它的名称列在 的值中,则对它的 session_track_system_variables任何赋值都会导致通知新值。

    有关会话状态跟踪的更多信息,请参阅 第 5.1.18 节,“客户端会话状态的服务器跟踪”

  • session_track_system_variables

    命令行格式 --session-track-system-variables=#
    系统变量 session_track_system_variables
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 time_zone, autocommit, character_set_client, character_set_results, character_set_connection

    控制服务器是否跟踪对会话系统变量的分配并通知客户端每个分配变量的名称和值。变量值是一个以逗号分隔的变量列表,用于跟踪分配。默认情况下,为 time_zoneautocommitcharacter_set_clientcharacter_set_results和 启用通知character_set_connection。(后三个变量是受 影响的变量 SET NAMES。)

    特殊值*使服务器跟踪对所有会话变量的分配。如果给定,这个值必须由它自己指定,没有特定的系统变量名。

    要禁用会话变量分配通知,请设置 session_track_system_variables 为空字符串。

    如果启用了会话系统变量跟踪,则对跟踪的会话变量的所有赋值都会发出通知,即使新值与旧值相同。

    有关会话状态跟踪的更多信息,请参阅 第 5.1.18 节,“客户端会话状态的服务器跟踪”

  • session_track_transaction_info

    命令行格式 --session-track-transaction-info=value
    系统变量 session_track_transaction_info
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF

    STATE

    CHARACTERISTICS

    控制服务器是否跟踪当前会话中事务的状态和特征,并通知客户端提供此信息。这些 session_track_transaction_info 值是允许的:

    • OFF:禁用事务状态跟踪。这是默认值。

    • STATE:启用交易状态跟踪而不跟踪特征。状态跟踪使客户端能够确定事务是否正在进行以及是否可以将其移动到不同的会话而不被回滚。

    • CHARACTERISTICS:启用事务状态跟踪,包括特征跟踪。特征跟踪使客户端能够确定如何在另一个会话中重新启动事务,以便它具有与原始会话中相同的特征。以下特征与此目的相关:

      ISOLATION LEVEL
      READ ONLY
      READ WRITE
      WITH CONSISTENT SNAPSHOT

    为了让客户端安全地将事务重新定位到另一个会话,它不仅必须跟踪事务状态,还必须跟踪事务特征。此外,客户端必须跟踪 transaction_isolationtransaction_read_only系统变量以正确确定会话默认值。(要跟踪这些变量,请将它们列在 session_track_system_variables 系统变量的值中。)

    有关会话状态跟踪的更多信息,请参阅 第 5.1.18 节,“客户端会话状态的服务器跟踪”

  • sha256_password_auto_generate_rsa_keys

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

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

    在启动时,如果所有这些条件都为真,服务器会自动在数据目录中生成 RSA 私钥/公钥对文件: sha256_password_auto_generate_rsa_keys or caching_sha2_password_auto_generate_rsa_keys 系统变量已启用;没有指定 RSA 选项;数据目录中缺少 RSA 文件。这些密钥对文件允许使用 RSA 在未加密的连接上为由 sha256_passwordcaching_sha2_password插件验证的帐户安全交换密码;请参阅 第 6.4.1.3 节,“SHA-256 可插入身份验证”第 6.4.1.2 节,“缓存 SHA-2 可插入身份验证”

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

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

  • sha256_password_private_key_path

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

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

    重要的

    因为这个文件存储了一个私钥,所以应该限制它的访问方式,只有MySQL服务器才能读取它。

    有关 的信息sha256_password,请参阅 第 6.4.1.3 节,“SHA-256 可插入身份验证”

  • sha256_password_proxy_users

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

    该变量控制 sha256_password内置认证插件是否支持代理用户。check_proxy_users除非启用系统变量,否则它不起作用 。有关用户代理的信息,请参阅 第 6.2.19 节,“代理用户”

  • sha256_password_public_key_path

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

    sha256_password 此变量的值是身份验证插件 的 RSA 公钥文件的路径名。如果文件被命名为相对路径,则它被解释为相对于服务器数据目录。该文件必须是 PEM 格式。因为这个文件存储了一个公钥,副本可以自由分发给客户端用户。(使用 RSA 密码加密连接到服务器时显式指定公钥的客户端必须使用与服务器使用的公钥相同的公钥。)

    有关 的信息sha256_password,包括有关客户端如何指定 RSA 公钥的信息,请参阅第 6.4.1.3 节,“SHA-256 可插入身份验证”

  • shared_memory

    命令行格式 --shared-memory[={OFF|ON}]
    系统变量 shared_memory
    范围 全球的
    动态的
    SET_VAR提示适用
    特定于平台 视窗
    类型 布尔值
    默认值 OFF

    (仅限 Windows。)服务器是否允许共享内存连接。

  • shared_memory_base_name

    命令行格式 --shared-memory-base-name=name
    系统变量 shared_memory_base_name
    范围 全球的
    动态的
    SET_VAR提示适用
    特定于平台 视窗
    类型 细绳
    默认值 MYSQL

    (仅限 Windows。)用于共享内存连接的共享内存的名称。这在一台物理机器上运行多个 MySQL 实例时很有用。默认名称是MYSQL. 名称区分大小写。

    仅当服务器启动时 shared_memory启用了支持共享内存连接的系统变量时,此变量才适用。

  • show_create_table_skip_secondary_engine

    命令行格式 --show-create-table-skip-secondary-engine[={OFF|ON}]
    介绍 8.0.18
    系统变量 show_create_table_skip_secondary_engine
    范围 会议
    动态的 是的
    SET_VAR提示适用 是的
    类型 布尔值
    默认值 OFF

    启用 show_create_table_skip_secondary_engine 会导致该SECONDARY ENGINE子句从SHOW CREATE TABLE 输出中排除,并从mysqldump实用程序 CREATE TABLE 转储的语句中排除。

    mysqldump提供了 --show-create-skip-secondary-engine 选项。指定后,它 show_create_table_skip_secondary_engine 会在转储操作期间启用系统变量。

    在不支持该变量的 MySQL 8.0.18 之前的版本上 尝试使用选项进行mysqldump操作 会导致错误。 --show-create-skip-secondary-engineshow_create_table_skip_secondary_engine

    与 HeatWave 一起使用。请参阅MySQL HeatWave 用户指南

  • show_create_table_verbosity

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

    SHOW CREATE TABLEROW_FORMAT如果行格式是默认格式,通常不显示表格选项。启用此变量会导致SHOW CREATE TABLE显示ROW_FORMAT,无论它是否为默认格式。

  • show_gipk_in_create_table_and_information_schema

    命令行格式 --show-gipk-in-create-table-and-information-schema[={OFF|ON}]
    介绍 8.0.30
    系统变量 show_gipk_in_create_table_and_information_schema
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    生成的不可见主键是否在SHOW语句输出和信息模式表中可见。当此变量设置为 时 OFF,不会显示此类键。

    该变量不被复制。

    有关详细信息,请参阅 第 13.1.20.11 节,“生成的不可见主键”

  • show_old_temporals

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

    输出是否SHOW CREATE TABLE 包含注释以标记时间列被发现为 pre-5.6.4 格式(TIMEDATETIMETIMESTAMP不支持小数秒精度的列)。默认情况下禁用此变量。如果启用,SHOW CREATE TABLE输出如下所示:

    CREATE TABLE `mytbl` (
      `ts` timestamp /* 5.5 binary format */ NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `dt` datetime /* 5.5 binary format */ DEFAULT NULL,
      `t` time /* 5.5 binary format */ DEFAULT NULL
    ) DEFAULT CHARSET=utf8mb4

    COLUMN_TYPE表列的 输出INFORMATION_SCHEMA.COLUMNS受到类似的影响。

    此变量已弃用,并会在未来的 MySQL 版本中删除。

    从 MySQL 8.0.27 开始,设置这个系统变量的会话值是一个受限操作。会话用户必须具有足以设置受限会话变量的权限。请参阅 第 5.1.9.1 节,“系统变量权限”

  • skip_external_locking

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

    这是OFF如果mysqld 使用外部锁定(系统锁定),ON 如果外部锁定被禁用。这仅影响 MyISAM表访问。

    该变量由 --external-lockingor --skip-external-locking 选项设置。默认情况下禁用外部锁定。

    外部锁定仅影响 MyISAM表访问。有关更多信息,包括可以和不能使用它的条件,请参阅第 8.11.5 节,“外部锁定”

  • skip_name_resolve

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

    检查客户端连接时是否解析主机名。如果这个变量是OFFmysqld在检查客户端连接时解析主机名。如果是ONmysqld只使用 IP 号码;在这种情况下,Host授权表中的所有列值都必须是 IP 地址。请参阅第 5.1.12.3 节,“DNS 查找和主机缓存”

    根据系统的网络配置和 Host帐户的值,客户端可能需要使用显式 --host选项进行连接,例如 --host=127.0.0.1--host=::1

    连接到主机的尝试127.0.0.1 通常会解析为该localhost帐户。但是,如果服务器在 skip_name_resolve启用的情况下运行,则会失败。如果您打算这样做,请确保存在可以接受连接的帐户。例如,为了能够 root使用 --host=127.0.0.1或 进行连接--host=::1,请创建以下帐户:

    CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
    CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
  • skip_networking

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

    此变量控制服务器是否允许 TCP/IP 连接。默认情况下,它是禁用的(允许 TCP 连接)。如果启用,服务器只允许本地(非 TCP/IP)连接,并且与 mysqld的所有交互都必须使用命名管道或共享内存(在 Windows 上)或 Unix 套接字文件(在 Unix 上)进行。对于只允许本地客户端的系统,强烈建议使用此选项。请参阅第 5.1.12.3 节,“DNS 查找和主机缓存”

    因为启动服务器时 --skip-grant-tables会禁用身份验证检查,所以在这种情况下,服务器还会通过启用来禁用远程连接 skip_networking

  • skip_show_database

    命令行格式 --skip-show-database
    系统变量 skip_show_database
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    这可以防止人们在SHOW DATABASES没有 SHOW DATABASES权限的情况下使用该语句。如果您担心用户能够看到属于其他用户的数据库,这可以提高安全性。其效果取决于SHOW DATABASES 权限:如果变量值为ON,则该 SHOW DATABASES语句仅允许具有SHOW DATABASES权限的用户使用,并且该语句显示所有数据库名称。如果值为OFF, 则允许所有用户使用,但仅显示用户对其具有或其他权限 SHOW DATABASES的那些数据库的名称。SHOW DATABASES

    警告

    因为任何静态全局权限都被认为是所有数据库的权限,所以任何静态全局权限都使用户能够使用 SHOW DATABASES或通过检查SCHEMATA表 来查看所有数据库名称INFORMATION_SCHEMA,但已通过部分撤销在数据库级别受到限制的数据库除外。

  • slow_launch_time

    命令行格式 --slow-launch-time=#
    系统变量 slow_launch_time
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 2
    最小值 0
    最大值 31536000
    单元

    如果创建线程花费的时间超过此秒数,则服务器会递增 Slow_launch_threads状态变量。

  • slow_query_log

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

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

    是由 long_query_time变量的值决定的。请参阅 第 5.4.5 节,“慢速查询日志”

  • slow_query_log_file

    命令行格式 --slow-query-log-file=file_name
    系统变量 slow_query_log_file
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 文件名
    默认值 host_name-slow.log

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

  • socket

    命令行格式 --socket={file_name|pipe_name}
    系统变量 socket
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳
    默认值 (Windows) MySQL
    默认值(其他) /tmp/mysql.sock

    在 Unix 平台上,此变量是用于本地客户端连接的套接字文件的名称。默认值为 /tmp/mysql.sock。(对于某些分发格式,目录可能不同,例如 /var/lib/mysqlRPM。)

    在 Windows 上,此变量是用于本地客户端连接的命名管道的名称。默认值为 MySQL(不区分大小写)。

  • sort_buffer_size

    命令行格式 --sort-buffer-size=#
    系统变量 sort_buffer_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 262144
    最小值 32768
    最大值 (Windows) 4294967295
    最大值(其他,64 位平台) 18446744073709551615
    最大值(其他,32 位平台) 4294967295
    单元 字节

    每个必须执行排序的会话都会分配一个此大小的缓冲区。sort_buffer_size 不特定于任何存储引擎,并以一般方式应用于优化。至少该 sort_buffer_size值必须足够大以容纳排序缓冲区中的十五个元组。此外,增加 的值 max_sort_length可能需要增加 的值 sort_buffer_size。有关详细信息,请参阅第 8.2.1.16 节,“ORDER BY 优化”

    如果您看到 Sort_merge_passes每秒SHOW GLOBAL STATUS输出很多,您可以考虑增加该 sort_buffer_size值以加速ORDER BYGROUP BY无法通过查询优化或改进索引改进的操作。

    优化器会尝试计算出需要多少空间,但可以分配更多空间,直至达到限制。将它设置得比全局要求的大会减慢大多数执行排序的查询。最好将其作为会话设置来增加,并且仅适用于需要更大尺寸的会话。在 Linux 上,有 256KB 和 2MB 的阈值,其中较大的值可能会显着减慢内存分配,因此您应该考虑保持在这些值之一以下。尝试为您的工作负载找到最佳价值。请参阅 第 B.3.3.5 节,“MySQL 存储临时文件的位置”

    最大允许设置为 sort_buffer_size4GB−1。64 位平台允许更大的值(64 位 Windows 除外,大值被截断为 4GB-1 并发出警告)。

  • sql_auto_is_null

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

    如果启用此变量,则在成功插入自动生成的 AUTO_INCREMENT值的语句之后,您可以通过发出以下形式的语句来找到该值:

    SELECT * FROM tbl_name WHERE auto_col IS NULL

    如果该语句返回一行,则返回的值与您调用该 LAST_INSERT_ID()函数时的值相同。有关详细信息,包括多行插入后的返回值,请参阅第 12.16 节,“信息函数”。如果未 AUTO_INCREMENT成功插入任何值,则该SELECT语句不返回任何行。

    AUTO_INCREMENT使用 比较来 检索值的行为 IS NULL被一些 ODBC 程序使用,例如 Access。请参阅 获取自动增量值。可以通过设置 sql_auto_is_null为 禁用此行为OFF

    在MySQL 8.0.16之前,to的转换只 在语句执行的时候进行,所以 during的值决定查询是否被转换。在 MySQL 8.0.16 及更高版本中,转换是在语句准备期间执行的。 WHERE auto_col IS NULLWHERE auto_col = LAST_INSERT_ID()sql_auto_is_null

    sql_auto_is_null的默认 值为 OFF

  • sql_big_selects

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

    如果设置为OFF,MySQL 将中止 SELECT执行可能需要很长时间的语句(即优化器估计已检查行数超过值的语句 max_join_size)。WHERE当发出不建议的声明时,这很有用。新连接的默认值为 ON,它允许所有 SELECT语句。

    如果将max_join_size 系统变量设置为 以外的值 DEFAULTsql_big_selects则设置为 OFF

  • sql_buffer_result

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

    如果启用,则sql_buffer_result 强制将SELECT 语句的结果放入临时表中。这有助于 MySQL 尽早释放表锁,并且在需要很长时间才能将结果发送到客户端的情况下非常有用。默认值为OFF

  • sql_generate_invisible_primary_key

    命令行格式 --sql-generate-invisible-primary-key[={OFF|ON}]
    介绍 8.0.30
    系统变量 sql_generate_invisible_primary_key
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    GIPK模式是否生效;当此变量设置为 时 ON,MySQL 复制源服务器将生成的不可见主键添加到没有 InnoDB创建主键的任何表中。

    该变量不被复制。此外,即使在副本上设置,它也会被复制应用程序线程忽略;这意味着副本永远不会为在源上创建时没有主键的任何复制表生成主键。

    有关其他信息和示例,请参阅 第 13.1.20.11 节,“生成的不可见主键”

  • sql_log_off

    系统变量 sql_log_off
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF
    有效值

    OFF(启用日志记录)

    ON(禁用日志记录)

    此变量控制是否为当前会话禁用记录到通用查询日志(假设通用查询日志本身已启用)。默认值为 OFF(即启用日志记录)。要为当前会话禁用或启用常规查询日志记录,请将会话sql_log_off 变量设置为ONOFF

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

  • sql_mode

    命令行格式 --sql-mode=name
    系统变量 sql_mode
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型
    默认值 ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
    有效值

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    当前服务器的SQL模式,可以动态设置。有关详细信息,请参阅第 5.1.11 节,“服务器 SQL 模式”

    笔记

    MySQL 安装程序可能会在安装过程中配置 SQL 模式。

    如果 SQL 模式不同于默认模式或您期望的模式,请检查服务器在启动时读取的选项文件中的设置。

  • sql_notes

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

    如果启用(默认), Note级别增量 warning_count的诊断和服务器记录它们。如果禁用,Note则诊断不会增加warning_count并且服务器不会记录它们。mysqldump 包括禁用此变量的输出,以便重新加载转储文件不会对不影响重新加载操作完整性的事件产生警告。

  • sql_quote_show_create

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

    如果启用(默认),服务器会引用标识符 SHOW CREATE TABLESHOW CREATE DATABASE 语句。如果禁用,则引用被禁用。默认情况下启用此选项,以便复制适用于需要引用的标识符。请参阅第 13.7.7.10 节,“SHOW CREATE TABLE 语句”第 13.7.7.6 节,“SHOW CREATE DATABASE 语句”

  • sql_require_primary_key

    命令行格式 --sql-require-primary-key[={OFF|ON}]
    介绍 8.0.13
    系统变量 sql_require_primary_key
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 布尔值
    默认值 OFF

    创建新表或更改现有表结构的语句是否强制要求表具有主键。

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

    启用此变量有助于避免在表没有主键时可能发生的基于行的复制中的性能问题。假设一个表没有主键,更新或删除修改多行。在复制源服务器上,可以使用单个表扫描执行此操作,但是当使用基于行的复制进行复制时,会导致对副本上要修改的每一行进行表扫描。使用主键,这些表扫描不会发生。

    sql_require_primary_key 适用于基表和TEMPORARY 表,对其值的更改将复制到副本服务器。从 MySQL 8.0.18 开始,它仅适用于可以参与复制的存储引擎。

    启用后, sql_require_primary_key具有以下效果:

    • 尝试创建没有主键的新表失败并出现错误。这包括CREATE TABLE ... LIKE。它还包括CREATE TABLE ... SELECT,除非该CREATE TABLE部分包含主键定义。

    • 尝试从现有表中删除主键失败并出现错误,但 ALTER TABLE允许在同一语句中删除主键和添加主键。

      即使表也包含UNIQUE NOT NULL索引,删除主键也会失败。

    • 尝试导入没有主键的表失败并出现错误。

    statement(MySQL 8.0.23及之后版本)或 statement(MySQL 8.0.23之前版本) 的REQUIRE_TABLE_PRIMARY_KEY_CHECK选项可以让副本选择自己的策略进行主键检查。当该选项设置为 用于复制通道时,副本始终在复制操作中使用系统变量的值, 需要主键。当该选项设置为时,副本始终在复制操作中使用系统变量的值, 因此永远不需要主键,即使源需要一个。When the option is set toCHANGE REPLICATION SOURCE TOCHANGE MASTER TOONONsql_require_primary_keyOFFOFFsql_require_primary_keyREQUIRE_TABLE_PRIMARY_KEY_CHECKSTREAM,这是默认值,副本使用从每个事务的源复制的任何值。通过该选项的STREAM设置REQUIRE_TABLE_PRIMARY_KEY_CHECK ,如果权限检查正在用于复制通道,则该PRIVILEGE_CHECKS_USER帐户需要足以设置受限会话变量的权限,以便它可以为 sql_require_primary_key 系统变量设置会话值。使用ONOFF设置,帐户不需要这些权限。有关详细信息,请参阅 第 17.3.3 节,“复制权限检查”

  • sql_safe_updates

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

    如果启用此变量,则 在子句或子句中不使用键的 UPDATE语句 DELETE会产生错误。这使得在键未正确使用并且可能会更改或删除大量行的情况下捕获和 语句成为可能。默认值为 。 WHERELIMITUPDATEDELETEOFF

    对于mysql客户端, sql_safe_updates可以使用该 --safe-updates选项启用。有关详细信息,请参阅使用安全更新模式 (--safe-updates)

  • sql_select_limit

    系统变量 sql_select_limit
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 18446744073709551615
    最小值 0
    最大值 18446744073709551615

    SELECT从语句 返回的最大行数 。有关详细信息,请参阅使用安全更新模式 (--safe-updates)

    新连接的默认值是服务器允许每个表的最大行数。典型的默认值为 (2 32 )−1 或 (2 64 )−1。如果您更改了限制,可以通过分配一个值来恢复默认值DEFAULT

    如果 aSELECTLIMIT子句,则 theLIMIT 优先于 的值 sql_select_limit

  • sql_warnings

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

    INSERT如果出现警告, 此变量控制单行语句是否 生成信息字符串。默认值为 OFF。将值设置为ON 以生成信息字符串。

  • ssl_ca

    命令行格式 --ssl-ca=file_name
    系统变量 ssl_ca
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 文件名
    默认值 NULL

    PEM 格式的证书颁发机构 (CA) 证书文件的路径名。该文件包含受信任的 SSL 证书颁发机构列表。

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TLS 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

  • ssl_capath

    命令行格式 --ssl-capath=dir_name
    系统变量 ssl_capath
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 目录名称
    默认值 NULL

    包含 PEM 格式的可信 SSL 证书颁发机构 (CA) 证书文件的目录的路径名。

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TSL 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

  • ssl_cert

    命令行格式 --ssl-cert=file_name
    系统变量 ssl_cert
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 文件名
    默认值 NULL

    PEM 格式的服务器 SSL 公钥证书文件的路径名。

    如果服务器启动时 ssl_cert设置为使用任何受限密码或密码类别的证书,则服务器启动时会禁用对加密连接的支持。有关密码限制的信息,请参阅 连接密码配置

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TSL 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

    笔记

    v8.0.30 中添加了链式 SSL 证书支持;以前只读取第一个证书。

  • ssl_cipher

    命令行格式 --ssl-cipher=name
    系统变量 ssl_cipher
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 细绳
    默认值 NULL

    通过 TLSv1.2 使用 TLS 协议的连接的允许加密密码列表。如果列表中的密码均不受支持,则使用这些 TLS 协议的加密连接将不起作用。

    为了最大的可移植性,密码列表应该是一个或多个密码名称的列表,用冒号分隔。以下示例显示了两个用冒号分隔的密码名称:

    [mysqld]
    ssl_cipher="DHE-RSA-AES128-GCM-SHA256:AES128-SHA"

    OpenSSL 支持https://www.openssl.org/docs/manmaster/man1/ciphers.html 上的 OpenSSL 文档中描述的用于指定密码的语法 。

    有关 MySQL 支持哪些加密密码的信息,请参阅第 6.3.2 节,“加密连接 TLS 协议和密码”

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TSL 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

  • ssl_crl

    命令行格式 --ssl-crl=file_name
    系统变量 ssl_crl
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 文件名
    默认值 NULL

    包含 PEM 格式的证书吊销列表的文件的路径名。

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TSL 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

  • ssl_crlpath

    命令行格式 --ssl-crlpath=dir_name
    系统变量 ssl_crlpath
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 目录名称
    默认值 NULL

    包含 PEM 格式的证书吊销列表文件的目录的路径。

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TSL 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

  • ssl_fips_mode

    命令行格式 --ssl-fips-mode={OFF|ON|STRICT}
    系统变量 ssl_fips_mode
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF(或 0)

    ON(或 1)

    STRICT(或 2)

    控制是否在服务器端启用 FIPS 模式。该 ssl_fips_mode系统变量与其他 系统变量的不同之处在于它不用于控制服务器是否允许加密连接,而是用于影响允许哪些加密操作。请参见 第 6.8 节 “FIPS 支持”ssl_xxx

    这些ssl_fips_mode值是允许的:

    • OFF(或 0):禁用 FIPS 模式。

    • ON(或 1):启用 FIPS 模式。

    • STRICT(或 2):启用 严格 FIPS 模式。

    笔记

    如果 OpenSSL FIPS 对象模块不可用,则唯一允许的 ssl_fips_mode值为 OFF. 在这种情况下,设置 ssl_fips_modeONSTRICT在启动时会导致服务器产生错误消息并退出。

  • ssl_key

    命令行格式 --ssl-key=file_name
    系统变量 ssl_key
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 文件名
    默认值 NULL

    PEM 格式的服务器 SSL 私钥文件的路径名。为提高安全性,请使用 RSA 密钥大小至少为 2048 位的证书。

    如果密钥文件受密码保护,服务器会提示用户输入密码。密码必须交互给出;它不能存储在文件中。如果密码不正确,程序将继续运行,就好像它无法读取密钥一样。

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TSL 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

  • ssl_session_cache_mode

    命令行格式 --ssl_session_cache_mode={ON|OFF}
    介绍 8.0.29
    系统变量 ssl_session_cache_mode
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON
    有效值

    ON

    OFF

    控制是否启用服务器端内存中的会话缓存以及服务器生成的会话票证。默认模式是ON(启用会话缓存模式)。对系统变量的更改 ssl_session_cache_mode仅在 ALTER INSTANCE RELOAD TLS 语句执行后生效,或者如果变量值已保留,则在重新启动后生效。

    这些ssl_session_cache_mode 值是允许的:

    • ON:启用会话缓存模式。

    • OFF: 禁用会话缓存模式。

    如果此系统变量的值为 ,则服务器不会公布其对会话恢复的支持 OFF。在 OpenSSL 1.0 上运行时。会话票证始终生成,但票证在启用 x时不可用 。ssl_session_cache_mode

    当前有效的值 ssl_session_cache_mode可以通过 Ssl_session_cache_mode 状态变量观察。

  • ssl_session_cache_timeout

    命令行格式 --ssl_session_cache_timeout
    介绍 8.0.29
    系统变量 ssl_session_cache_timeout
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 300
    最小值 0
    最大值 84600
    单元

    设置一个时间段,在此期间,在与服务器建立新的加密连接时允许重用先前的会话,前提 ssl_session_cache_mode是启用了系统变量并且先前的会话数据可用。如果会话超时到期,则不能再重用会话。

    默认值为 300 秒,最大值为 84600(或以秒为单位的一天)。对系统变量的更改 ssl_session_cache_timeout 仅在 ALTER INSTANCE RELOAD TLS 语句执行后生效,或者如果变量值已保留,则在重新启动后生效。当前有效的值 ssl_session_cache_timeout可以通过 Ssl_session_cache_timeout 状态变量观察。

  • stored_program_cache

    命令行格式 --stored-program-cache=#
    系统变量 stored_program_cache
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 256
    最小值 16
    最大值 524288

    为每个连接的缓存存储例程数设置软上限。这个变量的值是根据 MySQL 服务器分别为存储过程和存储函数维护的两个缓存中的存储例程的数量来指定的。

    每当执行存储例程时,都会在解析例程中的第一条或顶级语句之前检查缓存大小;如果相同类型的例程(正在执行的存储过程或存储函数)的数量超过此变量指定的限制,则刷新相应的缓存并释放先前为缓存对象分配的内存。这允许安全地刷新缓存,即使在存储的例程之间存在依赖性时也是如此。

    存储过程和存储函数缓存与字典对象缓存 的存储程序定义缓存分区并行存在。存储过程和存储函数缓存是每个连接的,而存储程序定义缓存是共享的。存储过程和存储函数缓存中对象的存在与存储程序定义缓存中对象的存在无关,反之亦然。有关详细信息,请参阅 第 14.4 节,“字典对象缓存”

  • stored_program_definition_cache

    命令行格式 --stored-program-definition-cache=#
    系统变量 stored_program_definition_cache
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义可保存在字典对象缓存中的已使用和未使用的已存储程序定义对象的数量限制。

    未使用的存储程序定义对象仅在使用中的数量小于定义的容量时才保留在字典对象缓存中 stored_program_definition_cache

    设置为 0 意味着存储的程序定义对象仅在使用时保留在字典对象缓存中。

    存储程序定义高速缓存分区与使用该 stored_program_cache选项配置的存储过程和存储函数高速缓存并行存在。

    stored_program_cache 选项为每个连接的缓存存储过程或函数的数量设置了软上限,并且每次连接执行存储过程或函数时都会检查该限制。另一方面,存储程序定义高速缓存分区是共享高速缓存,存储用于其他目的的存储程序定义对象。存储程序定义缓存分区中对象的存在与存储过程缓存或存储函数缓存中对象的存在无关,反之亦然。

    有关相关信息,请参阅 第 14.4 节,“字典对象缓存”

  • super_read_only

    命令行格式 --super-read-only[={OFF|ON}]
    系统变量 super_read_only
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    如果read_only启用了系统变量,则服务器不允许客户端更新,除非具有 CONNECTION_ADMIN特权(或已弃用的SUPER 特权)的用户。如果 super_read_only还启用了系统变量,则服务器甚至禁止具有 CONNECTION_ADMIN或 的用户进行客户端更新SUPERread_only有关只读模式的描述以及有关如何交互的信息,请参阅系统变量 read_onlysuper_read_only描述 。

    启用时阻止的客户端更新 super_read_only包括不一定显示为更新的操作,例如CREATE FUNCTION(安装可加载功能)INSTALL PLUGIN、 和INSTALL COMPONENT。这些操作是被禁止的,因为它们涉及对mysql系统架构中的表的更改。

    同样,如果启用了事件调度程序,则启用 super_read_only系统变量会阻止它更新 数据字典表中的事件最后执行时间戳。events这会导致 Event Scheduler 在将消息写入服务器错误日志后,在下次尝试执行计划的事件时停止。(在这种情况下,event_scheduler系统变量不会从 更改ONOFF。这意味着该变量拒绝启用或禁用事件调度程序的 DBA意图,其中启动或停止的实际状态可能不同。)。如果 super_read_only在启用后随后被禁用,从 MySQL 8.0.26 开始,服务器会根据需要自动重新启动 Event Scheduler。在 MySQL 8.0.26 之前,需要通过再次启用来手动重启 Event Scheduler。

    复制源服务器上的更改super_read_only不会复制到副本服务器。该值可以独立于源上的设置在副本上设置。

  • syseventlog.facility

    命令行格式 --syseventlog.facility=value
    介绍 8.0.13
    系统变量 syseventlog.facility
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 daemon

    写入错误日志输出的工具 syslog(发送消息的程序类型)。log_sink_syseventlog除非安装错误日志组件,否则此变量不可用 。请参阅第 5.4.2.8 节,“错误记录到系统日志”

    允许的值可能因操作系统而异;请查阅您的系统syslog文档。

    Windows 上不存在此变量。

  • syseventlog.include_pid

    命令行格式 --syseventlog.include-pid[={OFF|ON}]
    介绍 8.0.13
    系统变量 syseventlog.include_pid
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    是否在写入 的每行错误日志输出中包含服务器进程 ID sysloglog_sink_syseventlog除非安装错误日志组件,否则此变量不可用 。请参阅第 5.4.2.8 节,“错误记录到系统日志”

    Windows 上不存在此变量。

  • syseventlog.tag

    命令行格式 --syseventlog.tag=tag
    介绍 8.0.13
    系统变量 syseventlog.tag
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 empty string

    要添加到写入的错误日志输出syslog或 Windows 事件日志中的服务器标识符的标记。log_sink_syseventlog除非安装错误日志组件,否则此变量不可用 。请参阅第 5.4.2.8 节,“错误记录到系统日志”

    默认情况下,没有设置标签,因此服务器标识符只是 MySQL在 Windows 和 mysqld其他平台上。如果指定了标记值tag,它会附加到带有前导连字符的服务器标识符,从而生成 syslog标识符 (或 在 Windows 上)。 mysqld-tagMySQL-tag

    在 Windows 上,要使用尚不存在的标签,必须从具有管理员权限的帐户运行服务器,以允许为标签创建注册表项。如果标签已经存在,则不需要提升权限。

  • system_time_zone

    系统变量 system_time_zone
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳

    服务器系统时区。当服务器开始执行时,它从机器默认值继承时区设置,可能由用于运行服务器或启动脚本的帐户环境修改。该值用于设置system_time_zone。要明确指定系统时区,请设置 TZ环境变量或使用 mysqld_safe脚本 的--timezone选项 。

    从 MySQL 8.0.26 开始,除了启动时间初始化外,如果服务器主机时区更改(例如,由于夏令时), system_time_zone会反映该更改,这对应用程序有以下影响:

    • 引用的查询 system_time_zone将在夏令时更改之前获得一个值,在更改之后获得一个不同的值。

    • 对于在夏令时更改之前开始执行并在更改之后结束 system_time_zone的查询,查询中的 保持不变,因为该值通常在执行开始时缓存。

    system_time_zone变量不同于time_zone 变量 。尽管它们可能具有相同的值,但后一个变量用于为每个连接的客户端初始化时区。请参阅第 5.1.15 节,“MySQL 服务器时区支持”

  • table_definition_cache

    命令行格式 --table-definition-cache=#
    系统变量 table_definition_cache
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 -1(表示自动调整大小;不要分配此文字值)
    最小值 400
    最大值 524288

    可以存储在表定义缓存中的表定义数。如果你使用大量的表,你可以创建一个大的表定义缓存来加速表的打开。与普通表缓存不同,表定义缓存占用的空间更少,并且不使用文件描述符。最小值为 400。默认值基于以下公式,上限为 2000:

    MIN(400 + table_open_cache / 2, 2000)

    对于InnoDB,该 table_definition_cache 设置充当字典对象缓存中表实例数和一次可以打开的每个表文件表空间数的软限制。

    如果字典对象缓存中的表实例数量超过 table_definition_cache限制,LRU 机制开始将表实例标记为逐出,并最终将它们从字典对象缓存中移除。table_definition_cache由于具有外键关系的表实例未放置在 LRU 列表中,因此 具有缓存元数据的打开表的数量可能会高于 限制。

    一次可以打开的 file-per-table 表空间的数量受 table_definition_cacheinnodb_open_files设置的限制。如果设置了两个变量,则使用最高设置。如果两个变量均未 table_definition_cache 设置,则使用具有更高默认值的设置。如果打开的表空间数超过 table_definition_cacheor 定义的限制innodb_open_files,LRU 机制将在 LRU 列表中搜索已完全刷新且当前未扩展的表空间文件。每次打开新表空间时都会执行此过程。仅关闭不活动的表空间。

    表定义缓存与字典对象缓存 的表定义缓存分区并行存在 。两个缓存都存储表定义,但服务于 MySQL 服务器的不同部分。一个缓存中的对象不依赖于另一个缓存中对象的存在。有关详细信息,请参阅 第 14.4 节,“字典对象缓存”

  • table_encryption_privilege_check

    命令行格式 --table-encryption-privilege-check[={OFF|ON}]
    介绍 8.0.16
    系统变量 table_encryption_privilege_check
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    控制在 TABLE_ENCRYPTION_ADMIN 使用不同于 default_table_encryption 设置的加密创建或更改模式或通用表空间时发生的权限检查,或者在使用不同于默认模式加密的加密设置创建或更改表时发生的特权检查。默认情况下禁用检查。

    在运行时设置 table_encryption_privilege_check 需要SUPER 权限。

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

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

  • table_open_cache

    命令行格式 --table-open-cache=#
    系统变量 table_open_cache
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 4000
    最小值 1
    最大值 524288

    所有线程的打开表数。增加这个值会增加mysqld需要的文件描述符的数量 。该变量的有效值是 的有效值 和 400 中的较大者;那是 open_files_limit - 10 -max_connections / 2

    MAX(
        (open_files_limit - 10 - max_connections) / 2,
        400
       )

    Opened_tables 您可以通过检查状态变量 来检查是否需要增加表缓存。如果 的值 Opened_tables很大并且您不FLUSH TABLES 经常使用(这只是强制关闭并重新打开所有表),那么您应该增加该 table_open_cache变量的值。有关表缓存的更多信息,请参阅 第 8.4.3.1 节,“MySQL 如何打开和关闭表”

  • table_open_cache_instances

    命令行格式 --table-open-cache-instances=#
    系统变量 table_open_cache_instances
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 16
    最小值 1
    最大值 64

    打开的表缓存实例数。为了通过减少会话之间的争用来提高可伸缩性,可以将打开的表缓存划分为几个大小为 table_open_cache/ 的较小缓存实例table_open_cache_instances。一个会话只需要锁定一个实例就可以为 DML 语句访问它。这在实例之间分段缓存访问,允许在有许多会话访问表时使用缓存的操作具有更高的性能。(DDL 语句仍然需要锁定整个缓存,但此类语句的频率远低于 DML 语句。)

    对于通常使用 16 个或更多内核的系统,建议使用 8 或 16 的值。但是,如果您的表上有许多导致高内存负载的大型触发器,则默认设置 table_open_cache_instances 可能会导致过多的内存使用。在这种情况下,将其设置 table_open_cache_instances为 1 以限制内存使用会很有帮助。

  • tablespace_definition_cache

    命令行格式 --tablespace-definition-cache=#
    系统变量 tablespace_definition_cache
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义可以保存在字典对象缓存中的表空间定义对象(包括已使用和未使用)的数量限制。

    未使用的表空间定义对象仅在使用中的数量小于定义的容量时才保留在字典对象缓存中 tablespace_definition_cache

    设置0意味着表空间定义对象仅在使用时保留在字典对象缓存中。

    有关详细信息,请参阅 第 14.4 节,“字典对象缓存”

  • temptable_max_mmap

    命令行格式 --temptable-max-mmap=#
    介绍 8.0.23
    系统变量 temptable_max_mmap
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1073741824
    最小值 0
    最大值 2^64-1
    单元 字节

    InnoDB定义在开始将数据存储到磁盘上的内部临时表 之前,允许 TempTable 存储引擎从内存映射临时文件分配的最大内存量(以字节为单位) 。设置为 0 将禁用从内存映射临时文件分配内存。有关详细信息,请参阅 第 8.4.4 节,“MySQL 中的内部临时表使用”

  • temptable_max_ram

    命令行格式 --temptable-max-ram=#
    系统变量 temptable_max_ram
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1073741824
    最小值 2097152
    最大值 2^64-1
    单元 字节

    TempTable定义存储引擎在开始将数据存储到磁盘之前 可以占用的最大内存量。默认值为 1073741824 字节 (1GiB)。有关详细信息,请参阅 第 8.4.4 节,“MySQL 中的内部临时表使用”

  • temptable_use_mmap

    命令行格式 --temptable-use-mmap[={OFF|ON}]
    介绍 8.0.16
    弃用 8.0.26
    系统变量 temptable_use_mmap
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    定义当TempTable存储引擎占用的内存量超过 temptable_max_ram变量定义的限制时,TempTable存储引擎是否为内部内存临时表分配空间作为内存映射临时文件。禁用时temptable_use_mmap,TempTable 存储引擎 InnoDB改为使用磁盘内部临时表。有关详细信息,请参阅 第 8.4.4 节,“MySQL 中的内部临时表使用”

  • thread_cache_size

    命令行格式 --thread-cache-size=#
    系统变量 thread_cache_size
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 -1(表示自动调整大小;不要分配此文字值)
    最小值 0
    最大值 16384

    服务器应缓存多少线程以供重用。当客户端断开连接时,如果客户端的线程少于 thread_cache_size线程,则将其放入缓存中。如果可能,通过重用从缓存中获取的线程来满足对线程的请求,并且只有当缓存为空时才会创建新线程。如果您有很多新连接,可以增加此变量以提高性能。通常,如果您有良好的线程实现,这不会提供显着的性能改进。但是,如果您的服务器每秒看到数百个连接,您通常应该设置 thread_cache_size足够高,以便大多数新连接使用缓存线程。Connections通过检查和 status 变量之间的差异 Threads_created,您可以了解线程缓存的效率。有关详细信息,请参阅第 5.1.10 节,“服务器状态变量”

    默认值基于以下公式,上限为 100:

    8 + (max_connections / 100)
  • thread_handling

    命令行格式 --thread-handling=name
    系统变量 thread_handling
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 枚举
    默认值 one-thread-per-connection
    有效值

    no-threads

    one-thread-per-connection

    loaded-dynamically

    服务器用于连接线程的线程处理模型。允许的值是 no-threads(服务器使用单个线程处理一个连接), one-thread-per-connection(服务器使用一个线程处理每个客户端连接)和 loaded-dynamically(由线程池插件在初始化时设置)。no-threads对 Linux 下的调试很有用;参见 第 5.9 节,“调试 MySQL”

  • thread_pool_algorithm

    命令行格式 --thread-pool-algorithm=#
    系统变量 thread_pool_algorithm
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1

    该变量控制线程池插件使用的算法:

    • 值 0(默认值)使用保守的低并发算法,该算法经过最充分的测试并且已知会产生非常好的结果。

    • 值为 1 会增加并发性并使用更积极的算法,该算法有时在最佳线程数上的性能提高 5–10%,但随着连接数的增加性能会下降。它的使用应被视为实验性的,不受支持。

    此变量仅在启用线程池插件时可用。请参阅第 5.6.3 节,“MySQL 企业线程池”

  • thread_pool_dedicated_listeners

    命令行格式 --thread-pool-dedicated-listeners
    介绍 8.0.23
    系统变量 thread_pool_dedicated_listeners
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    在每个线程组中指定一个侦听器线程来侦听来自分配给该组的连接的传入语句。

    • OFF:(默认)禁用专用侦听器线程。

    • ON:在每个线程组中指定一个侦听器线程来侦听来自分配给该组的连接的传入语句。专用侦听器线程不执行查询。

    thread_pool_dedicated_listeners 仅当事务限制由 定义时才需要 启用 thread_pool_max_transactions_limit。否则, thread_pool_dedicated_listeners 不应启用。

    MySQL 数据库服务在 MySQL 8.0.23 中引入了这个变量。它在 MySQL 8.0.31 的 MySQL Enterprise Edition 中可用。

  • thread_pool_high_priority_connection

    命令行格式 --thread-pool-high-priority-connection=#
    系统变量 thread_pool_high_priority_connection
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1

    此变量会影响新语句在执行前的排队。如果该值为 0(false,默认值),语句队列将同时使用低优先级和高优先级队列。如果值为 1 (true),排队的语句总是进入高优先级队列。

    此变量仅在启用线程池插件时可用。请参阅第 5.6.3 节,“MySQL 企业线程池”

  • thread_pool_max_active_query_threads

    命令行格式 --thread-pool-max-active-query-threads
    介绍 8.0.19
    系统变量 thread_pool_max_active_query_threads
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 512

    每组允许的最大活动(运行)查询线程数。如果该值为 0,线程池插件将使用尽可能多的可用线程。

    此变量仅在启用线程池插件时可用。请参阅第 5.6.3 节,“MySQL 企业线程池”

  • thread_pool_max_transactions_limit

    命令行格式 --thread-pool-max-transactions-limit
    介绍 8.0.23
    系统变量 thread_pool_max_transactions_limit
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1000000

    线程池插件允许的最大事务数。定义一个事务限制将一个线程绑定到一个事务直到它提交,这有助于在高并发期间稳定吞吐量。定义事务限制时,启用 thread_pool_dedicated_listeners 以确保每个线程组都有一个可用的侦听器线程。不这样做会影响性能。

    默认值 0 表示没有交易限制。该变量是动态的,但不能在运行时从 0 更改为更高的值,反之亦然。启动时的非零值允许在运行时进行动态配置。

    需要在运行时 配置 的CONNECTION_ADMIN权限 。thread_pool_max_transactions_limit

    当达到定义的限制 thread_pool_max_transactions_limit 时,新连接似乎会挂起,直到一个或多个现有事务完成。尝试在现有连接上启动新事务时也会发生同样的情况。如果现有连接被阻止或长时间运行,则可能需要特权连接才能访问服务器以增加限制、删除限制或终止正在运行的事务。请参阅 特权连接

    MySQL 数据库服务在 MySQL 8.0.23 中引入了这个变量。它在 MySQL 8.0.31 中的 MySQL Enterprise Edition 中可用。

  • thread_pool_max_unused_threads

    命令行格式 --thread-pool-max-unused-threads=#
    系统变量 thread_pool_max_unused_threads
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4096

    线程池中允许的最大未使用线程数。这个变量可以限制休眠线程使用的内存量。

    值 0(默认值)表示对休眠线程的数量没有限制。N where的值N大于 0 意味着 1 个消费者线程和N−1 个保留线程。在这种情况下,如果线程准备休眠但休眠线程数已经达到最大值,则线程退出而不是进入休眠状态。

    休眠线程要么作为消费者线程休眠,要么作为保留线程休眠。线程池允许一个线程在休眠时作为消费者线程。如果一个线程进入休眠状态并且没有现有的消费者线程,它会作为消费者线程休眠。当必须唤醒一个线程时,如果有消费者线程,则选择一个。只有当没有消费者线程可以唤醒时,才会选择保留线程。

    此变量仅在启用线程池插件时可用。请参阅第 5.6.3 节,“MySQL 企业线程池”

  • thread_pool_prio_kickup_timer

    命令行格式 --thread-pool-prio-kickup-timer=#
    系统变量 thread_pool_prio_kickup_timer
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1000
    最小值 0
    最大值 4294967294
    单元 毫秒

    该变量影响在低优先级队列中等待执行的语句。该值是等待语句移动到高优先级队列之前的毫秒数。默认值为 1000(1 秒)。

    此变量仅在启用线程池插件时可用。请参阅第 5.6.3 节,“MySQL 企业线程池”

  • thread_pool_query_threads_per_group

    命令行格式 --thread-pool-query-threads-per-group
    介绍 8.0.31
    系统变量 thread_pool_query_threads_per_group
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 4096

    线程组中允许的最大查询线程数。最大值为 4096,但如果 thread_pool_max_transactions_limit 已设置, 则thread_pool_query_threads_per_group 不得超过该值。

    默认值 1 表示每个线程组中有一个活动查询线程,这适用于许多负载。当您使用高并发线程池算法 ( thread_pool_algorithm = 1) 时,如果由于长时间运行的事务而遇到较慢的响应时间,请考虑增加该值。

    需要在运行时 配置 的CONNECTION_ADMIN权限 。thread_pool_query_threads_per_group

    如果您减小 thread_pool_query_threads_per_group at runtime 的值,则允许当前运行用户查询的线程完成,然后移至保留池或终止。如果您在运行时增加该值并且线程组需要更多线程,则可能会从保留池中获取这些线程,否则将创建它们。

    此变量可从 MySQL 数据库服务和 MySQL 企业版中的 MySQL 8.0.31 获得。

  • thread_pool_size

    命令行格式 --thread-pool-size=#
    系统变量 thread_pool_size
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值 16
    最小值 1
    最大值 (≥ 8.0.19) 512
    最大值(≤ 8.0.18) 64

    线程池中线程组的数量。这是控制线程池性能的最重要参数。它影响可以同时执行多少条语句。如果指定了允许值范围之外的值,则不会加载线程池插件,并且服务器会将消息写入错误日志。

    此变量仅在启用线程池插件时可用。请参阅第 5.6.3 节,“MySQL 企业线程池”

  • thread_pool_stall_limit

    命令行格式 --thread-pool-stall-limit=#
    系统变量 thread_pool_stall_limit
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 6
    最小值 4
    最大值 600
    单元 毫秒 * 10

    该变量影响执行语句。该值是语句开始执行后必须完成的时间,然后定义为停止,此时线程池允许线程组开始执行另一个语句。该值以 10 毫秒为单位测量,因此默认值 6 表示 60 毫秒。短等待值允许线程更快地启动。短值也能更好地避免死锁情况。长时间等待值对于包含长时间运行的语句的工作负载很有用,以避免在当前语句执行时启动太多新语句。

    此变量仅在启用线程池插件时可用。请参阅第 5.6.3 节,“MySQL 企业线程池”

  • thread_pool_transaction_delay

    命令行格式 --thread-pool-transaction-delay
    介绍 8.0.31
    系统变量 thread_pool_transaction_delay
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 300000

    执行新事务之前的延迟时间,以毫秒为单位。最大值为 300000(5 分钟)。

    事务延迟可用于并行事务因资源争用而影响其他操作的性能的情况。例如,如果并行事务影响索引创建或在线缓冲池大小调整操作,您可以配置事务延迟以减少这些操作运行时的资源争用。

    thread_pool_transaction_delay工作线程在执行新事务之前 休眠指定的毫秒数。

    thread_pool_transaction_delay设置不影响从特权连接(分配给Admin线程组的连接)发出的查询。这些查询不受配置的事务延迟的影响。

  • thread_stack

    命令行格式 --thread-stack=#
    系统变量 thread_stack
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 整数
    默认值(64 位平台,≥ 8.0.27) 1048576
    默认值(64 位平台,≤ 8.0.26) 286720
    默认值(32 位平台,≥ 8.0.27) 1048576
    默认值(32 位平台,≤ 8.0.26) 221184
    最小值 131072
    最大值(64 位平台) 18446744073709550592
    最大值(32 位平台) 4294966272
    单元 字节
    块大小 1024

    每个线程的堆栈大小。默认值对于正常操作来说足够大。如果线程堆栈大小太小,它会限制服务器可以处理的 SQL 语句的复杂性、存储过程的递归深度以及其他消耗内存的操作。

    块大小为 1024。在存储系统变量的值之前,MySQL 服务器会将不是块大小精确倍数的值向下舍入为块大小的下一个较低倍数。解析器允许值最大为平台的最大无符号整数值(对于 32 位系统为 4294967295 或 2 32 -1,对于 64 位系统为 18446744073709551615 或 2 64 -1),但实际最大值比块大小小.

  • time_zone

    系统变量 time_zone
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 (≥ 8.0.17) 是的
    SET_VAR提示适用(≤ 8.0.16)
    类型 细绳
    默认值 SYSTEM
    最小值 (≥ 8.0.19) -13:59
    最小值(≤ 8.0.18) -12:59
    最大值 (≥ 8.0.19) +14:00
    最大值(≤ 8.0.18) +13:00

    当前时区。此变量用于为每个连接的客户端初始化时区。默认情况下,this 的初始值为'SYSTEM'(这意味着使用”的值 system_time_zone。该值可以在服务器启动时使用该--default-time-zone选项明确指定。请参阅第 5.1.15 节,“MySQL 服务器时区支持”

    笔记

    如果设置为SYSTEM,则每个需要时区计算的 MySQL 函数调用都会调用系统库来确定当前系统时区。此调用可能受全局互斥锁保护,从而导致争用。

  • timestamp

    系统变量 timestamp
    范围 会议
    动态的 是的
    SET_VAR提示适用 是的
    类型 数字
    默认值 UNIX_TIMESTAMP()
    最小值 1
    最大值 2147483647

    为这个客户设置时间。如果您使用二进制日志来恢复行,这将用于获取原始时间戳。 timestamp_value应该是 Unix 纪元时间戳(类似于 返回的 UNIX_TIMESTAMP()值,而不是格式中的值)或 . 'YYYY-MM-DD hh:mm:ss'DEFAULT

    设置timestamp为常量值会导致它保留该值,直到再次更改为止。设置 timestampDEFAULT使其值为访问时的当前日期和时间。

    timestamp是一个 DOUBLE而不是 BIGINT因为它的值包括微秒部分。最大值对应于 '2038-01-19 03:14:07'UTC,与TIMESTAMP数据类型相同。

    SET timestamp影响由 NOW()但不由 返回的值SYSDATE()。这意味着二进制日志中的时间戳设置对SYSDATE(). 可以使用 --sysdate-is-now选项启动服务器以SYSDATE()使其成为 的同义词NOW(),在这种情况下 SET timestamp会影响两个功能。

  • tls_ciphersuites

    命令行格式 --tls-ciphersuites=ciphersuite_list
    介绍 8.0.16
    系统变量 tls_ciphersuites
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 细绳
    默认值 NULL

    服务器允许哪些密码套件用于使用 TLSv1.3 的加密连接。该值是零个或多个以冒号分隔的密码套件名称的列表。

    可以为此变量命名的密码套件取决于用于编译 MySQL 的 SSL 库。如果未设置此变量,则其默认值为NULL,这意味着服务器允许默认的密码套件集。如果该变量设置为空字符串,则不会启用任何密码套件,并且无法建立加密连接。有关详细信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”

  • tls_version

    命令行格式 --tls-version=protocol_list
    系统变量 tls_version
    范围 全球的
    动态(≥ 8.0.16) 是的
    动态(≤ 8.0.15)
    SET_VAR提示适用
    类型 细绳
    默认值(≥ 8.0.28) TLSv1.2,TLSv1.3
    默认值(≥ 8.0.16,≤ 8.0.27) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
    默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2

    服务器允许哪些协议用于加密连接。该值是一个或多个以逗号分隔的协议名称列表,不区分大小写。可以为此变量命名的协议取决于用于编译 MySQL 的 SSL 库。应选择允许的协议,例如不要在列表中留下漏洞。有关详细信息,请参阅第 6.3.2 节,“加密连接 TLS 协议和密码”

    从 MySQL 8.0.16 开始,这个变量是动态的,可以在运行时修改以影响服务器用于新连接的 TSL 上下文。请参阅 服务器端运行时配置和监控加密连接。在 MySQL 8.0.16 之前,这个变量只能在服务器启动时设置。

    重要的
    • 从 MySQL 8.0.28 开始,对 TLSv1 和 TLSv1.1 连接协议的支持已从 MySQL 服务器中删除。这些协议已从 MySQL 8.0.26 中弃用。有关详细信息,请参阅 取消对 TLSv1 和 TLSv1.1 协议的支持

    • 从 MySQL 8.0.16 开始,MySQL Server 支持 TLSv1.3 协议,前提是 MySQL Server 是使用 OpenSSL 1.1.1 或更高版本编译的。服务器在启动时检查 OpenSSL 的版本,如果它低于 1.1.1,则从系统变量的默认值中删除 TLSv1.3。在这种情况下,默认 值为TLSv1,TLSv1.1,TLSv1.2 (包括 MySQL 8.0.27)和 TLSv1.2(来自 MySQL 8.0.28)。

  • tmp_table_size

    命令行格式 --tmp-table-size=#
    系统变量 tmp_table_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用 是的
    类型 整数
    默认值 16777216
    最小值 1024
    最大值 18446744073709551615
    单元 字节

    定义由MEMORY存储引擎创建的内部内存临时表的最大大小,从 MySQL 8.0.28 开始,TempTable 存储引擎。如果内部内存临时表超过此大小,它会自动转换为磁盘内部临时表。

    tmp_table_size变量不适用于用户创建的MEMORY 表。TempTable不支持 用户创建的表。

    MEMORY存储引擎用于内部内存临时表时,实际大小限制为 和 中的较小tmp_table_sizemax_heap_table_size。该 max_heap_table_size设置不适用于TempTable表。

    如果您执行许多高级查询并且您有大量内存,请 增加值 tmp_table_sizemax_heap_table_size如果需要,在将MEMORY存储引擎用于内部内存临时表时) 。GROUP BY

    Created_tmp_disk_tables您可以通过比较和 Created_tmp_tables值 来比较创建的内部磁盘临时表的数量与创建的内部临时表的总数 。

    另见第 8.4.4 节,“MySQL 中的内部临时表使用”

  • tmpdir

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

    用于创建临时文件的目录路径。/tmp 如果您的默认目录驻留在太小而无法容纳临时表的分区上,这可能很有用。此变量可以设置为以循环方式使用的多个路径的列表。路径应:在 Unix 上以冒号字符 ( ) 分隔;,在 Windows 上以分号字符 ( ) 分隔。

    tmpdir可以是非永久位置,例如基于内存的文件系统上的目录或服务器主机重新启动时清除的目录。如果 MySQL 服务器充当副本,并且您使用的是非永久位置 ,请考虑使用或 变量tmpdir为副本设置不同的临时目录 。对于副本,用于复制 语句的临时文件存储在此目录中,因此如果临时文件已被删除,它们可以在机器重启后继续存在,但如果临时文件已被删除,复制现在可以在重启后继续。 replica_load_tmpdirslave_load_tmpdirLOAD DATA

    有关临时文件存储位置的更多信息,请参阅第 B.3.3.5 节,“MySQL 存储临时文件的位置”

  • transaction_alloc_block_size

    命令行格式 --transaction-alloc-block-size=#
    系统变量 transaction_alloc_block_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 8192
    最小值 1024
    最大值 131072
    单元 字节
    块大小 1024

    需要内存的每个事务内存池增加的字节数。见说明 transaction_prealloc_size

  • transaction_isolation

    命令行格式 --transaction-isolation=name
    系统变量 transaction_isolation
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 枚举
    默认值 REPEATABLE-READ
    有效值

    READ-UNCOMMITTED

    READ-COMMITTED

    REPEATABLE-READ

    SERIALIZABLE

    事务隔离级别。默认值为 REPEATABLE-READ

    事务隔离级别有三个作用域:全局、会话和下一个事务。这种三作用域的实现会导致一些非标准的隔离级别分配语义,如后所述。

    要在启动时设置全局事务隔离级别,请使用--transaction-isolation 服务器选项。

    在运行时,可以直接使用 语句为系统变量SET 赋值 来设置隔离级别,也可以使用语句间接设置。如果 直接设置为包含空格的隔离级别名称,则名称应包含在引号内,空格由破折号代替。例如,使用此 语句设置全局值: transaction_isolationSET TRANSACTIONtransaction_isolationSET

    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系统变量的关系的更多信息,请参阅第 13.3.7 节,“SET TRANSACTION 语句”

  • transaction_prealloc_size

    命令行格式 --transaction-prealloc-size=#
    弃用 8.0.29
    系统变量 transaction_prealloc_size
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 4096
    最小值 1024
    最大值 131072
    单元 字节
    块大小 1024

    每个事务都有一个内存池,各种与事务相关的分配从中获取内存。池的初始大小(以字节为单位)为 transaction_prealloc_size. 对于由于可用内存不足而无法从池中满足的每个分配,池都会增加 transaction_alloc_block_size 字节数。当事务结束时,池被截断为 transaction_prealloc_size字节。通过使其 transaction_prealloc_size足够大以在单个事务中包含所有语句,您可以避免多次malloc()调用。

    从 MySQL 8.0.29 开始, transaction_prealloc_size已弃用;交易内存池的初始大小是固定的,设置这个变量不再有任何影响。(的功能transaction_alloc_block_size 不受此更改的影响。)预计 transaction_prealloc_size将在 MySQL 的未来版本中删除。

  • transaction_read_only

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

    事务访问模式。该值可以是 OFF(读/写;默认值)或 ON(只读)。

    事务访问模式具有三个作用域:全局、会话和下一个事务。这种三作用域的实现会导致一些非标准的访问模式分配语义,如后所述。

    要在启动时设置全局事务访问模式,请使用 --transaction-read-only服务器选项。

    在运行时,可以直接使用 语句为系统变量SET 赋值 来设置访问模式,也可以使用语句间接设置访问模式。例如,使用此 语句设置全局值: transaction_read_onlySET TRANSACTIONSET

    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系统变量的关系的更多信息,请参阅第 13.3.7 节,“SET TRANSACTION 语句”

  • unique_checks

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

    InnoDB如果设置为 1(默认值),将对表中 的二级索引执行唯一性检查。如果设置为 0,则允许存储引擎假定输入数据中不存在重复键。如果您确定您的数据不包含唯一性违规,您可以将其设置为 0 以加快大型表导入到 InnoDB.

    将此变量设置为 0 不需要存储引擎忽略重复键。仍然允许引擎检查它们并在检测到它们时发出重复键错误。

  • updatable_views_with_limit

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

    LIMIT如果更新语句包含子句 ,则当视图不包含基础表中定义的主键的所有列时,此变量控制是否可以对视图进行更新。(此类更新通常由 GUI 工具生成。)更新是一个 UPDATEDELETE语句。此处的主键表示一个PRIMARY KEY, 或一个 UNIQUE索引,其中任何列都不能包含 NULL

    该变量可以有两个值:

    • 1YES:仅发出警告(不是错误消息)。这是默认值。

    • 0NO:禁止更新。

  • use_secondary_engine

    介绍 8.0.13
    系统变量 use_secondary_engine
    范围 会议
    动态的 是的
    SET_VAR提示适用 是的
    类型 枚举
    默认值 ON
    有效值

    OFF

    ON

    FORCED

    以备将来使用。

    是否使用辅助引擎执行查询。

    与 HeatWave 一起使用。请参阅MySQL HeatWave 用户指南

  • validate_password.xxx

    validate_password组件实现了一组名称为 的系统变量 。这些变量会影响该组件的密码测试;请参阅 第 6.4.3.2 节,“密码验证选项和变量”validate_password.xxx

  • version

    服务器的版本号。该值还可能包含一个后缀,表示服务器构建或配置信息。-debug表示服务器是在启用调试支持的情况下构建的。

  • version_comment

    系统变量 version_comment
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳

    CMake配置程序有一个 选项,允许 在COMPILATION_COMMENT_SERVER 构建 MySQL 时指定注释。该变量包含该注释的值。(在 MySQL 8.0.14 之前, version_commentCOMPILATION_COMMENT选项设置。)请参阅 第 2.9.7 节,“MySQL 源配置选项”

  • version_compile_machine

    系统变量 version_compile_machine
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳

    服务器二进制文件的类型。

  • version_compile_os

    系统变量 version_compile_os
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳

    构建 MySQL 的操作系统类型。

  • version_compile_zlib

    系统变量 version_compile_zlib
    范围 全球的
    动态的
    SET_VAR提示适用
    类型 细绳

    内置zlib 库的版本。

  • wait_timeout

    命令行格式 --wait-timeout=#
    系统变量 wait_timeout
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 整数
    默认值 28800
    最小值 1
    最大值 (Windows) 2147483
    最大值(其他) 31536000
    单元

    服务器在关闭非交互式连接之前等待活动的秒数。

    在线程启动时,会话 值从全局值或 全局值wait_timeout初始化 ,具体取决于客户端的类型(由 connect 选项 定义)。另见。 wait_timeoutinteractive_timeoutCLIENT_INTERACTIVEmysql_real_connect()interactive_timeout

  • warning_count

    由生成消息的最后一条语句产生的错误、警告和注释的数量。该变量是只读的。请参阅第 13.7.7.42 节,“显示警告声明”

  • windowing_use_high_precision

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

    是否在不损失精度的情况下计算窗口操作。请参阅第 8.2.1.21 节,“窗口函数优化”

  • xa_detach_on_prepare

    命令行格式 --xa-detach-on-prepare[={OFF|ON}]
    介绍 8.0.29
    系统变量 xa_detach_on_prepare
    范围 全局,会话
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    当设置为ON(已启用)时,所有 XA 事务都作为 的一部分从连接(会话)中分离(断开连接) XA PREPARE。这意味着 XA 事务可以由另一个连接提交或回滚,即使原始连接尚未终止,并且此连接可以启动新事务。

    临时表不能在分离的 XA 事务中使用。

    当这是OFF(禁用)时,XA 事务与同一连接严格关联,直到会话断开连接。建议您允许启用它(默认行为)以进行复制。

    有关详细信息,请参阅第 13.3.8.2 节,“XA 事务状态”