文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


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

7.1.8 服务器系统变量

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

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

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

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

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

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

本节介绍每个系统变量。有关系统变量汇总表,请参阅 第 7.1.5 节“服务器系统变量参考”。有关操作系统变量的更多信息,请参阅 第 7.1.9 节“使用系统变量”

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

注意

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

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

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

注意

某些系统变量描述包括块大小,在这种情况下,如果不是所述块大小的整数倍的值将被向下舍入到下一个最接近的块大小的倍数,然后再由服务器存储,即 FLOOR() * 块大小

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

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

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

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

  • activate_all_roles_on_login

    命令行格式 --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=地址
    系统变量 admin_address
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • admin_port

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

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

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

  • admin_ssl_ca

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

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

  • admin_ssl_capath

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

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

  • admin_ssl_cert

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

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

  • admin_ssl_cipher

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

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

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

    • ECDHE-ECDSA-AES128-GCM-SHA256

    • ECDHE-ECDSA-AES256-GCM-SHA384

    • ECDHE-RSA-AES128-GCM-SHA256

    • ECDHE-RSA-AES256-GCM-SHA384

    • ECDHE-ECDSA-CHACHA20-POLY1305

    • ECDHE-RSA-CHACHA20-POLY1305

    • ECDHE-ECDSA-AES256-CCM

    • ECDHE-ECDSA-AES128-CCM

    • DHE-RSA-AES128-GCM-SHA256

    • DHE-RSA-AES256-GCM-SHA384

    • DHE-RSA-AES256-CCM

    • DHE-RSA-AES128-CCM

    • DHE-RSA-CHACHA20-POLY1305

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

  • admin_ssl_crl

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

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

  • admin_ssl_crlpath

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

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

  • admin_ssl_key

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

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

  • admin_tls_ciphersuites

    命令行格式 --admin-tls-ciphersuites=密码套件列表
    系统变量 admin_tls_ciphersuites
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL

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

    该值是由此处列出的密码套件名称组成的列表,以冒号分隔,可以为空或包含多个名称。

    • TLS_AES_128_GCM_SHA256

    • TLS_AES_256_GCM_SHA384

    • TLS_CHACHA20_POLY1305_SHA256

    • TLS_AES_128_CCM_SHA256

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

  • admin_tls_version

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

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

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

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

  • authentication_policy

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

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

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

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

    • authentication_policy 确定未明确命名插件的身份验证规范的默认身份验证插件。

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

    注意

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

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

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

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

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

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

      • authentication_policy = 'caching_sha2_password, sha256_password'

      • authentication_policy = 'caching_sha2_password, authentication_webauthn, sha256_password'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    表 7.4 authentication_policy 值示例

    authentication_policy 值 有效策略
    '*' '*'
    '*,*' 仅允许创建或更改具有一种因素的帐户。
    '*,*,*' '*,*'
    '*,' 仅允许创建或更改具有两种因素的帐户。
    '*,,' '*,*,*'
    '*,*,' 仅允许创建或更改具有三种因素的帐户。
    '*,' 允许创建或更改具有一种或两种因素的帐户。
    '*,*,' 允许使用两个或三个因素创建或更改帐户,其中第一个因素必须是指定的插件。
    auth_plugin,’ 允许使用一个或两个因素创建或更改帐户,其中第一个因素必须是指定的插件。
    auth_plugin,auth_plugin,auth_plugin 允许使用三个因素创建或更改帐户,其中这些因素必须使用指定的插件。

  • authentication_windows_log_level

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

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

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

    描述
    0 无日志记录
    1 仅记录错误消息
    2 记录级别 1 消息和警告消息
    3 记录级别 2 消息和信息性注释
    4 记录级别 3 消息和调试消息
  • authentication_windows_use_principal_name

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

    仅当启用了 authentication_windows Windows 身份验证插件时,此变量才可用。请参阅 第 8.4.1.5 节“Windows 可插拔身份验证”

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

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

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

  • autocommit

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

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

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

    [mysqld]
    autocommit=0
  • automatic_sp_privileges

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

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

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

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

    另请参阅 第 27.2.2 节“存储过程和 MySQL 权限”

  • auto_generate_certs

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

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

    在启动时,如果启用了 auto_generate_certs 系统变量并且数据目录中缺少服务器端 SSL 文件,则服务器会在数据目录中自动生成服务器端和客户端 SSL 证书和密钥文件。在这些情况下,始终会生成这些证书,而不管任何其他 TLS 选项的值如何。证书和密钥文件允许使用 SSL 进行安全的客户端连接;请参阅 第 8.3.1 节“将 MySQL 配置为使用加密连接”

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

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

  • back_log

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

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

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

    默认值为 max_connections 的值,这允许允许的积压量根据允许的最大连接数进行调整。

  • basedir

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

    MySQL 安装基目录的路径。

  • big_tables

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

    如果启用,服务器会将所有临时表存储在磁盘上,而不是存储在内存中。这可以防止 SELECT 操作(需要大型临时表)出现大多数 tbl_name 已满 错误,但也会降低内存表足以满足的查询速度。

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

  • bind_address

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    示例

    • bind_address=*

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

    • bind_address=198.51.100.20

      服务器仅侦听 198.51.100.20 IPv4 地址。

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

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

    • bind_address=198.51.100.20,*

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

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

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

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

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

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

  • block_encryption_mode

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

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

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

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

    SET block_encryption_mode = 'aes-256-cbc';

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

  • build_id

    系统变量 build_id
    作用域 全局
    动态
    SET_VAR 提示适用
    特定于平台 Linux

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

    除 Linux 以外的平台不支持 build_id

  • bulk_insert_buffer_size

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

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

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

  • caching_sha2_password_digest_rounds

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

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

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

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

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

  • caching_sha2_password_auto_generate_rsa_keys

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

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

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

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

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

  • caching_sha2_password_private_key_path

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

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

    重要

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

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

  • caching_sha2_password_public_key_path

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

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

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

  • character_set_client

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

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

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

  • character_set_connection

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

    用于指定没有字符集介绍器的文字以及数字到字符串转换的字符集。有关介绍器的更多信息,请参阅第 12.3.8 节,“字符集介绍器”

  • character_set_database

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

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

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

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

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

  • character_set_filesystem

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

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

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

  • character_set_results

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

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

  • character_set_server

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

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

  • character_set_system

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

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

  • character_sets_dir

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

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

  • check_proxy_users

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

    某些身份验证插件会自行实现代理用户映射(例如,PAM 和 Windows 身份验证插件)。其他身份验证插件默认情况下不支持代理用户。sha256_password 可以请求 MySQL 服务器本身根据授予的代理权限映射代理用户。

    如果启用了 check_proxy_users 系统变量,则服务器会为任何发出此类请求的身份验证插件执行代理用户映射。要利用服务器代理用户映射对 sha256_password 插件的支持,您必须启用 sha256_password_proxy_users

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

  • collation_connection

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

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

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

  • collation_database

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

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

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

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

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

  • collation_server

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

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

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

  • completion_type

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

    NO_CHAIN

    CHAIN

    RELEASE

    0

    1

    2

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

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

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

  • component_scheduler.enabled

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

    如果在启动时设置为 OFF,则后台线程不会启动。仍然可以安排任务,但在启用 component_scheduler 之前,这些任务不会运行。如果在启动时设置为 ON,则组件将完全运行。

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

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

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

  • concurrent_insert

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

    NEVER

    AUTO

    ALWAYS

    0

    1

    2

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

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

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

    如果使用 --skip-new 启动 mysqld,则 concurrent_insert 将设置为 NEVER

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

  • connect_timeout

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

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

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

  • connection_memory_chunk_size

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

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

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

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

  • connection_memory_limit

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

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

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

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

  • core_file

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

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

  • create_admin_listener_thread

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

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

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

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

  • cte_max_recursion_depth

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

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

  • datadir

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

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

  • debug

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

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

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

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

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

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

  • debug_sync

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

    此变量是调试同步工具的用户界面。使用调试同步需要使用 -DWITH_DEBUG=ON CMake 选项配置 MySQL(请参阅 第 2.8.7 节“MySQL 源配置选项”);否则,此系统变量不可用。

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

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

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

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

  • default_collation_for_utf8mb4

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

    utf8mb4_0900_ai_ci

    utf8mb4_general_ci

    重要

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

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

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

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

  • default_password_lifetime

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

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

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

  • default_storage_engine

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

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

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

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

  • default_table_encryption

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

    定义在创建架构和通用表空间时,如果没有指定 ENCRYPTION 子句,则应用于它们的默认加密设置。

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

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

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

    有关更多信息,请参见 为架构和通用表空间定义加密默认值

  • default_tmp_storage_engine

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

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

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

  • default_week_format

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

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

  • delay_key_write

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

    OFF

    ON

    ALL

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

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

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

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

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

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

    警告

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

  • delayed_insert_limit

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

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

  • delayed_insert_timeout

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

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

  • delayed_queue_size

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

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

  • disabled_storage_engines

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

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

    [mysqld]
    disabled_storage_engines="MyISAM,FEDERATED"

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

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

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

    如果使用以下任一选项启动服务器,则 disabled_storage_engines 将被禁用并且不起作用:--initialize--initialize-insecure--skip-grant-tables

  • disconnect_on_expired_password

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

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

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

  • div_precision_increment

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

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

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

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

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

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

    可以参考 dragnet.Status 状态变量来确定对 dragnet.log_error_filter_rules 的最新分配结果。

  • enterprise_encryption.maximum_rsa_key_size

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

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

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

  • enterprise_encryption.rsa_support_legacy_padding

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

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

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

  • end_markers_in_json

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

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

  • eq_range_index_dive_limit

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

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

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

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

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

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

  • error_count

    导致最后一个生成消息的语句出错的次数。此变量为只读变量。请参阅第 15.7.7.18 节“SHOW ERRORS 语句”

  • event_scheduler

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

    ON

    OFF

    DISABLED

    此变量用于启用或禁用事件调度程序,并启动或停止事件调度程序。可能的状态值为 ONOFFDISABLED。关闭事件调度程序与禁用事件调度程序不同,后者需要将状态设置为 DISABLED第 27.5.2 节“事件调度程序配置”中更详细地讨论了此变量及其对事件调度程序操作的影响。

  • explain_format

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

    TRADITIONAL(默认值)

    JSON

    TREE

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

    • TRADITIONAL:使用 MySQL 的传统基于表的输出,就像已在 EXPLAIN 语句中指定了 FORMAT=TRADITIONAL 一样。这是该变量的默认值。同时还支持使用 DEFAULT 作为 TRADITIONAL 的同义词,并且其作用完全相同。

      注意

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

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

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

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

    将格式说明符与 EXPLAINEXPLAIN ANALYZE 一起使用将覆盖 explain_format 的任何设置。

    EXPLAIN 语句用于显示有关表列的信息时,explain_format 系统变量对此语句的输出无效。

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

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

  • explain_json_format_version

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

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

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

  • explicit_defaults_for_timestamp

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

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

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

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

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

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

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

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

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

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

    • 未显式声明为 NOT NULL 属性的 TIMESTAMP 列会自动声明为 NULL 属性,并允许使用 NULL 值。将 NULL 值赋给这样的列会将其设置为 NULL,而不是当前时间戳。

    • 声明为 NOT NULL 属性的 TIMESTAMP 列不允许使用 NULL 值。对于为这种列指定 NULL 的插入操作,如果启用了严格 SQL 模式,则单行插入会发生错误;如果禁用了严格 SQL 模式,则多行插入会插入 '0000-00-00 00:00:00'。在任何情况下,将 NULL 值赋给该列都不会将其设置为当前时间戳。

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

    • 任何 TIMESTAMP 列都不会自动声明为 DEFAULT CURRENT_TIMESTAMPON 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 本身已被弃用,因为它唯一的用途是允许控制将在未来 MySQL 版本中删除的已弃用 TIMESTAMP 行为。当删除这些行为时,预计 explicit_defaults_for_timestamp 也会被删除。

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

  • external_user

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

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

  • flush

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

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

    注意

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

  • flush_time

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

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

    注意

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

  • foreign_key_checks

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

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

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

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

    注意

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

    即使在 foreign_key_checks=0 的情况下,也不允许删除外键约束所需的索引。必须先删除外键约束,然后才能删除索引。

  • ft_boolean_syntax

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

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

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

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

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

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

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

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

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

  • ft_max_word_len

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

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

    注意

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

  • ft_min_word_len

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

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

    注意

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

  • ft_query_expansion_limit

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

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

  • ft_stopword_file

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

    从中读取停用词列表以对 MyISAM 表进行全文搜索的文件。除非给出绝对路径名来指定其他目录,否则服务器会在数据目录中查找该文件。将使用文件中的所有单词; 会考虑注释。默认情况下,将使用内置的停用词列表(在 storage/myisam/ft_static.c 文件中定义)。将此变量设置为空字符串 ('') 将禁用停用词过滤。另请参阅 第 14.9.4 节“全文停用词”

    注意

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

  • general_log

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

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

  • general_log_file

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

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

  • generated_random_password_length

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

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

  • global_connection_memory_limit

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

    设置所有用户连接可使用的内存总量;也就是说,Global_connection_memory 不应超过此数量。任何时候超过此数量,来自普通用户的所有查询(包括任何当前正在运行的查询)都将被拒绝,并显示 ER_GLOBAL_CONN_LIMIT 错误。

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

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

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

  • global_connection_memory_tracking

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

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

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

  • group_concat_max_len

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

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

  • have_compress

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

  • have_dynamic_loading

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

  • have_geometry

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

  • have_profiling

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

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

  • have_query_cache

    have_query_cache 已弃用,其值始终为 NO,预计在未来的 MySQL 版本中会被删除。

  • have_rtree_keys

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

  • have_statement_timeout

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

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

  • have_symlink

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

    此变量在 Windows 上没有意义。

    注意

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

  • histogram_generation_max_mem_size

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

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

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

  • host_cache_size

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

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

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

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

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

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

  • hostname

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

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

  • identity

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

  • init_connect

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

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

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

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

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

  • information_schema_stats_expiry

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

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

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

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

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

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

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

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

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

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

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

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

  • init_file

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

    如果指定,此变量将命名一个文件,该文件包含要在启动过程中读取和执行的 SQL 语句。 此文件中语句的可接受格式支持以下结构

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

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

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

    • 多行语句。

    • # 字符到行尾的注释。

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

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

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

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

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

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

  • innodb_xxx

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

  • insert_id

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

  • interactive_timeout

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

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

  • internal_tmp_mem_storage_engine

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

    MEMORY

    TempTable

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

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

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

  • join_buffer_size

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

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

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

    除非使用块嵌循环或批处理键访问算法,否则将缓冲区设置为大于保存每个匹配行所需的大小不会有任何好处,并且所有连接都至少分配最小大小,因此在全局将此变量设置为较大值时请务必小心。 最好保持全局设置较小,并且仅在执行大型连接的会话中将会话设置更改为较大值,或者使用 SET_VAR 优化器提示根据每个查询更改设置(请参阅第 10.9.3 节“优化器提示”)。 如果全局大小大于大多数使用它的查询所需的大小,则内存分配时间可能会导致性能大幅下降。

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

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

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

  • keep_files_on_create

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

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

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

  • key_buffer_size

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

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

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

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

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

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

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

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

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

    1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)

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

    可以创建多个 MyISAM 键缓存。4GB 的大小限制分别适用于每个缓存,而不是作为一个组。请参阅 第 10.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。请参阅 第 10.10.2 节“MyISAM 键缓存”

  • key_cache_block_size

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

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

  • key_cache_division_limit

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

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

  • large_files_support

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

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

  • large_pages

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

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

  • large_page_size

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

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

  • last_insert_id

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

  • lc_messages

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

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

  • lc_messages_dir

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

    错误消息所在的目录。服务器将该值与 lc_messages 的值一起使用,以生成错误消息文件的位置。请参阅 第 12.12 节“设置错误消息语言”

  • lc_time_names

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

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

  • license

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

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

  • local_infile

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

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

    要明确导致服务器拒绝或允许 LOAD DATA LOCAL 语句(无论客户端程序和库是在构建时还是运行时配置的),请分别在禁用或启用 local_infile 的情况下启动 mysqld。也可以在运行时设置 local_infile。有关更多信息,请参阅 第 8.1.6 节“LOAD DATA LOCAL 的安全注意事项”

  • lock_wait_timeout

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

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

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

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

    超时值分别适用于每次元数据锁尝试。一个给定的语句可能需要多个锁,因此该语句可能会阻塞超过 lock_wait_timeout 值的时间,然后才会报告超时错误。发生锁超时时,将报告 ER_LOCK_WAIT_TIMEOUT

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

  • locked_in_memory

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

    是否使用 mysqld 通过 --memlock 锁定在内存中。

  • log_error

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

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

  • log_error_services

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

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

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

  • log_error_suppression_list

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

    log_error_suppression_list 系统变量适用于发送到错误日志的事件,并指定当事件以 WARNINGINFORMATION 优先级发生时要抑制哪些事件。例如,如果特定类型的警告被认为是错误日志中不需要的噪音,因为它经常发生但不重要,则可以抑制它。此变量会影响由默认启用的 log_filter_internal 错误日志过滤器组件执行的过滤(请参阅 第 7.5.3 节“错误日志组件”)。如果禁用 log_filter_internal,则 log_error_suppression_list 无效。

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

    ER_SERVER_SHUTDOWN_COMPLETE
    MY-000031
    000031
    MY-31
    31

    为了提高可读性和可移植性,符号值优于数值。有关允许的错误符号和数字的信息,请参阅 MySQL 9.0 错误消息参考

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

  • log_error_verbosity

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

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

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

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

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

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

  • log_output

    命令行格式 --log-output=名称
    系统变量 log_output
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 设置
    默认值 文件
    有效值

    表格

    文件

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

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

  • log_queries_not_using_indexes

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

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

  • log_raw

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

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

  • log_slow_admin_statements

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

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

  • log_slow_extra

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

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

  • log_timestamps

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

    UTC

    系统

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

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

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

  • log_throttle_queries_not_using_indexes

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

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

  • long_query_time

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

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

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

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

  • low_priority_updates

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

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

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

  • lower_case_file_system

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

    此变量描述数据目录所在文件系统上文件名的区分大小写。 OFF 表示文件名区分大小写,ON 表示文件名不区分大小写。此变量为只读变量,因为它反映文件系统属性,并且设置它对文件系统没有任何影响。

  • lower_case_table_names

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    无法使用 REVOKE 撤消 mandatory_roles 值中命名的角色,也无法使用 DROP ROLEDROP USER 删除它们。

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

    与显式授予的角色一样,必需角色在激活之前不会生效(请参阅 激活角色)。在登录时,如果启用了 activate_all_roles_on_login 系统变量,则所有授予的角色都会进行角色激活;否则,或者对于设置为默认角色的角色,也会进行角色激活。在运行时,SET ROLE 会激活角色。

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

    SHOW GRANTS 根据 第 15.7.7.22 节“SHOW GRANTS 语句” 中描述的规则显示必需角色。

  • max_allowed_packet

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

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

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

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

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

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

  • max_connect_errors

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

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

  • max_connections

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

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

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

  • max_delayed_threads

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

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

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

  • max_digest_length

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

    每个会话为计算规范化语句摘要而保留的最大内存字节数。如果在摘要计算期间使用了这么多空间,则会发生截断:不会收集来自已解析语句的更多标记,也不会将其计入其摘要值。如果仅在解析了这么多字节的标记后才不同的语句会生成相同的规范化语句摘要,并且在比较或汇总摘要统计信息时将被视为相同。

    警告

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

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

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

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

  • max_error_count

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

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

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

  • max_execution_time

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

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

    max_execution_time 的应用方式如下

  • max_heap_table_size

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

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

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

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

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

  • max_insert_delayed_threads

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

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

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

  • max_join_size

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

    这表示对联接对基表进行的行访问的最大数量的限制。如果服务器的估计表明必须从基表中读取的行数大于 max_join_size,则该语句将被拒绝并返回错误。

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

  • max_length_for_sort_data

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

    此变量已弃用,在 MySQL 9.0 中无效。

  • max_points_in_geometry

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

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

  • max_prepared_stmt_count

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

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

  • max_seeks_for_key

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

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

  • max_sort_length

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

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

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

  • max_sp_recursion_depth

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

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

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

  • max_user_connections

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

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

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

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

  • max_write_lock_count

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

    在此数量的写锁之后,允许在两者之间处理一些挂起的读锁请求。写锁请求的优先级高于读锁请求。但是,如果将 max_write_lock_count 设置为某个较低的值(例如,10),则如果读锁请求已经被传递给 10 个写锁请求,则读锁请求可能优先于挂起的写锁请求。通常不会发生此行为,因为默认情况下 max_write_lock_count 的值非常大。

  • mecab_rc_file

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

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

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

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

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

  • min_examined_row_limit

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

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

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

  • mle.memory_max

    命令行格式 --mle.memory-max=value
    系统变量 mle.memory_max
    作用域 全局
    动态
    SET_VAR 提示适用
    特定于平台 Linux
    类型 整数
    默认值 1300M
    最小值 320M
    最大值 64G
    单位 字节

    确定要分配给 MLE 组件的最大内存量。此变量是动态的,但只能在组件处于非活动状态时设置;您可以通过检查 Mle_status 系统状态变量的值来确定是否属于这种情况。

    增加此变量的值时,您应该记住,您必须为 MySQL 服务器的其他用途(例如缓冲池、连接内存、连接缓冲区等)留出足够的内存。此外,还必须有足够的内存才能使系统进程正常运行。

    重要

    将此值设置为大于系统上可用内存量会导致未定义的行为。

    有关 MLE 组件内存使用情况的更多信息,请参阅 第 7.5.6.3 节 “MLE 组件内存和线程使用情况”

  • myisam_data_pointer_size

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

    以字节为单位的默认指针大小,当未指定 MAX_ROWS 选项时,CREATE TABLE 将使用该大小来创建 MyISAM 表。此变量不能小于 2 或大于 7。默认值为 6。请参阅 第 B.3.2.10 节 “表已满”

  • myisam_max_sort_file_size

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

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

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

  • myisam_mmap_size

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

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

  • myisam_recover_options

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

    OFF

    DEFAULT

    BACKUP

    FORCE

    QUICK

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

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

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

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

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

  • myisam_sort_buffer_size

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

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

  • myisam_stats_method

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

    nulls_unequal

    nulls_equal

    nulls_ignored

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

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

  • myisam_use_mmap

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

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

  • named_pipe

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

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

  • named_pipe_full_access_group

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

    空字符串

    有效的 Windows 本地组名

    *everyone*

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

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

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

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

  • net_buffer_length

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

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

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

    此变量的会话值为只读。

  • net_read_timeout

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

    在中止读取之前,等待从连接接收更多数据的秒数。当服务器从客户端读取数据时,net_read_timeout 是控制何时中止的超时值。当服务器向客户端写入数据时,net_write_timeout 是控制何时中止的超时值。另请参阅 replica_net_timeout

  • net_retry_count

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

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

  • net_write_timeout

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

    在中止写入之前,等待将块写入连接的秒数。另请参阅 net_read_timeout

  • ngram_token_size

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

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

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

  • offline_mode

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

    在离线模式下,MySQL 实例会断开客户端用户的连接(除非他们具有相关权限),并且不允许他们启动新连接。被拒绝访问的客户端会收到错误消息。确切的错误和错误消息确定如下

    1. 服务器尝试获取附加到 offline_mode 的名为 reason 的属性的值;这等效于类似于以下查询的结果

      SELECT ATTR_VALUE INTO @sreason 
      FROM performance_schema.global_variable_attributes
      WHERE VARIABLE_NAME='offline_mode' AND ATTR_NAME='reason';
    2. 如果 @sreason 不为 NULL,则服务器会尝试获取上次设置 offline_mode 系统变量的时间;这等效于以下查询

      SELECT SET_TIME INTO @stime 
      FROM performance.schema_variables_info
      WHERE VARIABLE_NAME='offline_mode';

      • 如果 @stime 不为 NULL,则服务器会引发 ER_SERVER_OFFLINE_MODE_REASON,并打印以下错误消息

        The server is currently in offline mode since @stime, reason: @sreason
      • 如果 @stimeNULL,则服务器会引发 ER_SERVER_OFFLINE_MODE 并打印消息 服务器当前处于离线模式。

    3. 如果 @sreason 为空,则服务器会获取上次设置 offline_mode 的时间以及设置它的用户的名称;这等效于此处显示的查询

      SELECT SET_TIME, SET_USER INTO @stime, @suser 
      FROM performance.schema_variables_info 
      WHERE VARIABLE_NAME='offline_mode';

      • 如果 @stime@suser 都不为 NULL,则服务器会引发 ER_SERVER_OFFLINE_MODE_USER 并打印此处显示的错误消息

        The server is currently in offline mode since @stime, set by user @suser
      • 如果 @suser@stime 中的任何一个或两者都为 NULL,则服务器会引发 ER_SERVER_OFFLINE_MODE 并打印之前针对此错误显示的文本。

    有关此处使用的 Performance Schema 表的更多信息,请参阅 第 29.12.14.1 节,“Performance Schema global_variable_attributes 表”,以及 第 29.12.14.3 节,“Performance Schema variables_info 表”

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

    离线模式具有以下特征

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

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

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

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

  • old_alter_table

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

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

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

  • open_files_limit

    命令行格式 --open-files-limit=#
    系统变量 open_files_limit
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 5000,可能进行调整
    最小值 0
    最大值 平台依赖

    操作系统可供 mysqld 使用的文件描述符数量

    • 在启动时,mysqld 会使用 setrlimit() 预留描述符,使用通过直接设置此变量或使用 --open-files-limit 选项传递给 mysqld_safe 的值。如果 mysqld 产生错误 打开文件过多,请尝试增加 open_files_limit 的值。在内部,此变量的最大值为最大无符号整数值,但实际最大值取决于平台。

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

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

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

      仅在 Windows 上,会将 2048(C 运行时库文件描述符最大值)添加到此数字中。这总共为 10209,同样使用指示的系统变量的默认值。

    • max_connections * 5

    • 操作系统限制。

    服务器尝试使用这些值中的最大值来获取文件描述符的数量,并限制为最大无符号整数值。如果无法获取这么多描述符,则服务器会尝试获取系统允许的最大数量。

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

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

  • optimizer_prune_level

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

    控制在查询优化期间应用的启发式算法,以便从优化器搜索空间中删除不太可行的部分计划。值为 0 将禁用启发式算法,以便优化器执行穷举搜索。值为 1 会导致优化器根据中间计划检索的行数来修剪计划。

  • optimizer_search_depth

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

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

  • optimizer_switch

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

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_condition_pushdown={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    prefer_ordering_index={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    subquery_to_derived={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    prefer_ordering_index={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    subquery_to_derived={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

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

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

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

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

  • optimizer_trace

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

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

  • optimizer_trace_features

    命令行格式 --optimizer-trace-features=值
    系统变量 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

    Performance Schema 系统变量列在第 29.15 节“Performance Schema 系统变量”中。这些变量可用于配置 Performance Schema 操作。

  • parser_max_mem_size

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

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

  • partial_revokes

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

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

    ON(如果存在部分撤销)

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

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

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

    注意

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

    此外,不建议在授权中使用 _% 作为通配符,并且您应该预料到在未来版本的 MySQL 中将删除对它们的支 持。

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

  • password_history

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

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

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

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

  • password_require_current

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

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

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

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

  • password_reuse_interval

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

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

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

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

  • persisted_globals_load

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

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

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

  • persist_only_admin_x509_subject

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

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

    persist_only_admin_x509_subject 系统变量指定用户必须拥有的 SSL 证书 X.509 主题值,才能持久化持久性受限的系统变量。默认值为字符串,这将禁用主题检查,以便任何用户都无法持久化持久性受限的系统变量。

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

  • persist_sensitive_variables_in_plaintext

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

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

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

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

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

  • pid_file

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

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

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

  • plugin_dir

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

    插件目录的路径名。

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

  • port

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

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

  • preload_buffer_size

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

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

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

  • print_identified_with_as_hex

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

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

  • profiling

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

    此变量已弃用;预计在未来的 MySQL 版本中会被移除。

  • profiling_history_size

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

    此变量已弃用;预计在未来的 MySQL 版本中会被移除。

  • protocol_compression_algorithms

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

    zlib

    zstd

    uncompressed

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

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

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

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

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

    • uncompressed:允许未压缩的连接。如果此算法名称未包含在 protocol_compression_algorithms 值中,则服务器不允许未压缩的连接。它只允许使用该值中指定的任何其他算法的压缩连接,并且不会回退到未压缩的连接。

    zlib,zstd,uncompressed 的默认值表示服务器允许所有压缩算法。

    有关更多信息,请参见第 6.2.8 节,“连接压缩控制”

  • protocol_version

    系统变量 protocol_version
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 10
    最小值 0
    最大值 4294967295

    MySQL 服务器使用的客户端/服务器协议版本。

  • proxy_user

    系统变量 proxy_user
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 字符串

    如果当前客户端是另一个用户的代理,则此变量是代理用户帐户名。否则,此变量为 NULL。请参见第 8.2.19 节,“代理用户”

  • pseudo_replica_mode

    系统变量 pseudo_replica_mode
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 布尔值

    pseudo_replica_mode 供服务器内部使用。它有助于正确处理源自比当前处理它们的服务器更旧或更新的服务器上的事务。mysqlbinlog 在执行任何 SQL 语句之前将 pseudo_replica_mode 的值设置为 true。

    设置 pseudo_replica_mode 的会话值是一个受限操作。会话用户必须具有 REPLICATION_APPLIER 权限(请参见第 19.3.3 节,“复制权限检查”),或具有设置受限会话变量的足够权限(请参见第 7.1.9.1 节,“系统变量权限”)。但是,请注意,该变量并非供用户设置;它由复制基础结构自动设置。

    pseudo_replica_mode 对已准备好的 XA 事务的处理有以下影响,这些事务可以附加到处理会话或从处理会话分离(默认情况下,发出 XA START 的会话)

    • 如果为 true,并且处理会话已执行内部使用 BINLOG 语句,则 XA 事务会在事务的第一部分(直至 XA PREPARE)完成后立即从会话分离,以便任何具有 XA_RECOVER_ADMIN 权限的会话都可以提交或回滚它们。

    • 如果为 false,则 XA 事务将保持附加到处理会话,直到该会话处于活动状态,在此期间,其他任何会话都无法提交该事务。仅当会话断开连接或服务器重新启动时,才会分离已准备好的事务。

    pseudo_replica_modeoriginal_commit_timestamp 复制延迟时间戳和 original_server_version 系统变量有以下影响

    • 如果为 true,则假定未显式设置 original_commit_timestamporiginal_server_version 的事务源自另一个未知服务器,因此值 0(表示未知)将分配给时间戳和系统变量。

    • 如果为 false,则假定未显式设置 original_commit_timestamporiginal_server_version 的事务源自当前服务器,因此当前时间戳和当前服务器的版本将分别分配给时间戳和系统变量。

    pseudo_replica_mode 对设置一个或多个不受支持(已删除或未知)SQL 模式的语句的处理有以下影响

    • 如果为 true,则服务器将忽略不受支持的模式并发出警告。

    • 如果为 false,则服务器将使用 ER_UNSUPPORTED_SQL_MODE 拒绝该语句。

  • pseudo_slave_mode

    已弃用
    系统变量 pseudo_slave_mode
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 布尔值

    pseudo_replica_mode 的已弃用别名。

  • pseudo_thread_id

    系统变量 pseudo_thread_id
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2147483647
    最小值 0
    最大值 2147483647

    此变量供服务器内部使用。

    警告

    更改 pseudo_thread_id 系统变量的会话值会更改 CONNECTION_ID() 函数返回的值。

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

  • query_alloc_block_size

    命令行格式 --query-alloc-block-size=#
    系统变量 query_alloc_block_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8192
    最小值 1024
    最大值 4294966272
    单位 字节
    块大小 1024

    为语句解析和执行期间创建的对象分配的内存块大小(以字节为单位)。如果您在内存碎片方面遇到问题,则增加此参数可能会有所帮助。

    字节数的块大小为 1024。对于不是块大小的整数倍的值,MySQL 服务器会在存储系统变量的值之前将其向下舍入到下一个最接近的块大小的倍数。解析器允许使用的值最大为平台的最大无符号整数值(32 位系统为 4294967295 或 232−1,64 位系统为 18446744073709551615 或 264−1),但实际最大值要比块大小低。

  • query_prealloc_size

    命令行格式 --query-prealloc-size=#
    已弃用
    系统变量 query_prealloc_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8192
    最小值 8192
    最大值(64 位平台) 18446744073709550592
    最大值(32 位平台) 4294966272
    单位 字节
    块大小 1024

    query_prealloc_size 已弃用,设置它不会产生任何效果;您应该会在未来版本的 MySQL 中移除它。

  • rand_seed1

    系统变量 rand_seed1
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 不适用
    最小值 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 或 232−1,64 位系统为 18446744073709551615 或 264−1),但实际最大值要比块大小低。

  • range_optimizer_max_mem_size

    命令行格式 --range-optimizer-max-mem-size=#
    系统变量 range_optimizer_max_mem_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8388608
    最小值 0
    最大值 18446744073709551615
    单位 字节

    范围优化器的内存消耗限制。值为 0 表示无限制。如果优化器考虑的执行计划使用范围访问方法,但优化器估计此方法所需的内存量将超过限制,则它将放弃该计划并考虑其他计划。有关更多信息,请参见限制范围优化的内存使用

  • rbr_exec_mode

    系统变量 rbr_exec_mode
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 STRICT
    有效值

    STRICT

    IDEMPOTENT

    mysqlbinlog 内部使用。此变量在 IDEMPOTENT 模式和 STRICT 模式之间切换服务器。IDEMPOTENT 模式会导致在 mysqlbinlog 生成的 BINLOG 语句中禁止重复键和未找到键错误。当在导致与现有数据冲突的服务器上重放基于行的二进制日志时,此模式很有用。当您通过写入以下内容到输出来指定 --idempotent 选项时,mysqlbinlog 会设置此模式

    SET SESSION RBR_EXEC_MODE=IDEMPOTENT;
  • read_buffer_size

    命令行格式 --read-buffer-size=#
    系统变量 read_buffer_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 131072
    最小值 8192
    最大值 2147479552
    单位 字节
    块大小 4096

    MyISAM 表执行顺序扫描的每个线程都会为其扫描的每个表分配一个此大小(以字节为单位)的缓冲区。如果您执行许多顺序扫描,则可能需要增加此值,该值的默认值为 131072。此变量的值应为 4KB 的倍数。如果将其设置为不是 4KB 倍数的值,则在存储该值之前,MySQL 服务器会将其向下舍入到最接近的 4KB 倍数。

    对于除 InnoDB 之外的所有其他存储引擎,此选项还用于以下上下文

    • 用于在对 ORDER BY 的行进行排序时,将索引缓存在临时文件(而不是临时表)中。

    • 用于批量插入分区。

    • 用于缓存嵌套查询的结果。

    read_buffer_size 还以另一种特定于存储引擎的方式使用:确定 MEMORY 表的内存块大小。

    select_into_buffer_size 用于 SELECT INTO DUMPFILESELECT INTO OUTFILE 语句的 I/O 缓存缓冲区。(在所有其他情况下,read_buffer_size 用于 I/O 缓存缓冲区大小。)

    有关不同操作期间内存使用的更多信息,请参见第 10.12.3.1 节,“MySQL 如何使用内存”

  • read_only

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

    如果启用了 read_only 系统变量,则服务器将不允许任何客户端更新,除非该更新来自拥有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)的用户。默认情况下,此变量处于禁用状态。

    服务器还支持 super_read_only 系统变量(默认情况下禁用),该变量具有以下效果

    read_only 启用且 super_read_only 启用时,服务器仍然允许以下操作

    • 如果服务器是副本,则由复制线程执行更新。在复制设置中,在副本服务器上启用 read_only 非常有用,可以确保副本仅接受来自源服务器的更新,而不接受来自客户端的更新。

    • 写入系统表 mysql.gtid_executed,该表存储当前二进制日志文件中不存在的已执行事务的 GTID。

    • 使用 ANALYZE TABLEOPTIMIZE TABLE 语句。只读模式的目的是防止更改表结构或内容。分析和优化不属于此类更改。这意味着,例如,可以使用 mysqlcheck --all-databases --analyze 对只读副本执行一致性检查。

    • 使用 FLUSH STATUS 语句,这些语句始终写入二进制日志。

    • TEMPORARY 表的操作。

    • 插入日志表(mysql.general_logmysql.slow_log);请参阅 第 7.4.1 节“选择通用查询日志和慢查询日志输出目标”

    • 对 Performance Schema 表的操作,例如 UPDATETRUNCATE TABLE 操作。

    复制源服务器上的 read_only 的更改不会复制到副本服务器。可以在副本上独立于源上的设置来设置该值。

    以下条件适用于尝试启用 read_only(包括由于启用 super_read_only 而导致的隐式尝试)

    • 如果您有任何显式锁(使用 LOCK TABLES 获取)或有挂起的事务,则尝试将失败并出现错误。

    • 当其他客户端有任何正在进行的语句、活动的 LOCK TABLES WRITE 或正在进行的提交时,尝试将阻塞,直到锁被释放并且语句和事务结束。在尝试启用 read_only 挂起时,其他客户端对表锁或开始事务的请求也将阻塞,直到 read_only 设置完成。

    • 如果存在持有元数据锁的活动事务,则尝试将阻塞,直到这些事务结束。

    • 可以在您持有全局读锁(使用 FLUSH TABLES WITH READ LOCK 获取)时启用 read_only,因为这不涉及表锁。

  • read_rnd_buffer_size

    命令行格式 --read-rnd-buffer-size=#
    系统变量 read_rnd_buffer_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最小值 1
    最大值 2147483647
    单位 字节

    此变量用于从 MyISAM 表读取数据,以及用于任何存储引擎的多范围读取优化。

    在按键排序操作后按排序顺序从 MyISAM 表读取行时,将通过此缓冲区读取行以避免磁盘查找。请参阅 第 10.2.1.16 节“ORDER BY 优化”。将变量设置为较大的值可以大大提高 ORDER BY 性能。但是,这是为每个客户端分配的缓冲区,因此您不应将全局变量设置为较大的值。相反,仅应在需要运行大型查询的客户端中更改会话变量。

    有关不同操作期间内存使用的更多信息,请参阅 第 10.12.3.1 节“MySQL 如何使用内存”。有关多范围读取优化的信息,请参阅 第 10.2.1.11 节“多范围读取优化”

  • regexp_stack_limit

    命令行格式 --regexp-stack-limit=#
    系统变量 regexp_stack_limit
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8000000
    最小值 0
    最大值 2147483647
    单位 字节

    用于由 REGEXP_LIKE() 和类似函数执行的正则表达式匹配操作的内部堆栈的最大可用内存(以字节为单位)(请参阅 第 14.8.2 节“正则表达式”)。

  • regexp_time_limit

    命令行格式 --regexp-time-limit=#
    系统变量 regexp_time_limit
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 32
    最小值 0
    最大值 2147483647

    REGEXP_LIKE() 和类似函数执行的正则表达式匹配操作的时间限制(请参阅 第 14.8.2 节“正则表达式”)。此限制表示匹配引擎执行的最大允许步数,因此仅间接影响执行时间。通常,它的数量级为毫秒。

  • require_row_format

    系统变量 require_row_format
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量供复制和 mysqlbinlog 在服务器内部使用。它将会话中执行的 DML 事件限制为仅以基于行的二进制日志记录格式编码的事件,并且无法创建临时表。不遵守限制的查询将失败。

    将此系统变量的会话值设置为 ON 不需要任何权限。将此系统变量的会话值设置为 OFF 是受限操作,会话用户必须具有足够的权限才能设置受限会话变量。请参阅 第 7.1.9.1 节“系统变量权限”

  • require_secure_transport

    命令行格式 --require-secure-transport[={OFF|ON}]
    系统变量 require_secure_transport
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    是否要求与服务器的客户端连接使用某种形式的安全传输。启用此变量后,服务器仅允许使用 TLS/SSL 加密的 TCP/IP 连接,或使用套接字文件(在 Unix 上)或共享内存(在 Windows 上)的连接。服务器将拒绝不安全的连接尝试,这些尝试将失败并显示 ER_SECURE_TRANSPORT_REQUIRED 错误。

    此功能是对每个帐户 SSL 要求的补充,后者优先。例如,如果使用 REQUIRE SSL 定义了一个帐户,则启用 require_secure_transport 并不能使用该帐户通过 Unix 套接字文件进行连接。

    服务器可能没有可用的安全传输。例如,如果在启动 Windows 上的服务器时未指定任何 SSL 证书或密钥文件,并且禁用了 shared_memory 系统变量,则该服务器不支持任何安全传输。在这种情况下,尝试在启动时启用 require_secure_transport 将导致服务器向错误日志写入消息并退出。尝试在运行时启用该变量将失败并显示 ER_NO_SECURE_TRANSPORTS_CONFIGURED 错误。

    另请参阅 将加密连接配置为强制

  • restrict_fk_on_non_standard_key

    命令行格式 --restrict-fk-on-non-standard-key
    已弃用
    系统变量 restrict_fk_on_non_standard_key
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    此变量在设置为 ON(默认值)时,将阻止使用非唯一键或部分键作为外键。要在当前会话中允许将此类键用作外键,请使用 SET @@session.restrict_fk_on_non_standard_key=OFF;要在全局范围内允许使用它们,请设置全局变量或使用 --skip-restrict-fk-on-non-standard_key 启动服务器。

    不建议在 CREATE TABLEALTER TABLE 语句中使用非唯一键或部分键作为外键,并且您应该预计在未来版本的 MySQL 中将删除对此功能的支持。当 restrict_fk_on_non_standard_keyON 时,尝试这样做将被拒绝,并显示 ER_FK_NO_INDEX_PARENT;当它为 OFF 时,允许这种用法,但仍会引发 ER_WARN_DEPRECATED_NON_STANDARD_KEY 作为警告。

    restrict_fk_on_non_standard_key 已弃用,并将在未来版本的 MySQL 中删除。设置它会引发弃用警告。

    对 MySQL 复制的影响。 当在主服务器上为非标准键创建外键时(因为 restrict_fk_on_non_standard_keyOFF),无论副本上对此变量的任何设置如何,该语句在副本上都会成功。

  • resultset_metadata

    系统变量 resultset_metadata
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 FULL
    有效值

    FULL

    对于元数据传输可选的连接,客户端设置 resultset_metadata 系统变量来控制服务器是否返回结果集元数据。允许的值为 FULL(返回所有元数据;这是默认值)和 NONE(不返回元数据)。

    对于非元数据可选的连接,将 resultset_metadata 设置为 NONE 会产生错误。

    有关管理结果集元数据传输的详细信息,请参阅 可选结果集元数据

  • secondary_engine_cost_threshold

    系统变量 secondary_engine_cost_threshold
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 数值
    默认值 100000.000000
    最小值 0
    最大值 DBL_MAX(最大双精度值)

    查询卸载到辅助引擎的优化器成本阈值。

    与 HeatWave 一起使用。参见 HeatWave 用户指南

  • schema_definition_cache

    命令行格式 --schema-definition-cache=#
    系统变量 schema_definition_cache
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义可保留在字典对象缓存中的已使用和未使用模式定义对象的数量限制。

    仅当使用中的数量小于 schema_definition_cache 定义的容量时,未使用的模式定义对象才会保留在字典对象缓存中。

    设置为 0 表示模式定义对象仅在使用时才保留在字典对象缓存中。

    有关更多信息,请参见 第 16.4 节,“字典对象缓存”

  • secure_file_priv

    命令行格式 --secure-file-priv=目录名
    系统变量 secure_file_priv
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 平台特定
    有效值

    空字符串

    目录名

    NULL

    此变量用于限制数据导入和导出操作的影响,例如 LOAD DATASELECT ... INTO OUTFILE 语句以及 LOAD_FILE() 函数执行的操作。只有拥有 FILE 权限的用户才允许执行这些操作。

    secure_file_priv 可以按如下方式设置:

    • 如果为空,则该变量无效。这不是一个安全的设置。

    • 如果设置为目录的名称,则服务器会限制导入和导出操作,使其仅适用于该目录中的文件。该目录必须存在;服务器不会创建它。

    • 如果设置为 NULL,则服务器会禁用导入和导出操作。

    默认值是平台特定的,并且取决于 INSTALL_LAYOUT CMake 选项的值,如下表所示。如果要从源代码构建,要显式指定默认的 secure_file_priv 值,请使用 INSTALL_SECURE_FILE_PRIVDIR CMake 选项。

    INSTALL_LAYOUT 默认 secure_file_priv
    STANDALONE
    DEBRPMSVR4 /var/lib/mysql-files
    否则 CMAKE_INSTALL_PREFIX 值下的 mysql-files

    服务器会在启动时检查 secure_file_priv 的值,如果该值不安全,则会向错误日志写入警告。如果非 NULL 值为空,或者该值是数据目录或其子目录,或者所有用户都可以访问该目录,则该值被视为不安全。如果 secure_file_priv 设置为不存在的路径,则服务器会向错误日志写入错误消息并退出。

  • select_into_buffer_size

    命令行格式 --select-into-buffer-size=#
    系统变量 select_into_buffer_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 131072
    最小值 8192
    最大值 2147479552
    单位 字节
    块大小 4096

    当使用 SELECT INTO OUTFILESELECT INTO DUMPFILE 将数据转储到一个或多个文件中以进行备份创建、数据迁移或其他目的时,写入通常可以进行缓冲,然后触发大量写入 I/O 活动到磁盘或其他存储设备,并导致对延迟更敏感的其他查询停滞。您可以使用此变量来控制用于将数据写入存储设备的缓冲区的大小,以确定何时应进行缓冲区同步,从而防止发生上述写入停滞。

    select_into_buffer_size 会覆盖为 read_buffer_size 设置的任何值。(select_into_buffer_sizeread_buffer_size 具有相同的默认值、最大值和最小值。)您还可以使用 select_into_disk_sync_delay 设置一个超时时间,以便在每次同步发生后遵守该超时时间。

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

  • select_into_disk_sync

    命令行格式 --select-into-disk-sync={ON|OFF}
    系统变量 select_into_disk_sync
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF
    有效值

    OFF

    ON

    设置为 ON 时,将使用 select_into_buffer_size 对长时间运行的 SELECT INTO OUTFILESELECT INTO DUMPFILE 语句对输出文件的写入启用缓冲区同步。

  • select_into_disk_sync_delay

    命令行格式 --select-into-disk-sync-delay=#
    系统变量 select_into_disk_sync_delay
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 31536000
    单位 毫秒

    当通过 select_into_disk_sync 启用长时间运行的 SELECT INTO OUTFILESELECT INTO DUMPFILE 语句对输出文件的写入进行缓冲区同步时,此变量会设置同步后的可选延迟(以毫秒为单位)。0(默认值)表示无延迟。

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

  • session_track_gtids

    命令行格式 --session-track-gtids=值
    系统变量 session_track_gtids
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF

    OWN_GTID

    ALL_GTIDS

    控制服务器是否将 GTID 返回给客户端,使客户端能够使用它们来跟踪服务器状态。根据变量值,在执行每个事务结束时,服务器的 GTID 将被捕获并作为确认的一部分返回给客户端。session_track_gtids 的可能值为:

    • OFF:服务器不会将 GTID 返回给客户端。这是默认值。

    • OWN_GTID:服务器返回此客户端自上次确认以来在其当前会话中成功提交的所有事务的 GTID。通常,这是上次提交的事务的单个 GTID,但如果单个客户端请求导致多个事务,则服务器将返回包含所有相关 GTID 的 GTID 集。

    • ALL_GTIDS:服务器返回其 gtid_executed 系统变量的全局值,它在事务成功提交后的某个时间点读取该值。除了刚刚提交的事务的 GTID 之外,此 GTID 集还包括由任何客户端在服务器上提交的所有事务,并且可以包括在确认当前事务时提交的事务之后的提交的事务。

    无法在事务上下文中设置 session_track_gtids

    有关会话状态跟踪的更多信息,请参见 第 7.1.18 节,“服务器对客户端会话状态的跟踪”

  • session_track_schema

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

    控制服务器是否跟踪在当前会话中设置默认模式(数据库)的时间,并通知客户端使模式名称可用。

    如果启用了模式名称跟踪器,则每次设置默认模式时都会发生名称通知,即使新模式名称与旧模式名称相同。

    有关会话状态跟踪的更多信息,请参见 第 7.1.18 节,“服务器对客户端会话状态的跟踪”

  • session_track_state_change

    命令行格式 --session-track-state-change[={OFF|ON}]
    系统变量 session_track_state_change
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    控制服务器是否跟踪当前会话状态的更改,并在状态发生更改时通知客户端。可以报告客户端会话状态的以下属性的更改:

    • 默认模式(数据库)。

    • 系统变量的会话特定值。

    • 用户定义的变量。

    • 临时表。

    • 预处理语句。

    如果启用了会话状态跟踪器,则每次涉及跟踪的会话属性的更改都会发生通知,即使新属性值与旧属性值相同。例如,将用户定义的变量设置为其当前值会导致通知。

    session_track_state_change 变量仅控制何时发生更改的通知,而不控制更改的内容。例如,当设置默认模式或分配跟踪的会话系统变量时,会发生状态更改通知,但通知不包括模式名称或变量值。要接收模式名称或会话系统变量值的通知,请分别使用 session_track_schemasession_track_system_variables 系统变量。

    注意

    session_track_state_change 本身赋值不被视为状态更改,因此不会被报告。但是,如果其名称列在 session_track_system_variables 的值中,则对其进行的任何赋值都会导致新值的通知。

    有关会话状态跟踪的更多信息,请参见 第 7.1.18 节,“服务器对客户端会话状态的跟踪”

  • session_track_system_variables

    命令行格式 --session-track-system-variables=#
    系统变量 session_track_system_variables
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 time_zone、autocommit、character_set_client、character_set_results、character_set_connection

    控制服务器是否跟踪对会话系统变量的赋值,并通知客户端每个已赋值变量的名称和值。变量值是要跟踪其赋值的变量的逗号分隔列表。默认情况下,会为 time_zoneautocommitcharacter_set_clientcharacter_set_resultscharacter_set_connection 启用通知。(后三个变量是受 SET NAMES 影响的变量。)

    要启用显示每个已处理语句的语句 ID,请使用 statement_id 变量。例如:

    mysql>  SET @@SESSION.session_track_system_variables='statement_id'
    mysql>  SELECT 1;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    1 row in set (0.0006 sec)
    Statement ID: 603835

    特殊值 *(星号)使服务器跟踪对所有会话变量的赋值。如果给出,则必须单独指定此值,而无需特定的系统变量名称。此值还启用显示每个成功处理的语句的语句 ID。

    要禁用会话变量赋值的通知,请将 session_track_system_variables 设置为空字符串。

    如果启用了会话系统变量跟踪,则对跟踪的会话变量的所有赋值都会发生通知,即使新值与旧值相同。

    有关会话状态跟踪的更多信息,请参见 第 7.1.18 节,“服务器对客户端会话状态的跟踪”

  • session_track_transaction_info

    命令行格式 --session-track-transaction-info=值
    系统变量 session_track_transaction_info
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF

    STATE

    CHARACTERISTICS

    控制服务器是否跟踪当前会话中事务的状态和特征,并通知客户端使此信息可用。允许使用以下 session_track_transaction_info

    • OFF:禁用事务状态跟踪。这是默认值。

    • STATE:启用事务状态跟踪,但不跟踪特征。状态跟踪使客户端能够确定事务是否正在进行中,以及是否可以在不回滚的情况下将其移动到其他会话。

    • CHARACTERISTICS:启用事务状态跟踪,包括特征跟踪。特征跟踪使客户端能够确定如何在另一个会话中重新启动事务,以便它具有与原始会话相同的特征。以下特征与此相关:

      ISOLATION LEVEL
      READ ONLY
      READ WRITE
      WITH CONSISTENT SNAPSHOT

    为了使客户端能够安全地将事务重新定位到另一个会话,它不仅必须跟踪事务状态,还必须跟踪事务特征。此外,客户端必须跟踪 transaction_isolationtransaction_read_only 系统变量,才能正确确定会话默认值。(要跟踪这些变量,请在 session_track_system_variables 系统变量的值中列出它们。)

    有关会话状态跟踪的更多信息,请参见 第 7.1.18 节,“服务器对客户端会话状态的跟踪”

  • set_operations_buffer_size

    命令行格式 --set-operations-buffer-size=#
    系统变量 set_operations_buffer_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256K
    最小值 16K
    最大值 1 GB

    设置使用哈希表的 INTERSECTEXCEPT 操作的缓冲区大小,当 hash_set_operations 优化器开关为 ON 时。通常,启用哈希优化后,增加此缓冲区的大小可以提高这些操作的性能。

  • sha256_password_auto_generate_rsa_keys

    命令行格式 --sha256-password-auto-generate-rsa-keys[={OFF|ON}]
    已弃用
    系统变量 sha256_password_auto_generate_rsa_keys
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

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

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

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

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

  • sha256_password_private_key_path

    命令行格式 --sha256-password-private-key-path=file_name
    已弃用
    系统变量 sha256_password_private_key_path
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 private_key.pem

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

    重要

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

    有关 sha256_password 的信息,请参阅 第 8.4.1.2 节“SHA-256 可插拔身份验证”

  • sha256_password_proxy_users

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

    此变量控制 sha256_password 内置身份验证插件是否支持代理用户。除非启用了 check_proxy_users 系统变量,否则它不起作用。有关用户代理的信息,请参阅 第 8.2.19 节“代理用户”

  • sha256_password_public_key_path

    命令行格式 --sha256-password-public-key-path=file_name
    已弃用
    系统变量 sha256_password_public_key_path
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 public_key.pem

    此变量的值是 sha256_password 身份验证插件的 RSA 公钥文件的路径名。如果文件名使用相对路径,则相对于服务器数据目录解释。该文件必须采用 PEM 格式。由于此文件存储公钥,因此可以将副本自由分发给客户端用户。(使用 RSA 密码加密连接到服务器时明确指定公钥的客户端必须使用与服务器使用的公钥相同的公钥。)

    有关 sha256_password 的信息,包括有关客户端如何指定 RSA 公钥的信息,请参阅 第 8.4.1.2 节“SHA-256 可插拔身份验证”

  • shared_memory

    命令行格式 --shared-memory[={OFF|ON}]
    系统变量 shared_memory
    作用域 全局
    动态
    SET_VAR 提示适用
    特定于平台 Windows
    类型 布尔值
    默认值 OFF

    (仅限 Windows。)服务器是否允许共享内存连接。

  • shared_memory_base_name

    命令行格式 --shared-memory-base-name=name
    系统变量 shared_memory_base_name
    作用域 全局
    动态
    SET_VAR 提示适用
    特定于平台 Windows
    类型 字符串
    默认值 MYSQL

    (仅限 Windows。)用于共享内存连接的共享内存的名称。这在单个物理机器上运行多个 MySQL 实例时非常有用。默认名称为 MYSQL。名称区分大小写。

    仅当使用 shared_memory 系统变量启动服务器以支持共享内存连接时,此变量才适用。

  • show_create_table_skip_secondary_engine

    命令行格式 --show-create-table-skip-secondary-engine[={OFF|ON}]
    系统变量 show_create_table_skip_secondary_engine
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    启用 show_create_table_skip_secondary_engine 会导致 SECONDARY ENGINE 子句从 SHOW CREATE TABLE 输出和 CREATE TABLE 语句(由 mysqldump 实用程序转储)中排除。

    mysqldump 提供 --show-create-skip-secondary-engine 选项。指定后,它会在转储操作期间启用 show_create_table_skip_secondary_engine 系统变量。

    与 HeatWave 一起使用。参见 HeatWave 用户指南

  • show_create_table_verbosity

    命令行格式 --show-create-table-verbosity[={OFF|ON}]
    系统变量 show_create_table_verbosity
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果行格式是默认格式,则 SHOW CREATE TABLE 通常不会显示 ROW_FORMAT 表选项。启用此变量会导致 SHOW CREATE TABLE 显示 ROW_FORMAT,而不管它是否是默认格式。

  • show_gipk_in_create_table_and_information_schema

    命令行格式 --show-gipk-in-create-table-and-information-schema[={OFF|ON}]
    系统变量 show_gipk_in_create_table_and_information_schema
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    生成的不可见主键是否在 SHOW 语句的输出和信息架构表中可见。当此变量设置为 OFF 时,将不会显示此类键。

    此变量不会被复制。

    有关更多信息,请参阅 第 15.1.20.11 节“生成的不可见主键”

  • skip_external_locking

    命令行格式 --skip-external-locking[={OFF|ON}]
    系统变量 skip_external_locking
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    如果 mysqld 使用外部锁定(系统锁定),则此值为 OFF;如果禁用外部锁定,则此值为 ON。这仅影响 MyISAM 表访问。

    此变量由 --external-locking--skip-external-locking 选项设置。默认情况下,外部锁定处于禁用状态。

    外部锁定仅影响 MyISAM 表访问。有关更多信息,包括可以使用和不能使用它的条件,请参阅 第 10.11.5 节“外部锁定”

  • skip_name_resolve

    命令行格式 --skip-name-resolve[={OFF|ON}]
    系统变量 skip_name_resolve
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    检查客户端连接时是否解析主机名。如果此变量为 OFF,则 mysqld 会在检查客户端连接时解析主机名。如果它为 ON,则 mysqld 仅使用 IP 地址;在这种情况下,授权表中的所有 Host 列值都必须是 IP 地址。请参阅 第 7.1.12.3 节“DNS 查找和主机缓存”

    根据系统的网络配置和帐户的 Host 值,客户端可能需要使用显式 --host 选项进行连接,例如 --host=127.0.0.1--host=::1

    尝试连接到主机 127.0.0.1 通常会解析为 localhost 帐户。但是,如果服务器在启用了 skip_name_resolve 的情况下运行,则此操作将失败。如果您打算这样做,请确保存在可以接受连接的帐户。例如,要能够使用 --host=127.0.0.1--host=::1root 身份连接,请创建以下帐户:

    CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
    CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
  • skip_networking

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

    此变量控制服务器是否允许 TCP/IP 连接。默认情况下,它是禁用的(允许 TCP 连接)。如果启用,则服务器仅允许本地(非 TCP/IP)连接,并且与 mysqld 的所有交互都必须使用命名管道或共享内存(在 Windows 上)或 Unix 套接字文件(在 Unix 上)进行。对于仅允许本地客户端的系统,强烈建议使用此选项。请参阅 第 7.1.12.3 节“DNS 查找和主机缓存”

    因为使用 --skip-grant-tables 启动服务器会禁用身份验证检查,所以服务器还会通过启用 skip_networking 来禁用远程连接。

  • skip_show_database

    命令行格式 --skip-show-database
    系统变量 skip_show_database
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    这可以防止没有 SHOW DATABASES 权限的人使用 SHOW DATABASES 语句。如果您担心用户能够看到属于其他用户的数据库,这可以提高安全性。其效果取决于 SHOW DATABASES 权限:如果变量值为 ON,则仅允许具有 SHOW DATABASES 权限的用户使用 SHOW DATABASES 语句,并且该语句会显示所有数据库名称。如果值为 OFF,则所有用户都允许使用 SHOW DATABASES,但只会显示用户对其具有 SHOW DATABASES 或其他权限的数据库的名称。

    注意

    因为任何静态全局权限都被视为所有数据库的权限,所以任何静态全局权限都允许用户使用 SHOW DATABASES 或通过检查 INFORMATION_SCHEMASCHEMATA 表来查看所有数据库名称,但已通过部分撤销在数据库级别受到限制的数据库除外。

  • slow_launch_time

    命令行格式 --slow-launch-time=#
    系统变量 slow_launch_time
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2
    最小值 0
    最大值 31536000
    单位

    如果创建线程花费的时间超过此秒数,则服务器会增加 Slow_launch_threads 状态变量。

  • slow_query_log

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

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

    long_query_time 变量的值确定。请参阅 第 7.4.5 节“慢查询日志”

  • slow_query_log_file

    命令行格式 --slow-query-log-file=file_name
    系统变量 slow_query_log_file
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 host_name-slow.log

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

  • socket

    命令行格式 --socket={file_name|pipe_name}
    系统变量 socket
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 (Windows) MySQL
    默认值(其他) /tmp/mysql.sock

    在 Unix 平台上,此变量是用于本地客户端连接的套接字文件的名称。默认值为 /tmp/mysql.sock。(对于某些发行格式,目录可能不同,例如 RPM 的 /var/lib/mysql。)

    在 Windows 上,此变量是用于本地客户端连接的命名管道的名称。默认值为 MySQL(不区分大小写)。

  • sort_buffer_size

    命令行格式 --sort-buffer-size=#
    系统变量 sort_buffer_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最小值 32768
    最大值(Windows) 4294967295
    最大值(其他,64 位平台) 18446744073709551615
    最大值(其他,32 位平台) 4294967295
    单位 字节

    每个必须执行排序的会话都会分配此大小的缓冲区。sort_buffer_size 不是特定于任何存储引擎的,并且以一般方式应用于优化。至少 sort_buffer_size 值必须足够大,以便在排序缓冲区中容纳 15 个元组。此外,增加 max_sort_length 的值可能需要增加 sort_buffer_size 的值。有关更多信息,请参阅 第 10.2.1.16 节“ORDER BY 优化”

    如果您在 SHOW GLOBAL STATUS 输出中看到每秒有很多 Sort_merge_passes,则可以考虑增加 sort_buffer_size 值,以加快无法通过查询优化或改进索引来改进的 ORDER BYGROUP BY 操作的速度。

    优化器会尝试计算出所需的空间大小,但可以分配更多空间,直至达到限制。将其全局设置为大于所需的值会减慢大多数执行排序的查询的速度。最好将其作为会话设置增加,并且仅针对需要更大大小的会话。在 Linux 上,存在 256KB 和 2MB 的阈值,在这些阈值处,较大的值可能会显着减慢内存分配速度,因此您应该考虑将其保持在其中一个值以下。请进行实验以找到适合您的工作负载的最佳值。请参阅 第 B.3.3.5 节“MySQL 存储临时文件的位置”

    sort_buffer_size 的最大允许设置为 4GB-1。64 位平台允许使用更大的值(64 位 Windows 除外,对于 64 位 Windows,较大的值会被截断为 4GB-1 并发出警告)。

  • sql_auto_is_null

    系统变量 sql_auto_is_null
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用了此变量,则在成功插入自动生成的 AUTO_INCREMENT 值的语句之后,您可以通过发出以下形式的语句来查找该值

    SELECT * FROM tbl_name WHERE auto_col IS NULL

    如果该语句返回一行,则返回的值与调用 LAST_INSERT_ID() 函数时相同。有关详细信息(包括多行插入后的返回值),请参阅 第 14.15 节“信息函数”。如果未成功插入任何 AUTO_INCREMENT 值,则 SELECT 语句不返回任何行。

    某些 ODBC 程序(例如 Access)使用通过使用 IS NULL 比较来检索 AUTO_INCREMENT 值的行为。请参阅 获取自动递增值。可以通过将 sql_auto_is_null 设置为 OFF 来禁用此行为。

    sql_auto_is_null 的默认值为 OFF

  • sql_big_selects

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

    如果设置为 OFF,则 MySQL 会中止可能需要很长时间才能执行的 SELECT 语句(即优化器估计其检查的行数超过 max_join_size 值的语句)。这在发出不可取的 WHERE 语句时很有用。新连接的默认值为 ON,它允许所有 SELECT 语句。

    如果将 max_join_size 系统变量设置为 DEFAULT 以外的值,则 sql_big_selects 将设置为 OFF

  • sql_buffer_result

    系统变量 sql_buffer_result
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用,sql_buffer_result 会强制将 SELECT 语句的结果放入临时表中。这有助于 MySQL 尽早释放表锁,并且在将结果发送到客户端需要很长时间的情况下非常有用。默认值为 OFF

  • sql_generate_invisible_primary_key

    命令行格式 --sql-generate-invisible-primary-key[={OFF|ON}]
    系统变量 sql_generate_invisible_primary_key
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此服务器是否向创建的任何没有生成的不可见主键的 InnoDB 表添加生成的不可见主键。

    此变量不会被复制。此外,即使在副本上设置了此变量,也会被复制应用线程忽略;这意味着,默认情况下,副本不会为在源上创建时没有主键的任何复制表生成主键。您可以通过在 CHANGE REPLICATION SOURCE TO 语句中设置 REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE,可以选择指定复制通道,从而使副本为这些表生成不可见主键。

    有关更多信息和示例,请参阅 第 15.1.20.11 节“生成的不可见主键”

  • sql_log_off

    系统变量 sql_log_off
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF
    有效值

    OFF(启用日志记录)

    ON(禁用日志记录)

    此变量控制是否为当前会话禁用常规查询日志记录(假设已启用常规查询日志本身)。默认值为 OFF(即启用日志记录)。要为当前会话禁用或启用常规查询日志记录,请将会话 sql_log_off 变量设置为 ONOFF

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

  • sql_mode

    命令行格式 --sql-mode=name
    系统变量 sql_mode
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 设置
    默认值 ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
    有效值

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    当前服务器 SQL 模式,可以动态设置。有关详细信息,请参阅 第 7.1.11 节“服务器 SQL 模式”

    注意

    MySQL 安装程序可以在安装过程中配置 SQL 模式。

    如果 SQL 模式与默认模式或您期望的模式不同,请在服务器启动时读取的选项文件中检查设置。

  • sql_notes

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

    如果启用(默认),Note 级别的诊断会增加 warning_count,并且服务器会记录它们。如果禁用,Note 诊断不会增加 warning_count,并且服务器不会记录它们。 mysqldump 包含用于禁用此变量的输出,以便重新加载转储文件不会针对不影响重新加载操作完整性的事件生成警告。

  • sql_quote_show_create

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

    如果启用(默认),则服务器会为 SHOW CREATE TABLESHOW CREATE DATABASE 语句的标识符加引号。如果禁用,则禁用加引号。默认情况下启用此选项,以便复制可以处理需要加引号的标识符。请参阅 第 15.7.7.11 节 “SHOW CREATE TABLE 语句”第 15.7.7.7 节 “SHOW CREATE DATABASE 语句”

  • sql_require_primary_key

    命令行格式 --sql-require-primary-key[={OFF|ON}]
    系统变量 sql_require_primary_key
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    创建新表或更改现有表结构的语句是否强制要求表具有主键。

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

    启用此变量有助于避免在基于行的复制中出现表没有主键时可能出现的性能问题。假设一个表没有主键,并且更新或删除操作修改了多行。在复制源服务器上,可以使用单个表扫描执行此操作,但是当使用基于行的复制进行复制时,会导致对副本上要修改的每一行进行表扫描。使用主键时,不会发生这些表扫描。

    sql_require_primary_key 适用于基表和 TEMPORARY 表,并且对其值的更改会复制到副本服务器。该表必须使用可以参与复制的 MySQL 存储引擎。

    启用后,sql_require_primary_key 会产生以下效果:

    • 尝试创建没有主键的新表将失败并报错。这包括 CREATE TABLE ... LIKE。它还包括 CREATE TABLE ... SELECT,除非 CREATE TABLE 部分包含主键定义。

    • 尝试从现有表中删除主键将失败并报错,但允许在同一 ALTER TABLE 语句中删除主键和添加主键。

      即使表还包含 UNIQUE NOT NULL 索引,删除主键也会失败。

    • 尝试导入没有主键的表将失败并报错。

    CHANGE REPLICATION SOURCE TO 语句的 REQUIRE_TABLE_PRIMARY_KEY_CHECK 选项使副本能够选择其自己的主键检查策略。当复制通道的此选项设置为 ON 时,副本在复制操作中始终对 sql_require_primary_key 系统变量使用值 ON,从而需要主键。当此选项设置为 OFF 时,副本在复制操作中始终对 sql_require_primary_key 系统变量使用值 OFF,因此即使源需要主键,也永远不需要主键。当 REQUIRE_TABLE_PRIMARY_KEY_CHECK 选项设置为 STREAM(默认值)时,副本将使用从源复制的每个事务的值。如果 REQUIRE_TABLE_PRIMARY_KEY_CHECK 选项设置为 STREAM,并且复制通道正在使用权限检查,则 PRIVILEGE_CHECKS_USER 帐户需要足够的权限来设置受限会话变量,以便它可以设置 sql_require_primary_key 系统变量的会话值。如果设置为 ONOFF,则该帐户不需要这些权限。有关更多信息,请参阅 第 19.3.3 节 “复制权限检查”

  • sql_safe_updates

    系统变量 sql_safe_updates
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用此变量,则在 WHERE 子句或 LIMIT 子句中未使用键的 UPDATEDELETE 语句会产生错误。这使得捕获未正确使用键并且可能会更改或删除大量行的 UPDATEDELETE 语句成为可能。默认值为 OFF

    对于 mysql 客户端,可以通过使用 --safe-updates 选项启用 sql_safe_updates。有关更多信息,请参阅 使用安全更新模式 (--safe-updates)

  • sql_select_limit

    系统变量 sql_select_limit
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 18446744073709551615
    最小值 0
    最大值 18446744073709551615

    SELECT 语句返回的最大行数。有关更多信息,请参阅 使用安全更新模式 (--safe-updates)

    新连接的默认值是服务器允许的每个表的最大行数。典型的默认值为 (232)−1 或 (264)−1。如果已更改限制,则可以通过分配值 DEFAULT 来恢复默认值。

    如果 SELECT 具有 LIMIT 子句,则 LIMIT 优先于 sql_select_limit 的值。

  • sql_warnings

    系统变量 sql_warnings
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量控制在发生警告时单行 INSERT 语句是否生成信息字符串。默认值为 OFF。将值设置为 ON 以生成信息字符串。

  • ssl_ca

    命令行格式 --ssl-ca=文件名
    系统变量 ssl_ca
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    证书颁发机构 (CA) 证书文件的路径名,采用 PEM 格式。该文件包含受信任的 SSL 证书颁发机构的列表。

    可以在运行时修改此变量,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

  • ssl_capath

    命令行格式 --ssl-capath=目录名
    系统变量 ssl_capath
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 NULL

    包含受信任的 SSL 证书颁发机构 (CA) 证书文件的目录的路径名,采用 PEM 格式。

    可以在运行时修改此变量,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

  • ssl_cert

    命令行格式 --ssl-cert=文件名
    系统变量 ssl_cert
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    服务器 SSL 公钥证书文件的路径名,采用 PEM 格式。

    如果服务器在启动时将 ssl_cert 设置为使用任何受限密码或密码类别的证书,则服务器将在启动时禁用对加密连接的支持。有关密码限制的信息,请参阅 连接密码配置

    可以在运行时修改此变量,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

  • ssl_cipher

    命令行格式 --ssl-cipher=名称
    系统变量 ssl_cipher
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL

    使用 TLSv1.2 的连接允许使用的加密密码列表。如果列表中没有支持的密码,则使用此 TLS 协议的加密连接将无法工作。

    该列表可以包含以下任意值:

    • ECDHE-ECDSA-AES128-GCM-SHA256

    • ECDHE-ECDSA-AES256-GCM-SHA384

    • ECDHE-RSA-AES128-GCM-SHA256

    • ECDHE-RSA-AES256-GCM-SHA384

    • ECDHE-ECDSA-CHACHA20-POLY1305

    • ECDHE-RSA-CHACHA20-POLY1305

    • ECDHE-ECDSA-AES256-CCM

    • ECDHE-ECDSA-AES128-CCM

    • DHE-RSA-AES128-GCM-SHA256

    • DHE-RSA-AES256-GCM-SHA384

    • DHE-RSA-AES256-CCM

    • DHE-RSA-AES128-CCM

    • DHE-RSA-CHACHA20-POLY1305

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

    为了获得最大的可移植性,密码列表应该是一个或多个密码名称的列表,用冒号分隔。以下示例显示了两个用冒号分隔的密码名称:

    [mysqld]
    ssl_cipher="DHE-RSA-AES128-GCM-SHA256:AES128-SHA"

    OpenSSL 支持 OpenSSL 文档中描述的用于指定密码的语法,网址为 https://www.openssl.org/docs/manmaster/man1/ciphers.html

    有关 MySQL 支持的加密密码的信息,请参阅 第 8.3.2 节 “加密连接 TLS 协议和密码”

    可以在运行时修改此变量,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

  • ssl_crl

    命令行格式 --ssl-crl=文件名
    系统变量 ssl_crl
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 NULL

    包含证书吊销列表的文件的路径名,采用 PEM 格式。

    可以在运行时修改此变量,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

  • ssl_crlpath

    命令行格式 --ssl-crlpath=目录名
    系统变量 ssl_crlpath
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 目录名
    默认值 NULL

    包含证书吊销列表文件的目录的路径,采用 PEM 格式。

    可以在运行时修改此变量,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

  • ssl_fips_mode

    命令行格式 --ssl-fips-mode={OFF|ON|STRICT}
    已弃用
    系统变量 ssl_fips_mode
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 OFF
    有效值

    OFF(或 0)

    ON(或 1)

    STRICT(或 2)

    控制是否在服务器端启用 FIPS 模式。ssl_fips_mode 系统变量与其他 ssl_xxx 系统变量的不同之处在于,它不是用于控制服务器是否允许加密连接,而是用于影响允许哪些加密操作。请参阅 第 8.8 节 “FIPS 支持”

    允许使用以下 ssl_fips_mode 值:

    • OFF(或 0):禁用 FIPS 模式。

    • ON(或 1):启用 FIPS 模式。

    • STRICT(或 2):启用“严格”FIPS 模式。

    注意

    如果 OpenSSL FIPS 对象模块不可用,则 ssl_fips_mode 唯一允许的值为 OFF。在这种情况下,在启动时将 ssl_fips_mode 设置为 ONSTRICT 会导致服务器生成错误消息并退出。

    此选项已弃用并设为只读。预计在未来版本的 MySQL 中会被删除。

  • ssl_key

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

    服务器 SSL 私钥文件的路径名,采用 PEM 格式。为了更高的安全性,请使用 RSA 密钥大小至少为 2048 位的证书。

    如果密钥文件受密码保护,服务器会提示用户输入密码。密码必须以交互方式提供;它不能存储在文件中。如果密码不正确,程序会像无法读取密钥一样继续运行。

    可以在运行时修改此变量,以影响服务器在执行 ALTER INSTANCE RELOAD TLS 后或在重新启动后(如果变量值已持久化)为建立的新连接使用的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

  • ssl_session_cache_mode

    命令行格式 --ssl_session_cache_mode={ON|OFF}
    系统变量 ssl_session_cache_mode
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON
    有效值

    ON

    OFF

    控制是否在服务器端启用内存中的会话缓存以及服务器生成的会话票证。默认模式为 ON(启用会话缓存模式)。对 ssl_session_cache_mode 系统变量的更改仅在执行 ALTER INSTANCE RELOAD TLS 语句之后或在变量值持久化后的重启之后才会生效。

    允许使用以下 ssl_session_cache_mode

    • ON:启用会话缓存模式。

    • OFF:禁用会话缓存模式。

    如果此系统变量的值为 OFF,则服务器不会公布其对会话恢复的支持。在 OpenSSL 1.0.x 上运行时,始终会生成会话票证,但当启用 ssl_session_cache_mode 时,这些票证不可用。

    ssl_session_cache_mode 的当前有效值可以使用 Ssl_session_cache_mode 状态变量观察到。

  • ssl_session_cache_timeout

    命令行格式 --ssl_session_cache_timeout
    系统变量 ssl_session_cache_timeout
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 300
    最小值 0
    最大值 84600
    单位

    设置在建立到服务器的新加密连接时允许使用先前会话的时间段,前提是启用了 ssl_session_cache_mode 系统变量并且可以使用先前会话数据。如果会话超时到期,则无法再重用会话。

    默认值为 300 秒,最大值为 84600(或一天的秒数)。对 ssl_session_cache_timeout 系统变量的更改仅在执行 ALTER INSTANCE RELOAD TLS 语句之后或在变量值持久化后的重启之后才会生效。可以通过 Ssl_session_cache_timeout 状态变量观察 ssl_session_cache_timeout 的当前有效值。

  • statement_id

    系统变量 statement_id
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 整数

    当前会话中执行的每个语句都分配有一个序列号。这可以与 session_track_system_variables 系统变量一起使用,以便在 Performance Schema 表(如 events_statements_history 表)中标识此语句。

  • stored_program_cache

    命令行格式 --stored-program-cache=#
    系统变量 stored_program_cache
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 16
    最大值 524288

    为每个连接的缓存存储例程的数量设置一个软上限。此变量的值是根据 MySQL 服务器为存储过程和存储函数分别维护的两个缓存中每个缓存中保存的存储例程的数量来指定的。

    每当执行存储例程时,都会在解析例程中的第一个或顶级语句之前检查此缓存大小;如果相同类型(根据正在执行的存储过程或存储函数)的例程数量超过此变量指定的限制,则会刷新相应的缓存,并释放先前分配给缓存对象的内存。这允许安全地刷新缓存,即使存储例程之间存在依赖关系也是如此。

    存储过程和存储函数缓存与 字典对象缓存 的存储程序定义缓存分区并行存在。存储过程和存储函数缓存是每个连接的,而存储程序定义缓存是共享的。存储过程和存储函数缓存中对象的存在与存储程序定义缓存中对象的存在无关,反之亦然。有关更多信息,请参阅 第 16.4 节“字典对象缓存”

  • stored_program_definition_cache

    命令行格式 --stored-program-definition-cache=#
    系统变量 stored_program_definition_cache
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义可以保存在字典对象缓存中的已使用和未使用存储程序定义对象的數量限制。

    仅当使用中的数量小于 stored_program_definition_cache 定义的容量时,才会将未使用的存储程序定义对象保留在字典对象缓存中。

    设置为 0 表示存储程序定义对象仅在使用时才保留在字典对象缓存中。

    存储程序定义缓存分区与使用 stored_program_cache 选项配置的存储过程和存储函数缓存并行存在。

    stored_program_cache 选项为每个连接的缓存存储过程或函数的数量设置了一个软上限,并且每次连接执行存储过程或函数时都会检查该限制。另一方面,存储程序定义缓存分区是一个共享缓存,它存储用于其他目的的存储程序定义对象。存储程序定义缓存分区中对象的存在与存储过程缓存或存储函数缓存中对象的存在无关,反之亦然。

    有关信息,请参阅 第 16.4 节“字典对象缓存”

  • super_read_only

    命令行格式 --super-read-only[={OFF|ON}]
    系统变量 super_read_only
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果启用了 read_only 系统变量,则服务器不允许任何客户端更新,但拥有 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)的用户除外。如果还启用了 super_read_only 系统变量,则服务器甚至会禁止拥有 CONNECTION_ADMINSUPER 权限的用户进行客户端更新。有关只读模式的说明以及有关 read_onlysuper_read_only 如何交互的信息,请参阅 read_only 系统变量的说明。

    启用 super_read_only 时阻止的客户端更新包括不一定看起来像更新的操作,例如 CREATE FUNCTION(用于安装可加载函数)、INSTALL PLUGININSTALL COMPONENT。禁止这些操作是因为它们涉及对 mysql 系统架构中的表的更改。

    同样,如果启用了事件调度程序,则启用 super_read_only 系统变量会阻止它更新 events 数据字典表中的事件“上次执行”时间戳。这会导致事件调度程序在下一次尝试执行计划事件时停止,并在将消息写入服务器错误日志后停止。(在这种情况下,event_scheduler 系统变量不会从 ON 更改为 OFF。这意味着此变量拒绝 DBA *意图* 启用或禁用事件调度程序,而其启动或停止的实际状态可能不同。)。如果在启用 super_read_only 之后将其禁用,则服务器会根据需要自动重启事件调度程序。

    对复制源服务器上的 super_read_only 所做的更改不会复制到副本服务器。可以在副本上设置该值,而与源上的设置无关。

  • syseventlog.facility

    命令行格式 --syseventlog.facility=value
    系统变量 syseventlog.facility
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 守护程序

    写入 syslog 的错误日志输出的工具(发送消息的程序类型)。除非安装了 log_sink_syseventlog 错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误记录到系统日志”

    允许的值可能因操作系统而异;请参阅您的系统 syslog 文档。

    此变量在 Windows 上不存在。

  • syseventlog.include_pid

    命令行格式 --syseventlog.include-pid[={OFF|ON}]
    系统变量 syseventlog.include_pid
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    是否在写入 syslog 的每行错误日志输出中包含服务器进程 ID。除非安装了 log_sink_syseventlog 错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误记录到系统日志”

    此变量在 Windows 上不存在。

  • syseventlog.tag

    命令行格式 --syseventlog.tag=tag
    系统变量 syseventlog.tag
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 空字符串

    要添加到写入 syslog 或 Windows 事件日志的错误日志输出中的服务器标识符的标记。除非安装了 log_sink_syseventlog 错误日志组件,否则此变量不可用。请参阅 第 7.4.2.8 节“将错误记录到系统日志”

    默认情况下,没有设置任何标记,因此服务器标识符在 Windows 上只是 MySQL,在其他平台上是 mysqld。如果指定了 tag 的标记值,则会将其附加到服务器标识符,并在前面加上连字符,从而生成 syslog 标识符 mysqld-tag(或 Windows 上的 MySQL-tag)。

    在 Windows 上,要使用尚不存在的标记,必须从具有管理员权限的帐户运行服务器,以允许为该标记创建注册表项。如果标记已存在,则不需要提升权限。

  • system_time_zone

    系统变量 system_time_zone
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    服务器系统时区。当服务器开始执行时,它会从机器默认设置中继承一个时区设置,该设置可能会被用于运行服务器的帐户的环境或启动脚本修改。该值用于设置 system_time_zone。要显式指定系统时区,请设置 TZ 环境变量或使用 --timezone 选项的 mysqld_safe 脚本。

    除了启动时的初始化之外,如果服务器主机时区发生更改(例如,由于夏令时),system_time_zone 会反映该更改,这对应用程序有以下影响:

    • 引用 system_time_zone 的查询在夏令时更改之前将获得一个值,在更改之后将获得另一个值。

    • 对于在夏令时更改之前开始执行并在更改之后结束的查询,system_time_zone 在查询中保持不变,因为该值通常在执行开始时被缓存。

    system_time_zone 变量不同于 time_zone 变量。虽然它们可能具有相同的值,但后者用于初始化每个连接客户端的时区。请参阅 第 7.1.15 节 “MySQL 服务器时区支持”

  • table_definition_cache

    命令行格式 --table-definition-cache=#
    系统变量 table_definition_cache
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 -1(表示自动调整大小;不要分配此字面值)
    最小值 400
    最大值 524288

    可以存储在表定义缓存中的表定义数量。如果使用大量表,则可以创建大型表定义缓存以加快表的打开速度。与普通表缓存不同,表定义缓存占用的空间更少,并且不使用文件描述符。最小值为 400。默认值基于以下公式,上限为 2000:

    MIN(400 + table_open_cache / 2, 2000)

    对于 InnoDBtable_definition_cache 设置充当字典对象缓存中表实例数量和一次可以打开的“每个表一个文件”表空间数量的软限制。

    如果字典对象缓存中的表实例数量超过 table_definition_cache 限制,则 LRU 机制会开始标记表实例以进行逐出,并最终将其从字典对象缓存中删除。由于具有外键关系的表实例未放置在 LRU 列表中,因此缓存了元数据的打开表数量可能高于 table_definition_cache 限制。

    一次可以打开的“每个表一个文件”表空间的数量受 table_definition_cacheinnodb_open_files 设置的限制。如果同时设置了这两个变量,则使用最高的设置。如果未设置任何一个变量,则使用具有较高默认值的 table_definition_cache 设置。如果打开的表空间数量超过 table_definition_cacheinnodb_open_files 定义的限制,则 LRU 机制会在 LRU 列表中搜索已完全刷新且当前未扩展的表空间文件。每次打开新的表空间时都会执行此过程。只有非活动表空间才会关闭。

    表定义缓存与 字典对象缓存 的表定义缓存分区并行存在。这两个缓存都存储表定义,但服务于 MySQL 服务器的不同部分。一个缓存中的对象不依赖于另一个缓存中对象的存在。有关更多信息,请参阅 第 16.4 节 “字典对象缓存”

  • table_encryption_privilege_check

    命令行格式 --table-encryption-privilege-check[={OFF|ON}]
    系统变量 table_encryption_privilege_check
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    控制在使用与 default_table_encryption 设置不同的加密创建或更改架构或通用表空间时,或者在使用与默认架构加密不同的加密设置创建或更改表时发生的 TABLE_ENCRYPTION_ADMIN 权限检查。默认情况下,该检查处于禁用状态。

    在运行时设置 table_encryption_privilege_check 需要 SUPER 权限。

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

    有关更多信息,请参见 为架构和通用表空间定义加密默认值

  • table_open_cache

    命令行格式 --table-open-cache=#
    系统变量 table_open_cache
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4000
    最小值 1
    最大值 524288

    所有线程打开的表数。增加此值会增加 mysqld 所需的文件描述符数量。此变量的有效值是 open_files_limit 的有效值 - 10 - max_connections 的有效值 / 2 和 400 中的较大值;也就是说:

    MAX(
        (open_files_limit - 10 - max_connections) / 2,
        400
       )

    您可以通过检查 Opened_tables 状态变量来检查是否需要增加表缓存。如果 Opened_tables 的值很大,并且您不经常使用 FLUSH TABLES(这只会强制关闭并重新打开所有表),则应增加 table_open_cache 变量的值。有关表缓存的更多信息,请参阅 第 10.4.3.1 节 “MySQL 如何打开和关闭表”

  • table_open_cache_instances

    命令行格式 --table-open-cache-instances=#
    系统变量 table_open_cache_instances
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16
    最小值 1
    最大值 64

    打开的表缓存实例数。为了通过减少会话之间的争用提高可伸缩性,可以将打开的表缓存划分为多个较小的缓存实例,每个实例的大小为 table_open_cache / table_open_cache_instances。会话只需要锁定一个实例即可访问它以进行 DML 语句。这会在实例之间分割缓存访问,从而在有许多会话访问表时,允许使用缓存的操作获得更高的性能。(DDL 语句仍然需要锁定整个缓存,但此类语句的频率远低于 DML 语句。)

    在通常使用 16 个或更多内核的系统上,建议使用 8 或 16 的值。但是,如果您的表上有许多大型触发器导致内存负载过高,则 table_open_cache_instances 的默认设置可能会导致内存使用过多。在这种情况下,将 table_open_cache_instances 设置为 1 以限制内存使用可能会有所帮助。

  • tablespace_definition_cache

    命令行格式 --tablespace-definition-cache=#
    系统变量 tablespace_definition_cache
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 256
    最小值 256
    最大值 524288

    定义可以在字典对象缓存中保留的已使用和未使用表空间定义对象的数量限制。

    只有在使用的数量小于 tablespace_definition_cache 定义的容量时,未使用的表空间定义对象才会保留在字典对象缓存中。

    0 的设置意味着表空间定义对象仅在使用时才保留在字典对象缓存中。

    有关更多信息,请参见 第 16.4 节,“字典对象缓存”

  • temptable_max_mmap

    命令行格式 --temptable-max-mmap=#
    系统变量 temptable_max_mmap
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 2^64-1
    单位 字节

    定义 TempTable 存储引擎在开始将数据存储到磁盘上的 InnoDB 内部临时表之前,允许从内存映射的临时文件分配的最大内存量(以字节为单位)。设置为 0(默认值)将禁用从内存映射的临时文件分配内存。有关更多信息,请参阅 第 10.4.4 节 “MySQL 中的内部临时表使用”

    在 MySQL 8.4 之前,此选项设置为 1 GiB 而不是 0。

  • temptable_max_ram

    命令行格式 --temptable-max-ram=#
    系统变量 temptable_max_ram
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 总内存的 3%:最小 1 GB,最大 4 GB
    最小值 2097152
    最大值 2^64-1
    单位 字节

    定义 TempTable 存储引擎在开始将数据存储到磁盘之前可以占用的最大内存量。默认值为服务器上可用总内存的 3%,最小和最大默认范围为 1-4 GiB。有关更多信息,请参阅 第 10.4.4 节 “MySQL 中的内部临时表使用”

    在 MySQL 8.4 之前,默认值始终为 1 GiB。

  • temptable_use_mmap

    命令行格式 --temptable-use-mmap[={OFF|ON}]
    已弃用
    系统变量 temptable_use_mmap
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    定义当 TempTable 存储引擎占用的内存量超过 temptable_max_ram 变量定义的限制时,TempTable 存储引擎是否将内部内存临时表的空間分配为内存映射的临时文件。当 temptable_use_mmap 被禁用(默认)时,TempTable 存储引擎将使用 InnoDB 磁盘上的内部临时表。有关更多信息,请参阅 第 10.4.4 节 “MySQL 中的内部临时表使用”

  • thread_cache_size

    命令行格式 --thread-cache-size=#
    系统变量 thread_cache_size
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 -1(表示自动调整大小;不要分配此字面值)
    最小值 0
    最大值 16384

    服务器应该缓存以供重用的线程数。当客户端断开连接时,如果缓存中的线程数少于 thread_cache_size,则客户端的线程将被放入缓存中。对线程的请求会尽可能通过重用从缓存中获取的线程来满足,只有当缓存为空时才会创建新线程。如果您有大量的新连接,可以增加此变量以提高性能。通常,如果您有一个良好的线程实现,这不会提供显著的性能改进。但是,如果您的服务器每秒看到数百个连接,您通常应该将 thread_cache_size 设置得足够高,以便大多数新连接使用缓存的线程。通过检查 ConnectionsThreads_created 状态变量之间的差异,您可以看到线程缓存的效率。有关详细信息,请参阅 第 7.1.10 节“服务器状态变量”

    默认值基于以下公式,上限为 100

    8 + (max_connections / 100)
  • thread_handling

    命令行格式 --thread-handling=name
    系统变量 thread_handling
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 one-thread-per-connection
    有效值

    no-threads

    one-thread-per-connection

    loaded-dynamically

    服务器用于连接线程的线程处理模型。允许的值为 no-threads(服务器使用单个线程处理一个连接)、one-thread-per-connection(服务器使用一个线程处理每个客户端连接)和 loaded-dynamically(由线程池插件在初始化时设置)。no-threads 对于在 Linux 下进行调试很有用;请参阅 第 7.9 节“调试 MySQL”

  • thread_pool_algorithm

    命令行格式 --thread-pool-algorithm=#
    系统变量 thread_pool_algorithm
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1

    此变量控制线程池插件使用的算法

    • 0:使用保守的低并发算法。

    • 1:使用激进的高并发算法,该算法在最佳线程数下性能更好,但如果连接数达到极高值,性能可能会下降。

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_dedicated_listeners

    命令行格式 --thread-pool-dedicated-listeners
    系统变量 thread_pool_dedicated_listeners
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    在每个线程组中指定一个侦听器线程来侦听分配给该组的连接的传入语句。

    • OFF:(默认)禁用专用侦听器线程。

    • ON:在每个线程组中指定一个侦听器线程来侦听分配给该组的连接的传入语句。专用侦听器线程不执行查询。

    仅当 thread_pool_max_transactions_limit 定义了事务限制时,启用 thread_pool_dedicated_listeners 才有用。否则,不应启用 thread_pool_dedicated_listeners

    HeatWave 服务使用此变量,该变量仅在 MySQL 企业版中可用,并且在 MySQL 9.0 中不受支持。

  • thread_pool_high_priority_connection

    命令行格式 --thread-pool-high-priority-connection=#
    系统变量 thread_pool_high_priority_connection
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1

    此变量会影响新语句在执行之前的排队。如果值为 0(false,默认值),则语句排队将同时使用低优先级队列和高优先级队列。如果值为 1(true),则排队的语句始终进入高优先级队列。

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_longrun_trx_limit

    命令行格式 --thread-pool-longrun-trx-limit=#
    系统变量 thread_pool_longrun_trx_limit
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 2000
    最小值 10
    最大值 60*60*24
    单位 毫秒

    使用 thread_pool_max_transactions_limit 时,每个线程组中可以处于活动状态的事务数都有一个最大值。如果可用的全部数量都被长时间运行的事务使用,则分配给该组的任何其他事务都将阻塞,直到其中一个长时间运行的事务完成,用户可能会认为这是莫名其妙的挂起。

    为了缓解此问题,如果所有使用事务最大值的线程的执行时间都超过 thread_pool_longrun_trx_limit 指定的时间间隔(以毫秒为单位),则会暂停给定线程组的限制。当长时间运行的事务数量减少时,可以(并且将会)再次启用 thread_pool_max_transactions_limit。为此,正在进行的事务数量必须小于 thread_pool_max_transactions_limit / 2,持续时间如下所示

    MIN( MAX(thread_pool_longrun_trx_limit * 15, 5000), 30000)

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_max_active_query_threads

    命令行格式 --thread-pool-max-active-query-threads
    系统变量 thread_pool_max_active_query_threads
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 512

    每个组允许的最大活动(正在运行)查询线程数。如果值为 0,则线程池插件最多使用可用的线程数。

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_max_transactions_limit

    命令行格式 --thread-pool-max-transactions-limit
    系统变量 thread_pool_max_transactions_limit
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 1000000

    线程池插件允许的最大事务数。定义事务限制会将线程绑定到事务,直到事务提交,这有助于在高并发期间稳定吞吐量。

    默认值 0 表示没有事务限制。该变量是动态的,但不能在运行时从 0 更改为更大的值,反之亦然。启动时非零值允许在运行时进行动态配置。在运行时配置 thread_pool_max_transactions_limit 需要 CONNECTION_ADMIN 权限。

    定义事务限制时,启用 thread_pool_dedicated_listeners 会在每个线程组中创建一个专用侦听器线程。额外的专用侦听器线程会消耗更多资源并影响线程池性能。因此,应谨慎使用 thread_pool_dedicated_listeners

    当达到 thread_pool_max_transactions_limit 定义的限制时,新连接或现有连接上的事务可能会出现挂起,直到一个或多个现有事务完成。在许多情况下,可以通过设置 thread_pool_longrun_trx_limit 来缓解此问题,以便在正在进行的事务数量在给定时间段内与之匹配时可以放宽事务最大值。如果在尝试此操作后现有连接继续被阻塞或长时间运行,则可能需要特权连接才能访问服务器以增加限制、删除限制或终止正在运行的事务。请参阅 特权连接

    HeatWave 服务使用此变量,该变量仅在 MySQL 企业版中可用,并且在 MySQL 9.0 中不受支持。

  • thread_pool_max_unused_threads

    命令行格式 --thread-pool-max-unused-threads=#
    系统变量 thread_pool_max_unused_threads
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4096

    线程池中允许的最大未使用线程数。此变量可以限制休眠线程使用的内存量。

    值 0(默认值)表示对休眠线程的数量没有限制。值 N(其中 N 大于 0)表示 1 个消费者线程和 N−1 个保留线程。在这种情况下,如果一个线程准备好休眠,但休眠线程的数量已经达到最大值,则该线程会退出而不是进入休眠状态。

    休眠线程要么作为消费者线程休眠,要么作为保留线程休眠。线程池允许一个线程在休眠时成为消费者线程。如果一个线程进入休眠状态并且没有现有的消费者线程,则它将作为消费者线程休眠。当必须唤醒一个线程时,如果存在消费者线程,则会选择一个消费者线程。仅当没有要唤醒的消费者线程时,才会选择保留线程。

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_prio_kickup_timer

    命令行格式 --thread-pool-prio-kickup-timer=#
    系统变量 thread_pool_prio_kickup_timer
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1000
    最小值 0
    最大值 4294967294
    单位 毫秒

    此变量会影响在低优先级队列中等待执行的语句。该值是在等待语句移至高优先级队列之前的毫秒数。默认值为 1000(1 秒)。

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_query_threads_per_group

    命令行格式 --thread-pool-query-threads-per-group
    系统变量 thread_pool_query_threads_per_group
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 1
    最大值 4096

    线程组中允许的最大查询线程数。最大值为 4096,但如果设置了 thread_pool_max_transactions_limit,则 thread_pool_query_threads_per_group 不能超过该值。

    默认值 1 表示每个线程组中有一个活动查询线程,这对许多负载都很有效。当您使用高并发线程池算法(thread_pool_algorithm = 1)时,如果由于长时间运行的事务而导致响应时间变慢,请考虑增加该值。

    在运行时配置 thread_pool_query_threads_per_group 需要 CONNECTION_ADMIN 权限。

    如果在运行时减小 thread_pool_query_threads_per_group 的值,则当前正在运行用户查询的线程将被允许完成,然后移至保留池或终止。如果在运行时增加该值并且线程组需要更多线程,则会尽可能从保留池中获取这些线程,否则将创建这些线程。

    HeatWave 服务使用此变量,该变量仅在 MySQL 企业版中可用,并且在 MySQL 9.0 中不受支持。

  • thread_pool_size

    命令行格式 --thread-pool-size=#
    系统变量 thread_pool_size
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16
    最小值 1
    最大值 512

    线程池中的线程组数。这是控制线程池性能的最重要参数。它会影响可以同时执行的语句数量。如果指定的值超出了允许值的范围,则线程池插件不会加载,并且服务器会向错误日志写入一条消息。

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_stall_limit

    命令行格式 --thread-pool-stall-limit=#
    系统变量 thread_pool_stall_limit
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 6
    最小值 4
    最大值 600
    单位 毫秒 * 10

    此变量会影响正在执行的语句。该值是一个语句在开始执行后必须完成的时间量,然后才会被定义为停滞,此时线程池允许线程组开始执行另一个语句。该值以 10 毫秒为单位进行测量,因此默认值 6 表示 60 毫秒。较短的等待值允许线程更快地启动。较短的值也更能避免死锁情况。较长的等待值对于包含长时间运行的语句的工作负载很有用,可以避免在当前语句执行时启动过多的新语句。

    仅当启用了线程池插件时,此变量才可用。请参阅 第 7.6.3 节“MySQL 企业版线程池”

  • thread_pool_transaction_delay

    命令行格式 --thread-pool-transaction-delay
    系统变量 thread_pool_transaction_delay
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 300000

    执行新事务之前的延迟时间(以毫秒为单位)。最大值为 300000(5 分钟)。

    当并行事务由于资源争用而影响其他操作的性能时,可以使用事务延迟。例如,如果并行事务影响索引创建或在线缓冲池大小调整操作,则可以配置事务延迟以在这些操作运行时减少资源争用。

    工作线程在执行新事务之前将休眠 thread_pool_transaction_delay 指定的毫秒数。

    thread_pool_transaction_delay 设置不影响从特权连接(分配给 Admin 线程组的连接)发出的查询。这些查询不受配置的事务延迟的影响。

  • thread_stack

    命令行格式 --thread-stack=#
    系统变量 thread_stack
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1048576
    最小值 131072
    最大值(64 位平台) 18446744073709550592
    最大值(32 位平台) 4294966272
    单位 字节
    块大小 1024

    每个线程的堆栈大小。默认值足以满足正常操作。如果线程堆栈大小太小,它会限制服务器可以处理的 SQL 语句的复杂性、存储过程的递归深度和其他内存消耗操作。

  • time_zone

    系统变量 time_zone
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 系统
    最小值 -13:59
    最大值 +14:00

    当前时区。此变量用于初始化连接的每个客户端的时区。默认情况下,其初始值为 'SYSTEM'(这意味着,使用 system_time_zone 的值)。可以在服务器启动时使用 --default-time-zone 选项显式指定该值。请参阅 第 7.1.15 节“MySQL 服务器时区支持”

    注意

    如果设置为 SYSTEM,则每个需要计算时区的 MySQL 函数调用都会进行系统库调用以确定当前系统时区。此调用可能受全局互斥锁保护,从而导致争用。

  • timestamp

    系统变量 timestamp
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 数值
    默认值 UNIX_TIMESTAMP()
    最小值 1
    最大值 2147483647

    设置此客户端的时间。如果您使用二进制日志还原行,这将用于获取原始时间戳。 timestamp_value 应该是 Unix 纪元时间戳(UNIX_TIMESTAMP() 返回的值,而不是 'YYYY-MM-DD hh:mm:ss' 格式的值)或 DEFAULT

    timestamp 设置为常量值将使其保留该值,直到再次更改。将 timestamp 设置为 DEFAULT 会使其值在访问时为当前日期和时间。

    timestampDOUBLE 而不是 BIGINT,因为它的值包含微秒部分。最大值对应于 UTC 时间 '2038-01-19 03:14:07',与 TIMESTAMP 数据类型相同。

    SET timestamp 会影响 NOW() 返回的值,但不会影响 SYSDATE() 返回的值。这意味着二进制日志中的时间戳设置对 SYSDATE() 的调用没有影响。可以使用 --sysdate-is-now 选项启动服务器,以使 SYSDATE() 成为 NOW() 的同义词,在这种情况下,SET timestamp 会影响这两个函数。

  • tls_certificates_enforced_validation

    命令行格式 --tls-certificates-enforced-validation[={OFF|ON}]
    系统变量 tls_certificates_enforced_validation
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    如果未在命令行上指定所需 SSL 证书文件的位置,则在启动期间,服务器会确保默认数据目录中存在每个所需 SSL 证书文件的位置。但是,服务器不会验证证书文件,因此,它能够以无效证书启动。tls_certificates_enforced_validation 系统变量控制在启动时是否强制执行证书验证。启用验证强制执行后,发现无效证书将停止启动执行。默认情况下,证书验证强制执行处于禁用状态 (OFF)。

    可以通过在命令行上指定 --tls-certificates-enforced-validation 选项(使用或不使用 ON 值)来启用验证强制执行。启用验证强制执行后,还会在通过 ALTER INSTANCE RELOAD TLS 语句重新加载证书时验证证书。此系统变量无法在重启后持久化。有关更多信息,请参阅 配置证书验证强制执行

  • tls_ciphersuites

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

    服务器允许使用 TLSv1.3 的加密连接使用哪些密码套件。该值是从此处列出的密码套件名称中选择的零个或多个以冒号分隔的列表

    • TLS_AES_128_GCM_SHA256

    • TLS_AES_256_GCM_SHA384

    • TLS_CHACHA20_POLY1305_SHA256

    • TLS_AES_128_CCM_SHA256

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

    可以为此变量命名的密码套件取决于用于编译 MySQL 的 SSL 库。如果未设置此变量,则其默认值为 NULL,这意味着服务器允许使用默认的密码套件集。如果将该变量设置为空字符串,则不会启用任何密码套件,并且无法建立加密连接。有关更多信息,请参阅 第 8.3.2 节“加密连接 TLS 协议和密码”

  • tls_version

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

    服务器允许加密连接使用哪些协议。该值是一个或多个以逗号分隔的协议名称的列表,这些名称不区分大小写。可以为此变量命名的协议取决于用于编译 MySQL 的 SSL 库。应选择允许的协议,以免在列表中留下 漏洞。有关详细信息,请参阅 第 8.3.2 节“加密连接 TLS 协议和密码”

    可以在运行时修改此变量,以影响服务器用于新连接的 TLS 上下文。请参阅 加密连接的服务器端运行时配置和监控

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

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

    将此变量设置为空字符串将禁用加密连接。

  • tmp_table_size

    命令行格式 --tmp-table-size=#
    系统变量 tmp_table_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16777216
    最小值 1024
    最大值 18446744073709551615
    单位 字节

    定义由 MEMORYTempTable 存储引擎创建的内部内存中临时表的最大大小。如果内部内存中临时表超过此大小,它将自动转换为磁盘上的内部临时表。

    tmp_table_size 变量不适用于用户创建的 MEMORY 表。不支持用户创建的 TempTable 表。

    对内部内存中临时表使用 MEMORY 存储引擎时,实际大小限制为 tmp_table_sizemax_heap_table_size 中的较小者。max_heap_table_size 设置不适用于 TempTable 表。

    如果执行许多高级 GROUP BY 查询并且内存充足,请增加 tmp_table_size 的值(如果对内部内存中临时表使用 MEMORY 存储引擎,还需要增加 max_heap_table_size 的值)。

    您可以通过比较 Created_tmp_disk_tablesCreated_tmp_tables 值,来比较创建的内部磁盘上临时表的数量与创建的内部临时表的总数。

    另请参阅 第 10.4.4 节“MySQL 中的内部临时表使用”

  • tmpdir

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

    用于创建临时文件的目录的路径。如果默认的 /tmp 目录位于太小而无法容纳临时表的分区上,这将非常有用。此变量可以设置为以循环方式使用的多个路径的列表。路径在 Unix 上应以冒号 (:) 分隔,在 Windows 上应以分号 (;) 分隔。

    tmpdir 可以是非永久性位置,例如基于内存的文件系统上的目录或在服务器主机重新启动时清除的目录。如果 MySQL 服务器充当副本,并且您对 tmpdir 使用非永久性位置,请考虑使用 replica_load_tmpdir 变量为副本设置不同的临时目录。对于副本,用于复制 LOAD DATA 语句的临时文件存储在此目录中,因此,如果使用永久性位置,它们可以在机器重新启动后继续存在,尽管如果临时文件已被删除,复制现在可以在重新启动后继续。

    有关临时文件存储位置的更多信息,请参阅 第 B.3.3.5 节“MySQL 存储临时文件的位置”

  • transaction_alloc_block_size

    命令行格式 --transaction-alloc-block-size=#
    系统变量 transaction_alloc_block_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 8192
    最小值 1024
    最大值 131072
    单位 字节
    块大小 1024

    需要内存的每个事务内存池增加的字节数。请参阅 transaction_prealloc_size 的描述。

  • transaction_isolation

    命令行格式 --transaction-isolation=name
    系统变量 transaction_isolation
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 REPEATABLE-READ
    有效值

    READ-UNCOMMITTED

    READ-COMMITTED

    REPEATABLE-READ

    SERIALIZABLE

    事务隔离级别。默认值为 REPEATABLE-READ

    事务隔离级别具有三个范围:全局、会话和下一个事务。这种三范围实现导致了一些非标准的隔离级别分配语义,如下所述。

    要在启动时设置全局事务隔离级别,请使用 --transaction-isolation 服务器选项。

    在运行时,可以使用 SET 语句直接设置隔离级别,方法是为 transaction_isolation 系统变量赋值,也可以使用 SET TRANSACTION 语句间接设置。如果将 transaction_isolation 直接设置为包含空格的隔离级别名称,则应将该名称括在引号中,并将空格替换为短划线。例如,使用以下 SET 语句设置全局值:

    SET GLOBAL transaction_isolation = 'READ-COMMITTED';

    设置全局 transaction_isolation 值将为所有后续会话设置隔离级别。现有会话不受影响。

    要设置会话或下一个级别的 transaction_isolation 值,请使用 SET 语句。对于大多数会话系统变量,这些语句是设置值的等效方法:

    SET @@SESSION.var_name = value;
    SET SESSION var_name = value;
    SET var_name = value;
    SET @@var_name = value;

    如前所述,事务隔离级别除了全局和会话作用域之外,还有一个下一个事务作用域。为了能够设置下一个事务作用域,用于分配会话系统变量值的 SET 语法对于 transaction_isolation 具有非标准语义。

    • 要设置会话隔离级别,请使用以下任一语法:

      SET @@SESSION.transaction_isolation = value;
      SET SESSION transaction_isolation = value;
      SET transaction_isolation = value;

      对于这些语法中的每一个,都适用以下语义:

      • 设置会话中执行的所有后续事务的隔离级别。

      • 允许在事务中执行,但不影响当前正在进行的事务。

      • 如果在事务之间执行,则会覆盖前面设置下一个事务隔离级别的任何语句。

      • 对应于 SET SESSION TRANSACTION ISOLATION LEVEL(带有 SESSION 关键字)。

    • 要设置下一个事务隔离级别,请使用以下语法:

      SET @@transaction_isolation = value;

      对于该语法,适用以下语义:

      • 仅为会话中执行的下一个事务设置隔离级别。

      • 后续事务将恢复为会话隔离级别。

      • 不允许在事务中执行。

      • 对应于 SET TRANSACTION ISOLATION LEVEL(不带 SESSION 关键字)。

    有关 SET TRANSACTION 及其与 transaction_isolation 系统变量的关系的更多信息,请参阅 第 15.3.7 节“SET TRANSACTION 语句”

  • transaction_prealloc_size

    命令行格式 --transaction-prealloc-size=#
    已弃用
    系统变量 transaction_prealloc_size
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4096
    最小值 1024
    最大值 131072
    单位 字节
    块大小 1024

    每个事务都有一个内存池,各种与事务相关的分配都从该池中获取内存。池的初始大小(以字节为单位)为 transaction_prealloc_size。对于每次由于可用内存不足而无法从池中满足的分配,池的大小都会增加 transaction_alloc_block_size 字节。当事务结束时,池将被截断为 transaction_prealloc_size 字节。通过将 transaction_prealloc_size 设置为足够大以包含单个事务中的所有语句,可以避免许多 malloc() 调用。

    transaction_prealloc_size 已弃用,设置此变量不再有任何效果。预计 transaction_prealloc_size 将在 MySQL 的未来版本中删除。

  • transaction_read_only

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

    事务访问模式。该值可以是 OFF(读/写;默认值)或 ON(只读)。

    事务访问模式具有三个作用域:全局、会话和下一个事务。这种三作用域实现导致了一些非标准的访问模式分配语义,如下所述。

    要在启动时设置全局事务访问模式,请使用 --transaction-read-only 服务器选项。

    在运行时,可以使用 SET 语句直接设置访问模式,方法是为 transaction_read_only 系统变量赋值,也可以使用 SET TRANSACTION 语句间接设置。例如,使用以下 SET 语句设置全局值:

    SET GLOBAL transaction_read_only = ON;

    设置全局 transaction_read_only 值将为所有后续会话设置访问模式。现有会话不受影响。

    要设置会话或下一个级别的 transaction_read_only 值,请使用 SET 语句。对于大多数会话系统变量,这些语句是设置值的等效方法:

    SET @@SESSION.var_name = value;
    SET SESSION var_name = value;
    SET var_name = value;
    SET @@var_name = value;

    如前所述,事务访问模式除了全局和会话作用域之外,还有一个下一个事务作用域。为了能够设置下一个事务作用域,用于分配会话系统变量值的 SET 语法对于 transaction_read_only 具有非标准语义,

    • 要设置会话访问模式,请使用以下任一语法:

      SET @@SESSION.transaction_read_only = value;
      SET SESSION transaction_read_only = value;
      SET transaction_read_only = value;

      对于这些语法中的每一个,都适用以下语义:

      • 设置会话中执行的所有后续事务的访问模式。

      • 允许在事务中执行,但不影响当前正在进行的事务。

      • 如果在事务之间执行,则会覆盖前面设置下一个事务访问模式的任何语句。

      • 对应于 SET SESSION TRANSACTION {READ WRITE | READ ONLY}(带有 SESSION 关键字)。

    • 要设置下一个事务访问模式,请使用以下语法:

      SET @@transaction_read_only = value;

      对于该语法,适用以下语义:

      • 仅为会话中执行的下一个事务设置访问模式。

      • 后续事务将恢复为会话访问模式。

      • 不允许在事务中执行。

      • 对应于 SET TRANSACTION {READ WRITE | READ ONLY}(不带 SESSION 关键字)。

    有关 SET TRANSACTION 及其与 transaction_read_only 系统变量的关系的更多信息,请参阅 第 15.3.7 节“SET TRANSACTION 语句”

  • unique_checks

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

    如果设置为 1(默认值),则会对 InnoDB 表中的二级索引执行唯一性检查。如果设置为 0,则允许存储引擎假定输入数据中不存在重复键。如果您确定数据中不包含违反唯一性的情况,则可以将其设置为 0 以加快向 InnoDB 导入大型表的速度。

    将此变量设置为 0 不会 强制 存储引擎忽略重复键。如果引擎检测到重复键,仍然允许它检查它们并发出重复键错误。

  • updatable_views_with_limit

    命令行格式 --updatable-views-with-limit[={OFF|ON}]
    系统变量 updatable_views_with_limit
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 1

    此变量控制当视图不包含基础表中定义的主键的所有列时,如果更新语句包含 LIMIT 子句,是否可以对视图进行更新。(此类更新通常由 GUI 工具生成。)更新是指 UPDATEDELETE 语句。主键在这里指的是 PRIMARY KEYUNIQUE 索引,其中任何列都不能包含 NULL

    该变量可以有两个值:

    • 1YES:仅发出警告(而不是错误消息)。这是默认值。

    • 0NO:禁止更新。

  • use_secondary_engine

    系统变量 use_secondary_engine
    作用域 会话
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ON
    有效值

    OFF

    ON

    FORCED

    供将来使用。

    是否使用辅助引擎执行查询。

    与 HeatWave 一起使用。参见 HeatWave 用户指南

  • validate_password.xxx

    validate_password 组件实现了一组系统变量,其名称格式为 validate_password.xxx。这些变量会影响该组件的密码测试;请参阅 第 8.4.3.2 节“密码验证选项和变量”

  • version

    服务器的版本号。该值可能还包括一个后缀,指示服务器构建或配置信息。-debug 表示服务器是在启用了调试支持的情况下构建的。

  • version_comment

    系统变量 version_comment
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    CMake 配置程序有一个 COMPILATION_COMMENT_SERVER 选项,允许在构建 MySQL 时指定注释。此变量包含该注释的值。

  • version_compile_machine

    系统变量 version_compile_machine
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    服务器二进制文件的类型。

  • version_compile_os

    系统变量 version_compile_os
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    构建 MySQL 所用的操作系统类型。

  • version_compile_zlib

    系统变量 version_compile_zlib
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串

    编译后的 zlib 库的版本。

  • wait_timeout

    命令行格式 --wait-timeout=#
    系统变量 wait_timeout
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 28800
    最小值 1
    最大值(Windows) 2147483
    最大值(其他) 31536000
    单位

    服务器在关闭非交互式连接之前等待其活动的秒数。

    在启动线程时,会话 wait_timeout 值将从全局 wait_timeout 值或全局 interactive_timeout 值初始化,具体取决于客户端类型(由 mysql_real_connect()CLIENT_INTERACTIVE 连接选项定义)。另请参阅 interactive_timeout

  • warning_count

    上次生成消息的语句导致的错误、警告和注释的数量。此变量为只读。请参阅 第 15.7.7.41 节 “SHOW WARNINGS 语句”

  • windowing_use_high_precision

    命令行格式 --windowing-use-high-precision[={OFF|ON}]
    系统变量 windowing_use_high_precision
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    是否在计算窗口操作时不损失精度。请参阅 第 10.2.1.21 节 “窗口函数优化”

  • xa_detach_on_prepare

    命令行格式 --xa-detach-on-prepare[={OFF|ON}]
    系统变量 xa_detach_on_prepare
    作用域 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 ON

    设置为 ON(启用)时,所有 XA 事务都将作为 XA PREPARE 的一部分从连接(会话)中分离(断开连接)。这意味着 XA 事务可以由另一个连接提交或回滚,即使发起连接尚未终止,并且此连接可以启动新事务。

    临时表不能在分离的 XA 事务中使用。

    当此选项为 OFF(禁用)时,XA 事务将严格与同一连接关联,直到会话断开连接。建议您允许为复制启用它(默认行为)。

    更多信息,请参阅 第 15.3.8.2 节 “XA 事务状态”