Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Server System Variables

7.1.8 服务器系统变量

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

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

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

  • 查看服务器使用的默认值和任何选项文件的值,可以使用以下命令:

    mysqld --verbose --help
  • 查看服务器使用的默认值,忽略任何选项文件,可以使用以下命令:

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

本节提供了每个系统变量的描述。关于系统变量的总结表,请见 第7.1.5节,“服务器系统变量参考”。关于系统变量的操作,请见 第7.1.9节,“使用系统变量”

关于系统变量的更多信息,请见以下部分:

Note

以下某些变量描述中提到“启用”或“禁用”一个变量。这些变量可以使用SET语句通过将其设置为ON1来启用,或者将其设置为OFF0来禁用。布尔变量可以在启动时设置为ONTRUEOFFFALSE(不区分大小写),以及10。请见第6.2.2.4节,“程序选项修饰符”

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

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

Note

一些系统变量描述中包括一个块大小,在这种情况下,值不是该块大小的整数倍将被服务器下舍到该块大小的下一个整数倍,即FLOOR(value) * block_size

示例:假设某个变量的块大小为4096,您将该变量的值设置为100000(假设该变量的最大值大于这个数字)。由于100000 / 4096 = 24.4140625,服务器将自动将值降低到98304(24 * 4096)前存储。

在某些情况下,变量的最大值是MySQL解析器允许的最大值,但不是该块大小的exact倍数。在这种情况下,实际最大值是该块大小的下一个整数倍。

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

一些系统变量需要文件名值。除非另有指定,文件位置默认为数据目录,如果值是相对路径名。要指定位置,使用绝对路径名。假设数据目录是 /var/mysql/data。如果文件值变量以相对路径名给出,它将位于 /var/mysql/data。如果值是绝对路径名,它的位置将是路径名所指定的。

  • activate_all_roles_on_login

    Command-Line Format --activate-all-roles-on-login[={OFF|ON}]
    System Variable activate_all_roles_on_login
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

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

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

    activate_all_roles_on_login 只在登录时和存储程序或视图执行时的开始生效。要在会话中更改活动角色,使用 SET ROLE。要更改存储程序的活动角色,程序体应该执行 SET ROLE

  • admin_address

    Command-Line Format --admin-address=addr
    System Variable admin_address
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

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

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

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

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

    • 该值可能包括网络命名空间指定符。

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

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

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

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

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

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

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

    • 对于给定的地址,网络命名空间是可选的。如果给定,必须以/ns后缀形式指定。

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

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

    • 主机系统必须支持网络命名空间,每个命名空间名称都必须先前设置。命名一个不存在的命名空间将产生错误。

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

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

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

  • admin_port

    Command-Line Format --admin-port=port_num
    System Variable admin_port
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 33062
    Minimum Value 0
    Maximum Value 65535

    用于连接管理网络接口(见第7.1.12.1节,“Connection Interfaces”)。将该变量设置为0将使用默认值。

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

  • admin_ssl_ca

    Command-Line Format --admin-ssl-ca=file_name
    System Variable admin_ssl_ca
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value NULL

    admin_ssl_ca」系统变量类似于《ssl_ca」,只是它适用于管理连接接口,而不是主连接接口。关于配置加密支持的管理连接接口的信息,请见Administrative Interface Support for Encrypted Connections

  • admin_ssl_capath

    Command-Line Format --admin-ssl-capath=dir_name
    System Variable admin_ssl_capath
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value NULL

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

  • admin_ssl_cert

    Command-Line Format --admin-ssl-cert=file_name
    System Variable admin_ssl_cert
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value NULL

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

  • admin_ssl_cipher

    Command-Line Format --admin-ssl-cipher=name
    System Variable admin_ssl_cipher
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value NULL

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

    指定的列表可能包括以下值之一:

    • ECDHE-ECDSA-AES128-GCM-SHA256

    • ECDHE-ECDSA-AES256-GCM-SHA384

    • ECDHE-RSA-AES128-GCM-SHA256

    • ECDHE-RSA-AES256-GCM-SHA384

    • ECDHE-ECDSA-CHACHA20-POLY1305

    • ECDHE-RSA-CHACHA20-POLY1305

    • ECDHE-ECDSA-AES256-CCM

    • ECDHE-ECDSA-AES128-CCM

    • DHE-RSA-AES128-GCM-SHA256

    • DHE-RSA-AES256-GCM-SHA384

    • DHE-RSA-AES256-CCM

    • DHE-RSA-AES128-CCM

    • DHE-RSA-CHACHA20-POLY1305

    尝试在设置该变量时将不在这里显示的值添加到加密列表中将引发错误(ER_BLOCKED_CIPHER)。

  • admin_ssl_crl

    Command-Line Format --admin-ssl-crl=file_name
    System Variable admin_ssl_crl
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value NULL

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

  • admin_ssl_crlpath

    Command-Line Format --admin-ssl-crlpath=dir_name
    System Variable admin_ssl_crlpath
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名
    Default Value NULL

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

  • admin_ssl_key

    Command-Line Format --admin-ssl-key=file_name
    System Variable admin_ssl_key
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value NULL

    admin_ssl_key」系统变量类似于《ssl_key」,但它适用于管理连接接口,而不是主连接接口。关于配置管理接口的加密支持,请参见《管理接口支持加密连接》。

  • admin_tls_ciphersuites

    Command-Line Format --admin-tls-ciphersuites=ciphersuite_list
    System Variable admin_tls_ciphersuites
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value NULL

    admin_tls_ciphersuites」系统变量类似于《tls_ciphersuites》,但它适用于管理连接接口,而不是主连接接口。关于配置管理接口的加密支持,请参见《管理接口支持加密连接》。

    值是一个由零或多个以冒号分隔的加密套件名称列表,从以下列表中选择:

    • TLS_AES_128_GCM_SHA256

    • TLS_AES_256_GCM_SHA384

    • TLS_CHACHA20_POLY1305_SHA256

    • TLS_AES_128_CCM_SHA256

    尝试在设置该变量时包括在加密套件列表中的任何值都不是这里显示的将引发错误(《ER_BLOCKED_CIPHER》)。

  • admin_tls_version

    Command-Line Format --admin-tls-version=protocol_list
    System Variable admin_tls_version
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value TLSv1.2,TLSv1.3

    admin_tls_version》系统变量类似于《tls_version》,只是它适用于管理连接接口,而不是主连接接口。关于配置加密支持的管理接口,请参见管理接口支持加密连接

    Important
    • MySQL 8.4 不支持 TLSv1 和 TLSv1.1 连接协议。请参见TLSv1 和 TLSv1.1 协议支持的移除以获取更多信息。

    • MySQL 8.4 支持 TLSv1.3 协议,假设 MySQL 服务器使用 OpenSSL 1.1.1 或更高版本编译。服务器在启动时检查 OpenSSL 的版本,如果版本低于 1.1.1,TLSv1.3 将从默认值中删除。在这种情况下,默认值为 TLSv1.2

  • authentication_policy

    Command-Line Format --authentication-policy=value
    System Variable authentication_policy
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value *,,

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

    由于authentication_policy只适用于创建或更改账户时,修改其值对现有用户账户无效。

    Note

    虽然authentication_policy系统变量对CREATE USERALTER USER语句中的身份验证相关子句施加了限制,但是拥有AUTHENTICATION_POLICY_ADMIN特权的用户不受这些限制的约束(在其他情况下将出现警告)。

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

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

    • 如果列表中的第 N 个元素是身份验证插件的名称,那么因素 N 的身份验证方法需要使用该插件。

      此外,该插件将成为因素 N 身份验证方法的默认插件,除非在插件名称中明确指定插件。详见默认身份验证插件

      只能将身份验证插件指定为第一个元素,并且不能重复。例如,以下设置是不可行的:

      • authentication_policy = 'caching_sha2_password, sha256_password'

      • authentication_policy = 'caching_sha2_password, authentication_webauthn, sha256_password'

    • 如果列表中的第 N 个元素是星号(*),那么因素 N 的身份验证方法需要使用任何有效的身份验证插件,该插件将在后续描述中介绍。

    • 如果列表中的第 N 个元素是空,那么因素 N 的身份验证方法是可选的。如果给定,它可以使用任何有效的身份验证插件,该插件将在后续描述中介绍。

    • 如果列表中缺少元素 N(即列表中少于N-1个逗号),则对因素 N 的身份验证方法被禁止。例如,对于值'*',只能使用单因素身份验证(1FA)对新创建的帐户或使用CREATE USERALTER USER修改现有帐户的身份验证方法。

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

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

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

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

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

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

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

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

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

    • 对于第2和3个因素,帐户定义不能指定使用内部凭证存储的插件。

    空元素必须出现在列表的末尾,紧随非空元素。换言之,第一个元素不能为空,或者没有元素为空或最后两个元素为空。例如,对于值',,',这将表明所有因素都是可选的。这不可能,因为帐户至少需要一个身份验证因素。

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

    以下表格显示了一些authentication_policy值和每个值所建立的策略,以便创建或更改账户。

    表7.4:示例身份验证策略

    authentication_policy Value Effective Policy
    '*' 仅允许使用一个因子创建或更改账户。
    '*,*' 仅允许使用两个因子创建或更改账户。
    '*,*,*' 仅允许使用三个因子创建或更改账户。
    '*,' 允许使用一个或两个因子创建或更改账户。
    '*,,' 允许使用一个、两个或三个因子创建或更改账户。
    '*,*,' 允许使用两个或三个因子创建或更改账户。
    '*,auth_plugin' 允许使用两个因子,其中第一个因子可以是任何身份验证方法,而第二个因子必须是指定的插件。
    'auth_plugin,' 允许使用两个或三个因子,其中第一个因子必须是指定的插件。
    'auth_plugin,' 允许使用一个或两个因子,其中第一个因子必须是指定的插件。
    'auth_plugin,auth_plugin,auth_plugin' 允许使用三个因子,其中每个因子必须是指定的插件。

  • authentication_windows_log_level

    Command-Line Format --authentication-windows-log-level=#
    System Variable authentication_windows_log_level
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Minimum Value 0
    Maximum Value 4

    这个变量仅在启用了Windows身份验证插件和调试代码时可用。请参阅第8.4.1.6节,“Windows Pluggable Authentication”

    这个变量设置Windows身份验证插件的日志级别。以下表格显示了允许的值。

    Value Description
    0 无日志
    1 只记录错误信息
    2 记录级别1的信息和警告信息
    3 记录级别2的信息和信息备注
    4 记录级别3的信息和调试信息
  • authentication_windows_use_principal_name

    Command-Line Format --authentication-windows-use-principal-name[={OFF|ON}]
    System Variable authentication_windows_use_principal_name
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    这个变量仅在启用了Windows身份验证插件时可用。请参阅第8.4.1.6节,“Windows Pluggable Authentication”

    使用InitSecurityContext()函数进行身份验证的客户端应该提供连接到的服务的字符串(targetName)。MySQL使用服务器运行的帐户的主体名称(UPN)。UPN的形式为user_id@computer_name,不需要在任何地方注册以使用。这UPN由服务器在身份验证握手的开始发送。

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

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

  • autocommit

    Command-Line Format --autocommit[={OFF|ON}]
    System Variable autocommit
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    自动提交模式。如果设置为1,所有对表的更改将立即生效。如果设置为0,您必须使用COMMIT接受事务或ROLLBACK取消它。如果autocommit为0,您更改为1,MySQL将自动COMMIT任何打开的事务。另一种开始事务的方式是使用START TRANSACTIONBEGIN语句。请参阅第15.3.1节,“START TRANSACTION, COMMIT, and ROLLBACK Statements”.

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

    [mysqld]
    autocommit=0
  • automatic_sp_privileges

    Command-Line Format --automatic-sp-privileges[={OFF|ON}]
    System Variable automatic_sp_privileges
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    当该变量的值为1(默认值),服务器将自动授予存储程序的创建者EXECUTEALTER ROUTINE权限,如果用户不能执行或更改或删除该程序。 (需要ALTER ROUTINE权限以删除程序。) 服务器也将自动从创建者中删除这些权限,当程序被删除时。如果automatic_sp_privileges为0,服务器不自动添加或删除这些权限。

    存储程序的创建者是执行CREATE语句的帐户。这可能不同于在程序定义中指定的DEFINER帐户名称。

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

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

  • auto_generate_certs

    Command-Line Format --auto-generate-certs[={OFF|ON}]
    System Variable auto_generate_certs
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

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

    在启动时,服务器将在数据目录中自动生成服务器端和客户端 SSL 证书和密钥文件,如果auto_generate_certs系统变量启用且服务器端 SSL 文件在数据目录中不存在。这些证书和密钥文件使得使用 SSL 的客户端连接安全;请参见第8.3.1节,“使用加密连接”.

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

    相关的sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys系统变量控制了使用 RSA 加密的安全密码交换所需的 RSA 密钥对文件的自动生成。

  • back_log

    Command-Line Format --back-log=#
    System Variable back_log
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value -1(表示自动调整;不要将该字面值分配给该变量)
    Minimum Value 1
    Maximum Value 65535

    MySQL 可以处理的未完成连接请求的数量。这在 MySQL 主线程在很短时间内接收到许多连接请求时才会出现。然后,主线程需要一些时间(非常短)来检查连接并启动新线程。back_log 值表示在 MySQL 暂时停止回答新请求期间可以堆叠的请求数量。您需要增加这个值,只有在预期在短时间内接收大量连接时。

    换言之,这个值是 TCP/IP 连接的 listen队列大小。您的操作系统有自己的队列大小限制。Unix listen() 系统调用手册中有更多详细信息。请查看您的 OS 文档,以获取该变量的最大值。back_log 不能超过操作系统限制。

    默认值是max_connections的值,这样可以根据允许的最大连接数调整 backlog 的大小。

  • basedir

    Command-Line Format --basedir=dir_name
    System Variable basedir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value MySQL 安装目录的父目录

    MySQL 安装目录的路径。

  • big_tables

    Command-Line Format --big-tables[={OFF|ON}]
    System Variable big_tables
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果启用,服务器将将所有临时表存储在磁盘上,而不是在内存中。这可以防止大部分 The table tbl_name is full 错误的出现,但也会使查询速度变慢,因为内存表可以满足的查询。

    新连接的默认值为 OFF(使用内存临时表)。通常,不需要启用这个变量。当使用 TempTable 存储引擎(默认)管理内存临时表时,内存临时表将被自动转换为磁盘临时表,以避免内存不足的情况。对于更多信息,请查看Section 10.4.4, “Internal Temporary Table Use in MySQL”

  • bind_address

    Command-Line Format --bind-address=addr
    System Variable bind_address
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value *

    MySQL 服务器监听 TCP/IP 连接的网络 sockets。每个 socket 都绑定到一个地址,但一个地址可能映射到多个网络接口。要指定服务器如何监听 TCP/IP 连接,设置 bind_address 系统变量以服务器启动。服务器还具有 admin_address 系统变量,用于启用专用接口的管理连接。见第7.1.12.1节,“连接接口”

    如果 bind_address 指定了值,它将接受一个或多个地址值列表,每个地址可能指定一个非通配符 IP 地址或主机名。每个地址可能包括网络命名空间指定。如果只指定一个地址,它可能使用通配符地址格式(*0.0.0.0::),以监听多个网络接口。多个地址使用逗号分隔。每个值都必须指定一个非通配符 IP 地址(IPv4或IPv6)或主机名,通配符地址格式(*0.0.0.0::)不允许。

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

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

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

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

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

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

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

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

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

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

    • 对于给定的地址,网络命名空间是可选的。给定时,它必须以 /ns 后缀形式指定。

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

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

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

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

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

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

    示例:

    • bind_address=*

      服务器监听所有 IPv4 或 IPv6 地址,正如 * 通配符所指定的那样。

    • bind_address=198.51.100.20

      服务器只监听 198.51.100.20 IPv4 地址。

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

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

    • bind_address=198.51.100.20,*

      这将产生错误,因为通配符地址不能在 bind_address 中指定多个值。

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

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

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

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

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

  • block_encryption_mode

    Command-Line Format --block-encryption-mode=#
    System Variable block_encryption_mode
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type String
    Default Value aes-128-ecb

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

    block_encryption_modekeylenmode格式指定值,其中keylen是密钥长度(位)和mode是加密模式。值不区分大小写。允许的keylen值是128、192和256。允许的mode值是ECB、CBCCFB1CFB8CFB128OFB。

    例如,这个语句将AES加密函数设置为256位密钥和CBC模式:

    SET block_encryption_mode = 'aes-256-cbc';

    在尝试将block_encryption_mode设置为包含不支持的密钥长度或SSL库不支持的模式时,会出现错误。

  • build_id

    System Variable build_id
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Platform Specific Linux

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

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

  • bulk_insert_buffer_size

    Command-Line Format --bulk-insert-buffer-size=#
    System Variable bulk_insert_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8388608
    Minimum Value 0
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295
    Unit 字节/线程

    MyISAM使用特殊的树形缓存来加速bulk inserts对INSERT ... SELECTINSERT ... VALUES (...), (...), ...LOAD DATA的添加数据到非空表时。这变量限制了缓存树的大小(以字节为单位)每个线程。将其设置为0禁用该优化。默认值为8MB。

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

  • caching_sha2_password_digest_rounds

    Command-Line Format --caching-sha2-password-digest-rounds=#
    System Variable caching_sha2_password_digest_rounds
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 5000
    Minimum Value 5000
    Maximum Value 4095000

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

    增加哈希轮数的数量将与增加的数量相关的性能开销:

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

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

  • caching_sha2_password_auto_generate_rsa_keys

    Command-Line Format --caching-sha2-password-auto-generate-rsa-keys[={OFF|ON}]
    System Variable caching_sha2_password_auto_generate_rsa_keys
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

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

    在启动时,服务器将自动生成RSA私钥/公钥文件在数据目录中,如果满足以下条件:sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys系统变量启用;没有指定RSA选项;RSA文件在数据目录中不存在。这些密钥对文件使得使用RSA在未加密连接上进行安全密码交换,使用sha256_passwordcaching_sha2_password插件认证的账户;见第8.4.1.3节,“SHA-256 Pluggable Authentication”第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”

    关于RSA文件自动生成的更多信息,包括文件名和特征,见第8.3.3.1节,“Creating SSL and RSA Certificates and Keys using MySQL”

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

  • caching_sha2_password_private_key_path

    Command-Line Format --caching-sha2-password-private-key-path=file_name
    System Variable caching_sha2_password_private_key_path
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value private_key.pem

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

    Important

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

    关于caching_sha2_password的信息,请见第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”

  • caching_sha2_password_public_key_path

    Command-Line Format --caching-sha2-password-public-key-path=file_name
    System Variable caching_sha2_password_public_key_path
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value public_key.pem

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

    关于caching_sha2_password的信息,包括客户端请求RSA公钥的信息,请见第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”

  • character_set_client

    System Variable character_set_client
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb4

    客户端传来的语句的字符集。会话变量的值是使用客户端连接到服务器时请求的字符集。 (许多客户端支持--default-character-set选项,以便显式指定字符集。见第12.4节,“Connection Character Sets and Collations”。)全局变量的值将在客户端请求值不可用或不可用时使用,以便忽略客户端请求。这可能发生在客户端请求未知的字符集时,例如,当日本启用的客户端请求sjis连接到不支持sjis的服务器时。

    某些字符集不能用作客户端字符集。尝试将其用作character_set_client值将产生错误。请参阅不可用的客户端字符集

  • character_set_connection

    System Variable character_set_connection
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb4

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

  • character_set_database

    System Variable character_set_database
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb4
    Footnote 这个选项是动态的,但应该由服务器设置。您不应该手动设置这个变量。

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

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

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

    将会话character_set_databasecollation_database系统变量的值是弃用的,并且将产生警告。预计在未来的MySQL版本中,这些会话变量将变为只读,并且将在访问这些变量时产生错误。

  • character_set_filesystem

    Command-Line Format --character-set-filesystem=name
    System Variable 文件系统字符集
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 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

    System Variable character_set_results
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb4

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

  • character_set_server

    Command-Line Format --character-set-server=name
    System Variable character_set_server
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb4

    服务器的默认字符集。请参阅第12.15节,“字符集配置”。如果您设置了这个变量,请同时设置collation_server以指定字符集的排序规则。

  • character_set_system

    System Variable character_set_system
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb3

    服务器用于存储标识符的字符集。值总是utf8mb3

  • character_sets_dir

    Command-Line Format --character-sets-dir=dir_name
    System Variable character_sets_dir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称

    字符集安装的目录。请参阅第12.15节,“Character Set Configuration”

  • check_proxy_users

    Command-Line Format --check-proxy-users[={OFF|ON}]
    System Variable check_proxy_users
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

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

    如果启用了check_proxy_users系统变量,服务器将对身份验证插件请求的代理用户映射进行映射。然而,也可能需要启用插件特定的系统变量以充分利用服务器代理用户映射支持:

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

  • collation_connection

    System Variable collation_connection
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    连接字符集的排序规则。collation_connection 对于字面字符串的比较非常重要。对于与列值进行比较的字符串,collation_connection 不会影响结果,因为列具有自己的排序规则,该排序规则的优先级高于连接的排序规则(参见第12.8.4节,“排序规则在表达式中的强制性”)。

    将用户定义的排序规则名称用于该变量将产生警告。

  • collation_database

    System Variable collation_database
    Scope 全局, 会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb4_0900_ai_ci
    Footnote 该选项是动态的,但应该由服务器设置。您不应该手动设置该变量。

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

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

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

    使用用户定义的排序规则名称为collation_database将产生警告。

  • collation_server

    Command-Line Format --collation-server=name
    System Variable collation_server
    Scope 全局, 会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value utf8mb4_0900_ai_ci

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

    将该变量设置为用户定义的排序规则名称将产生警告。

  • completion_type

    Command-Line Format --completion-type=#
    System Variable completion_type
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value NO_CHAIN
    Valid Values

    NO_CHAIN

    CHAIN

    RELEASE

    0

    1

    2

    事务完成类型。这個变量可以取以下表格中的值。该变量可以使用名称值或相应的整数值来分配。

    Value Description
    NO_CHAIN (或 0) 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

    Command-Line Format --component-scheduler.enabled[=value]
    System Variable component_scheduler.enabled
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    当设置为component_scheduler.enabled时,背景线程将开始服务队列。设置为component_scheduler.enabled时,组件将完全可用。

    可以动态设置该值以获取以下效果:

    • ON开始背景线程,开始服务队列。

    • OFF信号背景线程的终止,等待其结束。背景线程在访问队列前检查终止标志,以检查是否有任务可执行。

  • concurrent_insert

    Command-Line Format --concurrent-insert[=value]
    System Variable concurrent_insert
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Enumeration
    Default Value AUTO
    Valid Values

    NEVER

    AUTO

    ALWAYS

    0

    1

    2

    如果使用AUTO(默认),MySQL 允许INSERTSELECT语句同时执行,对于没有空洞的MyISAM表。

    这个变量可以取以下值的表。变量可以使用名称值或相应的整数值来分配。

    Value Description
    NEVER (或 0) 禁用并发插入
    AUTO (或 1) (默认) 允许并发插入,对于没有空洞的MyISAM
    ALWAYS (或 2) 允许并发插入,对于所有MyISAM表,包括有空洞的表。在表中有空洞时,新行将被插入到表的末尾,如果表正在被另一个线程使用,MySQL 将获取正常的写锁并将行插入到空洞中。

    如果您使用mysqld命令时,使用--skip-newconcurrent_insert将被设置为NEVER

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

  • connect_timeout

    Command-Line Format --connect-timeout=#
    System Variable connect_timeout
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10
    Minimum Value 2
    Maximum Value 31536000
    Unit

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

    增加connect_timeout值可能有助于解决客户端频繁遇到的错误,如Lost connection to MySQL server at 'XXX', system error: errno

  • connection_memory_chunk_size

    Command-Line Format --connection-memory-chunk-size=#
    System Variable connection_memory_chunk_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8192
    Minimum Value 0
    Maximum Value 536870912
    Unit 字节

    设置更新全局内存使用计数器Global_connection_memory的 chunking 大小。状态变量仅在所有用户连接的总内存使用量变化超过该值时更新。禁用更新设置connection_memory_chunk_size为0。

    内存计算不包括系统用户,如MySQL root 用户使用的内存,也不包括InnoDB缓冲池使用的内存。

    您必须拥有SYSTEM_VARIABLES_ADMINSUPER特权来设置该变量。

  • connection_memory_limit

    Command-Line Format --connection-memory-limit=#
    System Variable connection_memory_limit
    Scope 全局, 会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 18446744073709551615
    Minimum Value 2097152
    Maximum Value 18446744073709551615
    Unit 字节

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

    该变量设置的限制不适用于系统用户,也不包括InnoDB缓冲池使用的内存。

    您必须拥有SYSTEM_VARIABLES_ADMINSUPER特权来设置该变量。

  • core_file

    System Variable core_file
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否在服务器意外退出时写入核心文件。这变量由--core-file选项设置。

  • create_admin_listener_thread

    Command-Line Format --create-admin-listener-thread[={OFF|ON}]
    System Variable create_admin_listener_thread
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否使用专门的监听线程来处理客户端连接在管理网络接口(见第7.1.12.1节,“连接接口”)。默认情况下,OFF,即主接口的管理线程也处理管理接口的连接。

    根据平台类型和工作负载,您可能发现某个设置对性能更好。

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

  • cte_max_recursion_depth

    Command-Line Format --cte-max-recursion-depth=#
    System Variable cte_max_recursion_depth
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1000
    Minimum Value 0
    Maximum Value 4294967295

    常规表达式(CTE)的最大递归深度。服务器在CTE递归更多级别时终止执行CTE的执行。更多信息,请见限制常规表达式递归

  • datadir

    Command-Line Format --datadir=dir_name
    System Variable datadir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称

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

  • debug

    Command-Line Format --debug[=debug_options]
    System Variable debug
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value (Unix) d:t:i:o,/tmp/mysqld.trace
    Default Value (Windows) d:t:i:O,\mysqld.trace

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

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

    将值设置为以+-开头的值将导致该值被添加到或从当前值中减去。

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

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

  • debug_sync

    System Variable debug_sync
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    该变量是Debug Sync facilty的用户界面。使用Debug Sync需要MySQL配置为带有-DWITH_DEBUG=ONCMake选项(请参阅第2.8.7节,“MySQL源配置选项”);否则,该系统变量不可用。

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

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

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

    关于Debug Sync facility和同步点的使用,请参阅MySQL Internals: Test Synchronization

  • default_authentication_plugin

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

    关于使用内部凭证存储的身份验证插件的信息,请见第8.2.15节,“Password Management”

    default_authentication_pluginauthentication_policy系统变量一起使用,但优先级低于后者。详见The Default Authentication Plugindefault_authentication_plugin已弃用,可能在未来 MySQL 版本中删除。

  • default_collation_for_utf8mb4

    System Variable default_collation_for_utf8mb4
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Enumeration
    Valid Values

    utf8mb4_0900_ai_ci

    utf8mb4_general_ci

    Important

    The default_collation_for_utf8mb4 system variable is for internal use by MySQL Replication only.

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

    默认使用utf8mb4编码在以下语句中:

    请参见第12.9节,“Unicode 支持”

  • default_password_lifetime

    Command-Line Format --default-password-lifetime=#
    System Variable default_password_lifetime
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 65535
    Unit

    该变量定义了全局自动密码过期策略。默认的default_password_lifetime值为0,这禁用自动密码过期。如果default_password_lifetime的值是一个正整数N,它表示允许的密码过期期限;密码必须在N天内更改。

    全局密码过期策略可以在创建或更改用户时使用密码过期选项来覆盖,例如使用CREATE USERALTER USER语句。请参见第8.2.15节,“密码管理”

  • default_storage_engine

    Command-Line Format --default-storage-engine=name
    System Variable default_storage_engine
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value InnoDB

    默认存储引擎用于表。见第18章,<i>备用存储引擎</i>。该变量设置永久表的存储引擎。要设置<code class="literal">TEMPORARY</code>表的存储引擎,请设置default_tmp_storage_engine系统变量。

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

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

  • default_table_encryption

    Command-Line Format --default-table-encryption[={OFF|ON}]
    System Variable default_table_encryption
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    定义了在创建表空间和通用表空间时应用的默认加密设置,不指定<code class="literal">ENCRYPTION</code>子句时。

    变量<a class="link" href="server-system-variables.html#sysvar_default_table_encryption">default_table_encryptionmysql</code>系统表空间。

    设置<a class="link" href="server-system-variables.html#sysvar_default_table_encryption">default_table_encryptionSYSTEM_VARIABLES_ADMINTABLE_ENCRYPTION_ADMINSUPER

    default_table_encryptionSET PERSISTSET PERSIST_ONLY第7.1.9.3节,“持久系统变量”

    更多信息,请见定义架构和通用表空间的加密默认值.

  • default_tmp_storage_engine

    Command-Line Format --default-tmp-storage-engine=name
    System Variable default_tmp_storage_engine
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value InnoDB

    临时表(使用CREATE TEMPORARY TABLE创建)的默认存储引擎。要设置永久表的存储引擎,请设置default_storage_engine系统变量。还请查看该变量的讨论,以了解可能的值。

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

  • default_week_format

    Command-Line Format --default-week-format=#
    System Variable default_week_format
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 7

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

  • delay_key_write

    Command-Line Format --delay-key-write[={OFF|ON|ALL}]
    System Variable delay_key_write
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value ON
    Valid Values

    OFF

    ON

    ALL

    该变量指定延迟键写入的方式。它仅适用于MyISAM表。延迟键写入使键缓冲区不在写入之间刷新。请见第18.2.1节,“MyISAM 启动选项”.

    该变量可以设置为以下值,以影响DELAY_KEY_WRITE表选项的处理,该选项可以在CREATE TABLE语句中使用。

    Option Description
    OFF DELAY_KEY_WRITE将被忽略。
    ON MySQL 将尊重在CREATE TABLE语句中指定的DELAY_KEY_WRITE选项。这是默认值。
    ALL 所有新的打开的表将被视为使用DELAY_KEY_WRITE选项启用。
    Note

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

    如果DELAY_KEY_WRITE为某个表启用,则在索引更新时不flush该表的键缓冲区,但是在表关闭时才flush。这可以大大加速写入键操作,但如果您使用了该特性,您应该在启动服务器时将myisam_recover_options系统变量设置为(例如:myisam_recover_options='BACKUP,FORCE')。见第7.1.8节,“服务器系统变量”第18.2.1节,“MyISAM 启动选项”

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

    Warning

    如果您启用外部锁定使用--external-locking,则没有保护索引损坏的保护机制对使用延迟写入的表。

  • delayed_insert_limit

    Command-Line Format --delayed-insert-limit=#
    Deprecated
    System Variable delayed_insert_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 100
    Minimum Value 1
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295

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

  • 延迟插入超时

    Command-Line Format --延迟插入超时=#
    Deprecated
    System Variable 延迟插入超时
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 300
    Minimum Value 1
    Maximum Value 31536000
    Unit

    这个系统变量已经弃用(因为不支持延迟插入),您应该期望在将来的一次发布中删除它。

  • 延迟队列大小

    Command-Line Format --延迟队列大小=#
    Deprecated
    System Variable 延迟队列大小
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1000
    Minimum Value 1
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295

    这个系统变量已经弃用(因为不支持延迟插入),您应该期望在将来的一次发布中删除它。

  • 禁用存储引擎

    Command-Line Format --禁用存储引擎=引擎[,引擎]...
    System Variable 禁用存储引擎
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 空字符串

    这个变量指示哪些存储引擎不能用来创建表或表空间。例如,要防止创建新的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

    Command-Line Format --disconnect-on-expired-password[={OFF|ON}]
    System Variable disconnect_on_expired_password
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

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

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

  • div_precision_increment

    Command-Line Format --div-precision-increment=#
    System Variable div_precision_increment
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4
    Minimum Value 0
    Maximum Value 30

    该变量指示将结果的分数位数增加的数字。默认值为4。最小值和最大值分别为0和30。以下示例演示了增加默认值的效果。

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

    Command-Line Format --dragnet.log-error-filter-rules=value
    System Variable dragnet.log_error_filter_rules
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value IF prio>=INFORMATION THEN drop. IF EXISTS source_line THEN unset source_line.

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

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

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

  • enterprise_encryption.maximum_rsa_key_size

    Command-Line Format --enterprise-encryption.maximum-rsa-key-size=#
    System Variable enterprise_encryption.maximum_rsa_key_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4096
    Minimum Value 2048
    Maximum Value 16384

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

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

  • enterprise_encryption.rsa_support_legacy_padding

    Command-Line Format --enterprise-encryption.rsa_support_legacy_padding[={OFF|ON}]
    System Variable enterprise_encryption.rsa_support_legacy_padding
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    该变量控制MySQL Enterprise Encryption组件是否可以解密或验证使用旧的openssl_udf共享库函数生产的加密数据和签名。该变量仅在MySQL Enterprise Encryption组件安装时可用。

    为了支持解密和验证旧的openssl_udf共享库函数生产的内容,必须将系统变量padding设置为ON。当ON设置时,如果组件函数无法解密或验证内容,假设它使用了RSAES-OAEP或RSASSA-PSS方案(用于组件),它们将再次尝试假设它使用了RSAES-PKCS1-v1_5或RSASSA-PKCS1-v1_5方案(用于openssl_udf共享库函数)。当OFF设置时,如果组件函数无法使用正常方案解密或验证内容,它们将返回null输出。请参阅第8.6.2节,“配置MySQL Enterprise Encryption”获取更多信息。

  • end_markers_in_json

    Command-Line Format --end-markers-in-json[={OFF|ON}]
    System Variable end_markers_in_json
    Scope 全局,会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否将优化器JSON输出添加结尾标记。请参阅MySQL Internals: The end_markers_in_json System Variable

  • eq_range_index_dive_limit

    Command-Line Format --eq-range-index-dive-limit=#
    System Variable eq_range_index_dive_limit
    Scope 全局,会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 200
    Minimum Value 0
    Maximum Value 4294967295

    该变量指示在等式比较条件中等式范围的数量,优化器将从使用索引探测到使用索引统计信息以估算符合行数。它适用于评估表达式,它们具有以下等价形式,其中优化器使用非唯一索引来查找col_name值:

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

    在这两种情况中,表达式包含N等值范围。优化器可以使用索引分支或索引统计来进行行估算。如果eq_range_index_dive_limit大于0,优化器将使用现有索引统计,而不是索引分支,如果存在N等值范围或更多。因此,要允许使用索引分支来处理最多N等值范围,请将eq_range_index_dive_limit设置为N+1。要禁用索引统计的使用,并总是使用索引分支,无论N,请将eq_range_index_dive_limit设置为0。

    更多信息,请见多值比较的等值范围优化

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

  • error_count

    上一个语句生成的错误数。这是一个只读变量。请见SHOW ERRORS语句

  • event_scheduler

    Command-Line Format --event-scheduler[=value]
    System Variable event_scheduler
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value ON
    Valid Values

    ON

    OFF

    DISABLED

    这个变量可以启用或禁用、启动或停止事件调度器。可能的状态值是ONOFFDISABLED。将事件调度器设置为OFF不同于禁用事件调度器,需要将状态设置为DISABLED。这个变量和事件调度器的操作详见事件调度器配置

  • explain_format

    Command-Line Format --explain-format=format
    System Variable explain_format
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value 传统
    Valid Values

    传统 (默认)

    JSON

    树形

    该变量确定了在 absence of a FORMAT 选项时,EXPLAIN 的默认输出格式。可能的值及其效果如下:

    • 传统: 使用 MySQL 的传统表格输出,如如果 FORMAT=传统 作为 EXPLAIN 语句的一部分指定一样。这是变量的默认值。 默认 也支持作为 传统 的同义词,并且具有相同的效果。

      Note

      默认 不能作为 EXPLAIN 语句的 FORMAT 选项的一部分。

    • JSON: 使用 JSON 输出格式,如如果 FORMAT=JSON 作为 EXPLAIN 语句的一部分指定。

    • 树形: 使用树形输出格式,如如果 FORMAT=树形 作为 EXPLAIN 语句的一部分指定。

    该变量的设置也影响 EXPLAIN ANALYZE。对于这个目的,默认传统 将被解释为 树形。如果 explain_format 的值为 JSON,并且没有 FORMAT 选项的 EXPLAIN ANALYZE 语句,则语句将引发错误 (ER_NOT_SUPPORTED_YET).

    使用格式指定符与 EXPLAINEXPLAIN ANALYZE 将覆盖 explain_format 的设置。

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

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

    更多信息和示例,请见获取执行计划信息

  • explain_json_format_version

    Command-Line Format --explain-json-format-version=#
    System Variable explain_json_format_version
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 2

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

    例如,请参见获取执行计划信息

  • explicit_defaults_for_timestamp

    Command-Line Format --explicit-defaults-for-timestamp[={OFF|ON}]
    Deprecated
    System Variable explicit_defaults_for_timestamp
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

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

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

    • TIMESTAMP 列不明确声明为NULL的将自动声明为NOT NULL。将这样的列分配一个值为NULL的将设置该列的当前时间。Exception:尝试将NULL插入生成的列声明为TIMESTAMP NOT NULL的将被拒绝错误。

    • 表中的第一个TIMESTAMP列,如果没有明确地使用NULL属性或明确的DEFAULTON UPDATE属性,则自动声明为DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP

    • TIMESTAMP列,紧随其后的,如果没有明确地使用NULL属性或明确的DEFAULT属性,则自动声明为DEFAULT '0000-00-00 00:00:00'(零时间戳)。对于插入的行,如果该列没有指定明确的值,该列将被分配'0000-00-00 00:00:00',并且不会出现警告。

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

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

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

    • 不能将TIMESTAMP列设置为NULL以设置当前时间戳。要设置当前时间戳,请将列设置为CURRENT_TIMESTAMP或同义词,如NOW()

    • TIMESTAMP列,如果没有明确地使用NOT NULL属性,则自动声明为NULL属性,并允许NULL值。将该列设置为NULL将其设置为NULL,而不是当前时间戳。

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

    • TIMESTAMP列,显式声明了NOT NULL属性,但没有显式DEFAULT属性,视为没有默认值。对于插入的行,如果没有为该列指定明确的值,结果取决于SQL模式。如果启用严格SQL模式,会出现错误;否则,在禁用严格SQL模式的情况下,该列将被隐式设置为'0000-00-00 00:00:00',并出现警告。这与MySQL处理其他时间类型,例如DATETIME类似。

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

    • 表中的第一个TIMESTAMP列,不与后续的TIMESTAMP列处理 differently。

    如果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系统变量在服务器启动时。

    Note

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

    更多信息,请见Section 13.2.5, “Automatic Initialization and Updating for TIMESTAMP and DATETIME”

  • external_user

    System Variable external_user
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    用于身份验证过程中的外部用户名称,由用于身份验证的插件设置。使用native(内置)MySQL身份验证或插件未设置值时,这个变量将是NULL。请参阅第8.2.19节,“代理用户”

  • flush

    Command-Line Format --flush[={OFF|ON}]
    System Variable flush
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果ON,服务器将在每个SQL语句后flush(同步)所有更改到磁盘。如果通常情况下,MySQL将在每个SQL语句后将所有更改写入磁盘,并让操作系统处理同步到磁盘。请参阅第B.3.3.3节,“如果MySQL不断崩溃”。这个变量在使用mysqld时设置为ON,使用--flush选项。

    Note

    如果启用了flushflush_time的值无关紧要,flush_time的变化对flush行为无影响。

  • flush_time

    Command-Line Format --flush-time=#
    System Variable flush_time
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 31536000
    Unit

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

    Note

    如果启用了flushflush_time的值无关紧要,flush_time的变化对flush行为无影响。

  • foreign_key_checks

    System Variable foreign_key_checks
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    如果设置为1(默认),外键约束将被检查。如果设置为0,外键约束将被忽略,除了几个例外。在重新创建一个被删除的表时,如果表定义不符合引用该表的外键约束,将返回错误。类似地,ALTER TABLE操作将返回错误,如果外键定义不正确。更多信息,请见第15.1.20.5节,“FOREIGN KEY Constraints”

    设置这个变量对NDB表的影响与对InnoDB表的影响相同。通常,在正常操作中,您应该将其设置为启用,以确保引用完整性。禁用外键检查可以在重新加载InnoDB表时,使用不同的顺序。见第15.1.20.5节,“FOREIGN KEY Constraints”

    设置foreign_key_checks到0也会影响数据定义语句:DROP SCHEMA将删除一个包含外键的架构,即使该架构中的表引用了外部表,DROP TABLE将删除包含外键的表,即使该表引用了其他表。

    Note

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

    删除一个由外键约束所需的索引是不可行的,即使foreign_key_checks=0。外键约束必须被删除后才能删除索引。

  • ft_boolean_syntax

    Command-Line Format --ft-boolean-syntax=name
    System Variable ft_boolean_syntax
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value + -><()~*:""&|

    支持的布尔全文搜索操作符列表,用于使用IN BOOLEAN MODE的全文搜索。见第14.9.2节,“Boolean Full-Text Searches”

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

    • 操作符函数由字符串中的位置确定。

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

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

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

    • 不允许重复,except在位置11和12的引号操作符。这些两个字符不需要相同,但它们是唯一的两个可以是的。

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

  • ft_max_word_len

    Command-Line Format --ft-max-word-len=#
    System Variable ft_max_word_len
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 84
    Minimum Value 10
    Maximum Value 84

    MyISAM FULLTEXT索引中的单词的最大长度。

    Note

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

  • ft_min_word_len

    Command-Line Format --ft-min-word-len=#
    System Variable ft_min_word_len
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4
    Minimum Value 1
    Maximum Value 82

    MyISAM FULLTEXT索引中的单词的最小长度。

    Note

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

  • ft_query_expansion_limit

    Command-Line Format --ft-query-expansion-limit=#
    System Variable ft_query_expansion_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 20
    Minimum Value 0
    Maximum Value 1000

    使用 WITH QUERY EXPANSION执行的全文搜索的匹配数量限制。

  • ft_stopword_file

    Command-Line Format --ft-stopword-file=文件名
    System Variable ft_stopword_file
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名

    从哪个文件中读取全文搜索的停用词列表,以便在 MyISAM 表中执行全文搜索。服务器将在数据目录中寻找文件,除非指定了绝对路径以指定不同的目录。文件中的所有单词都将被使用;注释将被忽略。默认情况下,使用内置的停用词列表(在 storage/myisam/ft_static.c 文件中定义)。将该变量设置为空字符串('')将禁用停用词 filtering。请参阅第14.9.4节,“全文停用词”

    Note

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

  • general_log

    Command-Line Format --general-log[={OFF|ON}]
    System Variable general_log
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

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

  • general_log_file

    Command-Line Format --general-log-file=文件名
    System Variable general_log_file
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value host_name.log

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

  • generated_random_password_length

    Command-Line Format --generated-random-password-length=#
    System Variable generated_random_password_length
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 20
    Minimum Value 5
    Maximum Value 255

    CREATE USER、ALTER USER 和 SET PASSWORD 语句中允许的随机密码的最大字符数。更多信息,请见Random Password Generation

  • global_connection_memory_limit

    Command-Line Format --global-connection-memory-limit=#
    System Variable global_connection_memory_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 18446744073709551615
    Minimum Value 16777216
    Maximum Value 18446744073709551615
    Unit 字节

    设置所有用户连接的总内存使用量;即Global_connection_memory不应超过这个值。任何时候,如果它超过,这些查询(包括当前正在运行的查询)将被来自普通用户的拒绝,以ER_GLOBAL_CONN_LIMIT错误。

    系统用户,如 MySQL root 用户的内存使用量被包括在总内存使用量中,但不会计入断开连接的限制;这些用户永远不会由于内存使用而断开连接。

    InnoDB 缓冲池的内存使用量除外。

    您必须拥有SYSTEM_VARIABLES_ADMINSUPER特权来设置这个变量。

  • global_connection_memory_tracking

    Command-Line Format --global-connection-memory-tracking={TRUE|FALSE}
    System Variable global_connection_memory_tracking
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value FALSE

    确定服务器是否计算Global_connection_memory。这个变量必须被启用explicitly;否则,内存计算不进行,Global_connection_memory不被设置。

    您必须拥有SYSTEM_VARIABLES_ADMINSUPER权限,以设置该变量。

  • group_concat_max_len

    Command-Line Format --group-concat-max-len=#
    System Variable group_concat_max_len
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1024
    Minimum Value 4
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295

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

  • have_compress

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

  • have_dynamic_loading

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

  • have_geometry

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

  • have_profiling

    如果语句 profiling 能力存在,则为YES,否则为NO。如果存在,则系统变量profiling控制是否启用或禁用该能力。请参阅Section 15.7.7.32, “SHOW PROFILES Statement”

    该变量已弃用;您应该预期在未来 MySQL 发布中将其删除。

  • have_query_cache

    have_query_cache 已弃用,总是返回 NO,您应该预期在未来的 MySQL 版本中将其删除。

  • have_rtree_keys

    YES 如果存在 RTREE 索引,NO 如果不存在。 (这些用于 MyISAM 表中的空间索引。)

  • have_statement_timeout

    System Variable have_statement_timeout
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Boolean

    是否可用语句执行超时功能(见语句执行时间优化器提示)。值可以是 NO 如果该功能的背景线程无法初始化。

  • have_symlink

    YES 如果符号链接支持启用,NO 如果不启用。这是 Unix 上的要求,以支持 DATA DIRECTORYINDEX DIRECTORY 表选项。如果服务器使用 --skip-symbolic-links 选项启动,值为 DISABLED

    在 Windows 上,这个变量没有意义。

    Note

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

  • histogram_generation_max_mem_size

    Command-Line Format --histogram-generation-max-mem-size=#
    System Variable histogram_generation_max_mem_size
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 20000000
    Minimum Value 1000000
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295
    Unit 字节

    内存可用量的最大值,以用于生成histogram统计信息。见第10.9.6节,“优化器统计信息”,和第15.7.3.1节,“ANALYZE TABLE 语句”

    设置会话变量的值是一个受限制的操作。会话用户必须具有足够的权限以设置受限制的会话变量。见第7.1.9.1节,“系统变量权限”

  • host_cache_size

    Command-Line Format --host-cache-size=#
    System Variable host_cache_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value -1(表示自动调整;不要分配该字面值)
    Minimum Value 0
    Maximum Value 65536

    MySQL 服务器维护一个内存中的主机缓存,该缓存包含客户端主机名和IP地址信息,并用于避免Domain Name System(DNS)查找;见第7.1.12.3节,“DNS 查找和主机缓存”

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

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

    • 更改大小时将隐式执行主机缓存刷新操作,该操作将清除主机缓存,截断host_cache表,并解锁任何阻塞的主机。

    默认值是自动调整到128 plus 1 for a value of max_connections up to 500, plus 1 for every increment of 20 over 500 in the max_connections value, capped to a limit of 2000.

  • hostname

    System Variable hostname
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

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

  • identity

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

  • init_connect

    Command-Line Format --init-connect=name
    System Variable init_connect
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

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

    对拥有CONNECTION_ADMIN特权(或弃用的SUPER特权)的用户,init_connect的内容将不执行。这是为了防止因init_connect的错误值而导致客户端连接失败。例如,值可能包含语法错误的语句,从而导致客户端连接失败。为用户提供了拥有CONNECTION_ADMINSUPER特权的能力,可以打开连接并修复init_connect的值。

    init_connect的执行将被跳过任何已过期密码的客户端用户。这是因为这样一个用户不能执行任意语句,因此init_connect的执行将失败,导致客户端无法连接。跳过init_connect的执行使用户可以连接并更改密码。

    服务器将丢弃init_connect中的结果集。

  • information_schema_stats_expiry

    Command-Line Format --information-schema-stats-expiry=#
    System Variable information_schema_stats_expiry
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 86400
    Minimum Value 0
    Maximum Value 31536000
    Unit

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

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

    这些列表示动态表元数据,即信息随表内容变化而变化。

    默认情况下,MySQL 从 mysql.index_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_expiry0

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

    统计缓存可能在多语句事务中更新,直到事务提交前,这可能导致缓存中包含未知提交状态的信息。这可能发生在 autocommit=0START TRANSACTION 之后。

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

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

  • init_file

    Command-Line Format --init-file=file_name
    System Variable init_file
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名

    如果指定了该变量,则该变量将指定一个包含SQL语句的文件,该文件将在启动过程中被读取和执行。该文件支持以下构造:

    • delimiter ;

    • delimiter $$

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

    • 多行语句。

    • #字符到行尾的注释。

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

    • C风格的注释,从/*序列到*/序列,包括跨行的注释。

    • 多行字符串字面量,使用单引号(')或双引号(")字符。

    如果服务器使用--initialize--initialize-insecure选项,则它将在引导模式下运行,并且某些功能不可用,这些功能包括与帐户管理(如CREATE USERGRANT)相关的语句、复制和全局事务标识符。请参见第19.1.3节,“Replication with Global Transaction Identifiers”

    在服务器启动时创建的线程将用于任务,如创建数据字典、运行升级程序和创建系统表。为了确保稳定和可预测的环境,这些线程将使用服务器的内置默认值来执行某些系统变量,如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

    将被用于以下INSERTALTER TABLE语句中插入的AUTO_INCREMENT值。这主要用于二进制日志。

  • interactive_timeout

    Command-Line Format --interactive-timeout=#
    System Variable interactive_timeout
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 28800
    Minimum Value 1
    Maximum Value 31536000
    Unit

    服务器等待交互连接上的活动时间,以便关闭该连接。交互客户端是指使用mysql_real_connect()的客户端。请参阅wait_timeout

  • internal_tmp_mem_storage_engine

    Command-Line Format --internal-tmp-mem-storage-engine=#
    System Variable internal_tmp_mem_storage_engine
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value TempTable
    Valid Values

    MEMORY

    TempTable

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

    优化器使用optimizer根据internal_tmp_mem_storage_engine定义的存储引擎来处理内存临时表。

    internal_tmp_mem_storage_engine设置会话设置需要SESSION_VARIABLES_ADMINSYSTEM_VARIABLES_ADMIN特权。

  • join_buffer_size

    Command-Line Format --join-buffer-size=#
    System Variable join_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 262144
    Minimum Value 128
    Maximum Value (Windows) 4294967168
    Maximum Value (Other, 64-bit platforms) 18446744073709551488
    Maximum Value (Other, 32-bit platforms) 4294967168
    Unit 字节
    Block Size 128

    用于简单索引扫描、范围索引扫描和不使用索引的连接的缓冲区的最小大小。此变量还控制了哈希连接的内存使用。通常,获取快速连接的最佳方法是添加索引。增加join_buffer_size的值以获取快速全连接时添加索引不可行。每个全连接都分配一个连接缓冲区。对于使用索引不可行的复杂连接,可能需要多个连接缓冲区。

    默认值为256KB。join_buffer_size的最大允许设置为4GB−1。64位平台(除了64位Windows,64位平台的large值将被截断到4GB−1并显示警告)。块大小为128,MySQL Server在存储变量值之前将值rounded down到下一个整数倍的块大小。解析器允许的最大值为平台的最大无符号整数值(4294967295或232−1对于32位系统,18446744073709551615或264−1对于64位系统),但实际最大值是块大小以下。

    除非使用 Block Nested-Loop 或 Batched Key Access 算法,否则将 buffer 大小设置为每个匹配行所需的大小,并且所有连接操作至少分配最小大小,因此在全局设置时请小心设置该变量。更好的是,在会话中设置较大值,只在执行大连接操作的会话中设置该变量,或者使用 SET_VAR 优化提示 (见第10.9.3节,“Optimizer Hints”)。内存分配时间可能会导致性能下降,如果全局大小大于大多数查询所需的大小。

    当使用 Block Nested-Loop 时,较大的连接缓冲区可以提高性能,直到所有必要的列从所有行中存储在连接缓冲区中。这取决于查询;最优大小可能小于存储所有行的第一张表。

    当使用 Batched Key Access 时,join_buffer_size变量定义了每个请求到存储引擎的键批次大小。缓冲区越大,右侧表的顺序访问将变得更频繁,这可以显著提高性能。

    有关连接缓冲的更多信息,请见第10.2.1.7节,“Nested-Loop Join Algorithms”。有关 Batched Key Access 的信息,请见第10.2.1.12节,“Block Nested-Loop and Batched Key Access Joins”。有关 Hash 连接的信息,请见第10.2.1.4节,“Hash Join Optimization”

  • keep_files_on_create

    Command-Line Format --keep-files-on-create[={OFF|ON}]
    System Variable keep_files_on_create
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

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

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

  • key_buffer_size

    Command-Line Format --key-buffer-size=#
    System Variable key_buffer_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8388608
    Minimum Value 0
    Maximum Value (64-bit platforms) OS_PER_PROCESS_LIMIT
    Maximum Value (32-bit platforms) 4294967295
    Unit 字节

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

    最小的可接受设置是0,但是不能动态地将 key_buffer_size 设置为0。将 key_buffer_size 设置为0只能在启动时进行,否则将无法初始化键缓冲区。将 key_buffer_size 设置从0更改到非零值将初始化键缓冲区。

    key_buffer_size 只能以4096字节的倍数或整数增加或减少。增加或减少设置的非标准值将产生警告,并将设置截断到标准值。

    MyISAM 存储引擎的最大可接受设置为4GB-1在32位平台上。64位平台上允许更大的值。实际的最大值可能取决于您的可用物理RAM和每个进程的RAM限制,取决于您的操作系统或硬件平台。该变量的值表示请求的内存量。服务器将尽可能地分配内存,但实际分配的内存可能小于该值。

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

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

    您可以通过执行SHOW STATUS语句,并检查Key_read_requestsKey_readsKey_write_requestsKey_writes状态变量的值。 (请参阅第15.7.7节,“SHOW 语句”。) Key_reads/Key_read_requests的比率通常小于0.01。 Key_writes/Key_write_requests的比率通常接近1,如果您主要使用更新和删除操作,但可能会小于1,如果您经常执行更新操作影响多行或使用key_buffer_size系统变量。

    可以使用key_buffer_sizeKey_blocks_unused状态变量,结合缓冲区块大小,计算键缓冲区的使用率。

    1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)

    这个值是一个近似值,因为一些缓冲区空间用于内部结构。影响这些结构的因素包括块大小和指针大小。块大小增加时,缓冲区的使用率会减少。较大块结果在读取操作中读取更多键,但读取的键不一定是查询的键。

    可以创建多个key_cache_block_size系统变量。每个缓冲区的大小限制为4GB,不是总的限制。请参阅第10.10.2节,“MyISAM键缓存”

  • key_cache_age_threshold

    Command-Line Format --key-cache-age-threshold=#
    System Variable key_cache_age_threshold
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 300
    Minimum Value 100
    Maximum Value (64-bit platforms) 18446744073709551516
    Maximum Value (32-bit platforms) 4294967196
    Block Size 100

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

  • key_cache_block_size

    Command-Line Format --key-cache-block-size=#
    System Variable key_cache_block_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1024
    Minimum Value 512
    Maximum Value 16384
    Unit 字节
    Block Size 512

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

  • key_cache_division_limit

    Command-Line Format --key-cache-division-limit=#
    System Variable key_cache_division_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 100
    Minimum Value 1
    Maximum Value 100

    键缓存缓冲区列表的热和温子列表的分界点。值是缓冲区列表中用于温子列表的百分比。允许的值范围从1到100。默认值为100。见第10.10.2节,“MyISAM键缓存”

  • large_files_support

    System Variable large_files_support
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔

    是否编译了支持大文件的mysqld。

  • large_pages

    Command-Line Format --large-pages[={OFF|ON}]
    System Variable large_pages
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Platform Specific Linux
    Type 布尔
    Default Value OFF

    是否启用大页支持(通过--large-pages选项)。见第10.12.3.3节,“Enabling Large Page Support”

  • large_page_size

    System Variable large_page_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 65535
    Unit 字节

    如果启用了大页支持,这将显示内存页的大小。只有在 Linux 平台上支持大页;在其他平台上,这个变量的值总是 0。请参阅第 10.12.3.3 节,“启用大页支持”

  • last_insert_id

    将被返回的值是LAST_INSERT_ID()的值。这在使用LAST_INSERT_ID()在更新表的语句时将被存储在二进制日志中。设置这个变量不会更新mysql_insert_id()C API 函数的返回值。

  • lc_messages

    Command-Line Format --lc-messages=name
    System Variable lc_messages
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value en_US

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

  • lc_messages_dir

    Command-Line Format --lc-messages-dir=dir_name
    System Variable lc_messages_dir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称

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

  • lc_time_names

    Command-Line Format --lc-time-names=value
    System Variable lc_time_names
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    该变量指定控制显示日期和月份名称和缩写的语言。该变量影响了DATE_FORMAT()DAYNAME()MONTHNAME()函数的输出。locale名称是POSIX风格的值,如'ja_JP''pt_BR'。默认值是'en_US',无论系统的locale设置如何。有关详细信息,请参见第12.16节,“MySQL Server Locale Support”

  • license

    System Variable license
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value GPL

    服务器的许可类型。

  • local_infile

    Command-Line Format --local-infile[={OFF|ON}]
    System Variable local_infile
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    该变量控制服务器端LOAD DATA语句的LOCAL能力。根据local_infile设置,服务器拒绝或允许客户端具有LOCAL能力的数据加载。

    要明确地导致服务器拒绝或允许LOAD DATA LOCAL语句(无论客户端程序和库在编译或运行时的配置),启动mysqld并将local_infile设置为禁用或启用。可以在运行时设置local_infile。有关更多信息,请参见第8.1.6节,“LOAD DATA LOCAL安全考虑”

  • lock_wait_timeout

    Command-Line Format --lock-wait-timeout=#
    System Variable lock_wait_timeout
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 31536000
    Minimum Value 1
    Maximum Value 31536000
    Unit

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

    该超时对所有使用元数据锁定的语句生效。这些语句包括DML和DDL操作、表、视图、存储过程和存储函数、LOCK TABLESFLUSH TABLES WITH READ LOCKHANDLER语句。

    该超时不适用于隐式访问系统表的隐式访问,例如GRANTREVOKE语句或表日志语句。超时适用于直接访问系统表的语句,例如SELECTUPDATE

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

    lock_wait_timeout也定义了LOCK INSTANCE FOR BACKUP语句等待锁定的超时时间。

  • locked_in_memory

    System Variable locked_in_memory
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否使用mysqld锁定内存的--memlock选项。

  • log_error

    Command-Line Format --log-error[=file_name]
    System Variable log_error
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名

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

  • log_error_services

    Command-Line Format --log-error-services=value
    System Variable log_error_services
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value log_filter_internal; log_sink_internal

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

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

  • log_error_suppression_list

    Command-Line Format --log-error-suppression-list=value
    System Variable log_error_suppression_list
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 空字符串

    变量log_error_suppression_list应用于错误日志事件,并指定在事件出现时要抑制的事件。例如,如果某种类型的警告被认为是错误日志中的“噪音”,因为它频繁出现,但不是感兴趣,可以被抑制。这项变量影响了log_filter_internal错误日志过滤器组件的过滤操作,该组件默认启用(请参见第7.5.3节,“错误日志组件”)。如果log_error_suppression_list被禁用,该变量无效。

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

    ER_SERVER_SHUTDOWN_COMPLETE
    MY-000031
    000031
    MY-31
    31

    符号值优于数字值,以提高可读性和可移植性。关于允许的错误符号和数字,请参见MySQL 8.4 Error Message Reference

    log_error_suppression_list》的效果与《log_error_verbosity》的效果相结合。更多信息,请见第7.4.2.5节,“基于优先级的错误日志过滤(log_filter_internal)”

  • log_error_verbosity

    Command-Line Format --log-error-verbosity=#
    System Variable log_error_verbosity
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Minimum Value 1
    Maximum Value 3

    log_error_verbosity》系统变量指定错误日志处理事件的详细程度。这一变量影响了log_filter_internal错误日志过滤器组件的过滤效果,如果log_filter_internal被禁用,那么《log_error_verbosity》没有效果。

    为错误日志设计的事件具有优先级《ERROR》、《WARNING》或《INFORMATION》。《log_error_verbosity》根据优先级控制日志中写入的消息,如下表所示。

    log_error_verbosity Value Permitted Message Priorities
    1 ERROR
    2 ERROR, WARNING
    3 ERROR, WARNING, INFORMATION

    还有一种优先级是SYSTEM。系统消息关于非错误情况将被打印到错误日志中,独立于log_error_verbosity的值。这些消息包括启动和关闭消息,以及一些重要的设置变化。

    log_error_verbosity的效果与log_error_suppression_list的效果相结合。更多信息,请见第7.4.2.5节,“基于优先级的错误日志过滤(log_filter_internal)”

  • log_output

    Command-Line Format --log-output=name
    System Variable log_output
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 设置
    Default Value FILE
    Valid Values

    TABLE

    FILE

    NONE

    通用查询日志和慢查询日志的输出目标。值是一个或多个用逗号分隔的单词,来自TABLEFILENONETABLE选择将日志写入general_logslow_log表中的mysql系统架构。FILE选择将日志写入日志文件。NONE禁用日志。如果NONE在值中出现,它将优先于其他单词。TABLEFILE都可以给出日志输出目标。

    这个变量选择日志输出目标,但不启用日志输出。要做到这点,请启用general_logslow_query_log系统变量。对于FILE日志记录,general_log_fileslow_query_log_file系统变量确定日志文件位置。更多信息,请见第7.4.1节,“选择通用查询日志和慢查询日志输出目标”

  • log_queries_not_using_indexes

    Command-Line Format --log-queries-not-using-indexes[={OFF|ON}]
    System Variable log_queries_not_using_indexes
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果启用了慢查询日志,并且启用了该变量,查询将被记录。见第7.4.5节,“慢查询日志”。该选项并不一定意味着没有使用索引。例如,使用全索引扫描的查询使用了索引,但将被记录,因为索引不会限制行数。

  • log_raw

    Command-Line Format --log-raw[={OFF|ON}]
    System Variable log_raw
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    log_raw系统变量最初设置为--log-raw选项的值。见该选项的描述,以获取更多信息。系统变量也可以在运行时更改,以更改密码masking行为。

  • log_slow_admin_statements

    Command-Line Format --log-slow-admin-statements[={OFF|ON}]
    System Variable log_slow_admin_statements
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

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

  • log_slow_extra

    Command-Line Format --log-slow-extra[={OFF|ON}]
    System Variable log_slow_extra
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果慢查询日志启用,并且输出目标包括FILE,服务器将在日志文件行中添加字段,以提供关于慢查询的信息。请参阅第7.4.5节,“慢查询日志”TABLE输出不受影响。

  • log_timestamps

    Command-Line Format --log-timestamps=#
    System Variable log_timestamps
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value UTC
    Valid Values

    UTC

    SYSTEM

    该变量控制错误日志、一般查询日志和慢查询日志中的时间戳的时区。它不影响表格中(mysql.general_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

    Command-Line Format --log-throttle-queries-not-using-indexes=#
    System Variable log_throttle_queries_not_using_indexes
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295

    如果log_queries_not_using_indexes启用,log_throttle_queries_not_using_indexes变量将限制慢查询日志中的查询数量。值为0(默认)表示“无限制”。更多信息,请参阅第7.4.5节,“慢查询日志”

  • long_query_time

    Command-Line Format --long-query-time=#
    System Variable long_query_time
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 数字
    Default Value 10
    Minimum Value 0
    Maximum Value 31536000
    Unit

    如果查询时间超过这个值,服务器将增加Slow_queries状态变量。如果启用了慢查询日志,查询将被写入慢查询日志文件。这一值以实际时间为单位,而不是CPU时间,因此在轻负载系统上可能会超过阈值,而在重负载系统上可能不会。long_query_time的最小和默认值分别为0和10。最大值为31536000,相当于365天。该值可以指定到微秒的精度。请参阅第7.4.5节,“慢查询日志”

    较小的值将导致更多的语句被认为是长时间运行的,结果慢查询日志需要更多的空间。如果值小于1秒,日志可能在短时间内变得很大。增加语句被认为是长时间运行的结果也可能导致MySQL Enterprise Monitor中的“excessive Number of Long Running Processes警报”。因此,在生产环境中,很小的值应该只在测试环境中使用,或者在生产环境中只使用短时间。

    mysqldump执行了全表扫描,这意味着其查询可能会超过long_query_time设置的值。如果您想排除mysqldump生成的查询大多数或所有查询来自慢查询日志,可以使用--mysqld-long-query-time将会话变量的值更改为更高的值。

  • low_priority_updates

    Command-Line Format --low-priority-updates[={OFF|ON}]
    System Variable low_priority_updates
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果将其设置为1,则所有INSERTUPDATEDELETELOCK TABLE WRITE语句将等待没有pending的SELECTLOCK TABLE READ语句对该表。可以使用{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ...来降低单个查询的优先级。这变量只影响使用表级锁定的存储引擎(如MyISAMMEMORYMERGE),见第10.11.2节,“表锁定问题”

    设置会话变量的值是一个受限制的操作。会话用户必须具有足够的权限来设置受限制的会话变量,见第7.1.9.1节,“系统变量权限”

  • lower_case_file_system

    System Variable lower_case_file_system
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔

    该变量描述了文件系统中文件名的大小写敏感性。OFF表示文件名大小写敏感,ON表示文件名大小写不敏感。这变量是只读的,因为它反映了文件系统属性,设置它将无效。

  • lower_case_table_names

    Command-Line Format --lower-case-table-names[=#]
    System Variable lower_case_table_names
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value (macOS) 2
    Default Value (Unix) 0
    Default Value (Windows) 1
    Minimum Value 0
    Maximum Value 2

    如果设置为0,表名将存储为指定的名称,并且比较大小写敏感。如果设置为1,表名将存储为小写,并且比较大小写不敏感。如果设置为2,表名将存储为指定的名称,但比较大小写为小写。这选项也适用于数据库名和表别名。更多详细信息,请见第11.2.3节,“标识符大小写敏感性”

    该变量的默认值是平台相关的(见lower_case_file_system)。在 Linux 和其他 Unix-like 系统上,默认值为 0。在 Windows 上,默认值为 1。在 macOS 上,默认值为 2。在 Linux (和其他 Unix-like 系统上),将值设置为 2 不被支持;服务器将强制将值设置为 0

    您不应该将lower_case_table_names 设置为 0,如果您在运行 MySQL 的系统上数据目录位于一个不区分大小写的文件系统(例如 Windows 或 macOS)。这是一种不受支持的组合,可能会在运行一个错误的 INSERT INTO ... SELECT ... FROM tbl_name 操作时导致服务器崩溃。使用 MyISAM,使用不同大小写的表名可能会导致索引损坏。

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

    该变量的设置将影响复制过滤器选项的大小写敏感性。有关更多信息,请见第19.2.5节,“服务器评估复制过滤器规则”

    禁止在启动服务器时使用与初始化服务器时不同的lower_case_table_names 设置。限制是必要的,因为各种数据字典表字段的排序和比较是由初始化服务器时定义的设置确定,重新启动服务器时使用不同的设置将引入不一致。

    因此,在初始化服务器之前,需要配置lower_case_table_names 到所需的设置。在大多数情况下,这需要在 MySQL 选项文件中配置lower_case_table_names。对于 APT 安装在 Debian 和 Ubuntu 上,服务器将被初始化,您不能在选项文件中配置设置。您必须使用 debconf-set-selection 工具在安装 MySQL 使用 APT 之前启用lower_case_table_names。要做到这一点,请在安装 MySQL 使用 APT 之前运行以下命令:

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

    Command-Line Format --mandatory-roles=value
    System Variable mandatory_roles
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 空字符串

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

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

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

    设置mandatory_roles的运行时值需要ROLE_ADMIN特权,除非SUPER特权(已弃用)或SYSTEM_VARIABLES_ADMIN特权通常需要设置一个全局系统变量的运行时值。

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

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

    mandatory_roles值中指定的角色不能使用REVOKEDROP ROLEDROP USER语句来撤销或删除。

    为了防止会话默认成为系统会话,可以在mandatory_roles值中列出一个具有SYSTEM_USER特权的角色:

    强制角色,像明确授予的角色,直到激活(见激活角色)才生效。在登录时,如果activate_all_roles_on_login系统变量启用,则激活所有授予的角色;否则,为设置为默认角色。运行时,SET ROLE激活角色。

    分配给mandatory_roles的角色,但在分配时不存在,但后来创建了,可能需要特殊处理以被视为强制角色。详见定义强制角色

    SHOW GRANTS显示强制角色,根据Section 15.7.7.22, “SHOW GRANTS Statement”中描述的规则。

  • max_allowed_packet

    Command-Line Format --max-allowed-packet=#
    System Variable max_allowed_packet
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 67108864
    Minimum Value 1024
    Maximum Value 1073741824
    Unit 字节
    Block Size 1024

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

    数据包消息缓冲区初始化为net_buffer_length字节,但可以增长到max_allowed_packet字节时。这个值默认很小,以捕捉可能错误的包。

    您必须增加这个值,如果您使用的是大型BLOB列或长字符串。它应该与您想要使用的最大BLOB相同。协议对max_allowed_packet的限制为1GB。该值应该是1024的倍数;非倍数将被舍入到最近的倍数。

    当您更改消息缓冲区大小时,通过更改max_allowed_packet变量的值,您也应该在客户端更改缓冲区大小,如果客户端程序允许。如果客户端程序不允许,您可以在命令行或选项文件中设置max_allowed_packet变量。例如,mysqlmysqldump的默认值分别为16MB和24MB,可以通过设置max_allowed_packet变量来更改客户端值。

    该变量的会话值是只读的。客户端可以接收的字节数不超过会话值。但是,服务器不向客户端发送字节数超过当前全局max_allowed_packet值的字节数(如果全局值小于会话值,则可能小于会话值)。

  • max_connect_errors

    Command-Line Format --max-connect-errors=#
    System Variable max_connect_errors
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 100
    Minimum Value 1
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295

    当一个主机的连续连接请求被中断而没有成功连接时,服务器将阻止该主机的进一步连接。如果从一个主机成功连接到服务器,则该主机的错误计数将被清零。要解除阻止的主机,请刷新主机缓存;请参阅刷新主机缓存

  • max_connections

    Command-Line Format --max-connections=#
    System Variable max_connections
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 151
    Minimum Value 1
    Maximum Value 100000

    同时连接的客户端连接的最大数量。最大有效值是open_files_limit的实际值减去810,和实际设置的max_connections值之间的较小值。

    更多信息,请见第7.1.12.1节,“连接接口”

  • max_delayed_threads

    Command-Line Format --max-delayed-threads=#
    Deprecated
    System Variable max_delayed_threads
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 20
    Minimum Value 0
    Maximum Value 16384

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

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

  • max_digest_length

    Command-Line Format --max-digest-length=#
    System Variable max_digest_length
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1024
    Minimum Value 0
    Maximum Value 1048576
    Unit 字节

    每个会话用于计算normalized statement digests的内存保留字节数。该数量使用完毕后,会发生截断:在digest计算过程中不再收集或将其作为digest值的一部分。statements如果在该数量字节内不同,生产相同normalized statement digest并被认为是相同的,如果比较或聚合用于digest统计。

    Warning

    max_digest_length设置为零禁用digest生产,也禁用需要digest的服务器功能,如MySQL Enterprise Firewall。

    减少max_digest_length值减少内存使用,但使得更多语句的digest值变得不可区分。增加值允许更长语句被区分,但增加内存使用,特别是对于同时连接的会话较多的工作负载(服务器分配max_digest_length字节每个会话)。

    解析器使用该系统变量作为normalized 语句摘要的最大长度限制,它计算的。性能 Schema,如果它跟踪语句摘要,使用performance_schema_max_digest_length系统变量作为摘要的最大长度限制。因此,如果performance_schema_max_digest_length小于max_digest_length,性能 Schema 中存储的摘要值将相对于原始摘要值进行截断。

    关于语句摘要的更多信息,请见第29.10节,“性能 Schema 语句摘要和采样”

  • max_error_count

    Command-Line Format --max-error-count=#
    System Variable max_error_count
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1024
    Minimum Value 0
    Maximum Value 65535

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

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

  • max_execution_time

    Command-Line Format --max-execution-time=#
    System Variable max_execution_time
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295
    Unit 毫秒

    SELECT 语句的执行超时,单位为毫秒。如果值为 0,超时将被禁用。

    max_execution_time的应用如下:

  • max_heap_table_size

    Command-Line Format --max-heap-table-size=#
    System Variable max_heap_table_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 16777216
    Minimum Value 16384
    Maximum Value (64-bit platforms) 18446744073709550592
    Maximum Value (32-bit platforms) 4294966272
    Unit 字节
    Block Size 1024

    这个变量设置了用户创建的MEMORY表的最大大小。变量的值用于计算MEMORY表的MAX_ROWS值。

    设置这个变量对现有MEMORY表没有影响,除非表被重新创建使用CREATE TABLE语句或使用ALTER TABLETRUNCATE TABLE语句。服务器重启也将现有MEMORY表的最大大小设置为全局max_heap_table_size值。

    这个变量也用于与tmp_table_size一起限制内存中临时表的大小。请参阅第10.4.4节,“MySQL内部临时表使用”

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

  • max_insert_delayed_threads

    Deprecated
    System Variable max_insert_delayed_threads
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 20
    Maximum Value 16384

    这个变量是max_delayed_threads的同义词。像max_delayed_threads一样,它已被弃用(因为DELAYED插入不支持)且将在未来的 MySQL 发布中删除。

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

  • max_join_size

    Command-Line Format --max-join-size=#
    System Variable max_join_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 18446744073709551615
    Minimum Value 1
    Maximum Value 18446744073709551615

    这个变量表示了连接的最大行访问数。如果服务器的估计表明连接需要读取的行数超过max_join_size,则语句将被拒绝。

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

  • max_length_for_sort_data

    Command-Line Format --max-length-for-sort-data=#
    Deprecated
    System Variable max_length_for_sort_data
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4096
    Minimum Value 4
    Maximum Value 8388608
    Unit 字节

    这个变量已经弃用,在 MySQL 8.4 中没有效果。

  • max_points_in_geometry

    Command-Line Format --max-points-in-geometry=#
    System Variable max_points_in_geometry
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 65536
    Minimum Value 3
    Maximum Value 1048576

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

  • max_prepared_stmt_count

    Command-Line Format --max-prepared-stmt-count=#
    System Variable max_prepared_stmt_count
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 16382
    Minimum Value 0
    Maximum Value 4194304

    这个变量限制了服务器中的总 Prepared 语句数量。在环境中,可能会出现基于服务器内存耗尽的拒绝服务攻击,可以使用该变量来限制 Prepared 语句的数量。如果设置的值小于当前 Prepared 语句的数量,当前 Prepared 语句将不受影响,但不能再添加新的 Prepared 语句。将值设置为 0 将禁用 Prepared 语句。

  • max_seeks_for_key

    Command-Line Format --max-seeks-for-key=#
    System Variable max_seeks_for_key
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value (Windows) 4294967295
    Default Value (Other, 64-bit platforms) 18446744073709551615
    Default Value (Other, 32-bit platforms) 4294967295
    Minimum Value 1
    Maximum Value (Windows) 4294967295
    Maximum Value (Other, 64-bit platforms) 18446744073709551615
    Maximum Value (Other, 32-bit platforms) 4294967295

    限制索引搜索的最大次数。MySQL 优化器假设在搜索匹配行时,索引搜索的次数不会超过这个值,不管实际索引的 cardinality(see Section 15.7.7.23, “SHOW INDEX Statement”)。将这个值设置为一个低值(例如 100),可以强制 MySQL 优先使用索引,而不是表扫描。

  • max_sort_length

    Command-Line Format --max-sort-length=#
    System Variable max_sort_length
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1024
    Minimum Value 4
    Maximum Value 8388608
    Unit 字节

    排序字符串值时使用的字节数,使用PAD SPACE排序时的值。服务器将使用最多max_sort_length字节的值,并忽略其它部分。因此,这些值在max_sort_length字节前相同的值将被视为相等,以便于GROUP BYORDER BYDISTINCT操作。 (这与之前的MySQL版本不同,该设置将应用于所有值用于比较的值。)

    增加max_sort_length的值可能需要增加sort_buffer_size的值。详见第10.2.1.16节,“ORDER BY Optimization”

  • max_sp_recursion_depth

    Command-Line Format --max-sp-recursion-depth[=#]
    System Variable max_sp_recursion_depth
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 255

    存储过程的递归调用次数。默认值为0,这完全禁用存储过程的递归调用。最大值为255。

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

  • max_user_connections

    Command-Line Format --max-user-connections=#
    System Variable max_user_connections
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295

    允许任何给定MySQL用户帐户的同时连接数的最大值。值为0(默认)意味着“无限制”。

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

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

  • max_write_lock_count

    Command-Line Format --max-write-lock-count=#
    System Variable max_write_lock_count
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value (Windows) 4294967295
    Default Value (Other, 64-bit platforms) 18446744073709551615
    Default Value (Other, 32-bit platforms) 4294967295
    Minimum Value 1
    Maximum Value (Windows) 4294967295
    Maximum Value (Other, 64-bit platforms) 18446744073709551615
    Maximum Value (Other, 32-bit platforms) 4294967295

    在写锁请求达到这个数量时,允许一些挂起的读锁请求被处理。在写锁请求中,读锁请求具有更高的优先级。然而,如果max_write_lock_count设置为某个低值(例如10),读锁请求可能会优先于挂起的写锁请求,因为读锁请求已经被10个写锁请求所超越。通常,这种行为不会发生,因为max_write_lock_count默认值非常大。

  • mecab_rc_file

    Command-Line Format --mecab-rc-file=file_name
    System Variable mecab_rc_file
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type File name

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

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

    关于 MeCab 全文搜索解析器的信息,请参见第14.9.9节,“MeCab Full-Text Parser Plugin”

    关于在 MeCab 配置文件 mecabrc 中指定的选项,请参见MeCab 文档,在Google 开发者网站上。

  • min_examined_row_limit

    Command-Line Format --min-examined-row-limit=#
    System Variable min_examined_row_limit
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295

    查询少于这个数字的行不被记录到慢查询日志中。

    设置会话变量的值是受限制的操作。会话用户必须具有设置受限制会话变量的权限。请参见第7.1.9.1节,“系统变量权限”

  • myisam_data_pointer_size

    Command-Line Format --myisam-data-pointer-size=#
    System Variable myisam_data_pointer_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 6
    Minimum Value 2
    Maximum Value 7
    Unit 字节

    用于创建 MyISAM 表时的默认指针大小,用于 CREATE TABLE 语句。该变量不能小于 2 或大于 7。默认值为 6。请参见第 B.3.2.10 节,“表已满”

  • myisam_max_sort_file_size

    Command-Line Format --myisam-max-sort-file-size=#
    System Variable myisam_max_sort_file_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value (Windows) 2146435072
    Default Value (Other, 64-bit platforms) 9223372036853727232
    Default Value (Other, 32-bit platforms) 2147483648
    Minimum Value 0
    Maximum Value (Windows) 2146435072
    Maximum Value (Other, 64-bit platforms) 9223372036853727232
    Maximum Value (Other, 32-bit platforms) 2147483648
    Unit 字节

    MySQL 在重建REPAIR TABLEALTER TABLELOAD DATA时,允许使用的临时文件大小(以字节为单位)。如果文件大小超过这个值,索引将使用键缓存,而不是文件系统。这可以减慢性能。该值以字节为单位。

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

  • myisam_mmap_size

    Command-Line Format --myisam-mmap-size=#
    System Variable myisam_mmap_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value (64-bit platforms) 18446744073709551615
    Default Value (32-bit platforms) 4294967295
    Minimum Value 7
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295
    Unit 字节

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

  • myisam_recover_options

    Command-Line Format --myisam-recover-options[=list]
    System Variable myisam_recover_options
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value OFF
    Valid Values

    OFF

    DEFAULT

    BACKUP

    FORCE

    QUICK

    设置 MyISAM 存储引擎恢复模式。变量值是 OFF, DEFAULT, BACKUP, FORCEQUICK 的任意组合。如果您指定多个值,请使用逗号分隔。指定变量无值的服务器启动是相同的指定 DEFAULT,指定明确的值 "" 将禁用恢复(与 OFF 值相同)。如果恢复启用,每当 mysqld 打开一个 MyISAM 表,它将检查该表是否标记为崩溃或未正确关闭。如果是这样, mysqld 将对该表进行检查。如果该表损坏, mysqld 尝试修复它。

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

    Option Description
    OFF 不进行恢复。
    DEFAULT 不进行备份、强制或快速检查的恢复。
    BACKUP 如果恢复过程中数据文件被修改,保存 tbl_name.MYD 文件的备份为 tbl_name-datetime.BAK
    FORCE 即使将删除多行,也强制修复表。
    QUICK 不检查表中的行,如果没有删除块。

    在服务器自动修复表之前,它将将修复信息写入错误日志。如果您想在用户干预下恢复大多数问题,可以使用选项 BACKUP,FORCE。这将强制修复表,即使一些行将被删除,但它将保留旧数据文件,以便您后来检查。

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

  • myisam_sort_buffer_size

    Command-Line Format --myisam-sort-buffer-size=#
    System Variable myisam_sort_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8388608
    Minimum Value 4096
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295
    Unit 字节

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

  • myisam_stats_method

    Command-Line Format --myisam-stats-method=name
    System Variable myisam_stats_method
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value nulls_unequal
    Valid Values

    nulls_unequal

    nulls_equal

    nulls_ignored

    服务器在收集MyISAM表的索引值分布统计信息时,对NULL值的处理方式。这個变量有三个可能的值:nulls_equalnulls_unequalnulls_ignored。对于nulls_equal,所有NULL索引值被认为是相等,形成一个大小为NULL值的单个值组。对于nulls_unequalNULL值被认为是不相等,每个NULL值形成一个大小为1的值组。对于nulls_ignoredNULL值被忽略。

    生成表统计信息的方法对优化器选择索引的执行方式进行了描述,见第10.3.8节,“InnoDB and MyISAM Index Statistics Collection”

  • myisam_use_mmap

    Command-Line Format --myisam-use-mmap[={OFF|ON}]
    System Variable myisam_use_mmap
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

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

  • mysql_native_password_proxy_users

    Command-Line Format --mysql-native-password-proxy-users[={OFF|ON}]
    System Variable mysql_native_password_proxy_users
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    该变量控制是否支持mysql_native_password内置身份验证插件(已弃用)的代理用户功能。它只有在check_proxy_users系统变量和mysql_native_password插件启用时才生效。关于用户代理,请见第8.2.19节,“Proxy Users”

  • named_pipe

    Command-Line Format --named-pipe[={OFF|ON}]
    System Variable named_pipe
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Platform Specific Windows
    Type 布尔
    Default Value OFF

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

  • named_pipe_full_access_group

    Command-Line Format --named-pipe-full-access-group=value
    System Variable named_pipe_full_access_group
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Platform Specific Windows
    Type 字符串
    Default Value 空字符串
    Valid Values

    空字符串

    有效的Windows本地组名称

    *

    (仅限Windows.) 在启用named_pipe系统变量支持命名管道连接时,MySQL服务器将将访问控制授予客户端在创建的命名管道上,以便成功通信。一些MySQL客户端软件可以打开命名管道连接无需额外配置;然而,其他客户端软件可能仍然需要完全访问以打开命名管道连接。

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

    可以创建一个新的Windows本地组(例如:mysql_access_client_users)并将其用作访问控制的替代方案。在这种情况下,限制组的成员数量,并在客户端软件升级时从组中移除用户。非组成员尝试打开连接到MySQL的命名管道客户端时将被拒绝访问,直到Windows管理员将用户添加到组中。新添加的用户必须重新登录以加入组(由Windows所需)。

    将值设置为 '*everyone*' 提供了语言无关的方式来引用Windows中的Everyone组。Everyone组默认不安全。

  • net_buffer_length

    Command-Line Format --net-buffer-length=#
    System Variable net_buffer_length
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 16384
    Minimum Value 1024
    Maximum Value 1048576
    Unit 字节
    Block Size 1024

    每个客户端线程都关联一个连接缓冲区和结果缓冲区。两个缓冲区的初始大小由net_buffer_length确定,但可以动态扩展到max_allowed_packet字节。结果缓冲区在每个SQL语句执行后将被缩小到net_buffer_length

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

    这个变量的会话值是只读的。

  • net_read_timeout

    Command-Line Format --net-read-timeout=#
    System Variable net_read_timeout
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 30
    Minimum Value 1
    Maximum Value 31536000
    Unit

    连接读取超时的秒数。服务器读取客户端时,net_read_timeout控制读取超时。服务器写入客户端时,net_write_timeout控制写入超时。见replica_net_timeout

  • net_retry_count

    Command-Line Format --net-retry-count=#
    System Variable net_retry_count
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10
    Minimum Value 1
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295

    如果对通信端口的读取或写入被中断,重试这个次数后才放弃。这值在 FreeBSD 上应该设置得很高,因为内部中断将发送给所有线程。

  • net_write_timeout

    Command-Line Format --net-write-timeout=#
    System Variable net_write_timeout
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 60
    Minimum Value 1
    Maximum Value 31536000
    Unit

    等待连接上写入一个块的秒数,直到写入操作失败。详见net_read_timeout

  • ngram_token_size

    Command-Line Format --ngram-token-size=#
    System Variable ngram_token_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2
    Minimum Value 1
    Maximum Value 10

    定义n-gram全文本解析器的n-gram token size。ngram_token_size选项是只读的,不能在运行时修改。默认值为2(bigram)。最大值为10。

    了解如何配置该变量的更多信息,请见第14.9.8节,“ngram Full-Text Parser”

  • offline_mode

    Command-Line Format --offline-mode[={OFF|ON}]
    System Variable offline_mode
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

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

    将服务器设置为离线模式,请将offline_mode系统变量从OFF更改为ON。要恢复正常操作,请将offline_modeON更改为OFF。控制离线模式需要管理员账户拥有SYSTEM_VARIABLES_ADMIN特权和CONNECTION_ADMIN特权(或弃用的SUPER特权,涵盖这两个特权)。

    离线模式具有以下特征:

    • 没有CONNECTION_ADMINSUPER特权的客户端用户将在下一个请求中断开连接,并收到适当的错误。断开连接包括终止正在运行的语句和释放锁定。这些客户端用户也不能初始化新的连接,并收到适当的错误。

    • 拥有CONNECTION_ADMINSUPER特权的客户端用户不会断开连接,并且可以初始化新的连接以管理服务器。

    • 如果将服务器设置为离线模式的用户没有SYSTEM_USER特权,拥有SYSTEM_USER特权的客户端用户也不会断开连接。然而,这些用户不能在服务器处于离线模式时初始化新的连接,除非他们拥有CONNECTION_ADMINSUPER特权。只有他们的现有连接不能被终止,因为SYSTEM_USER特权是必要的,以杀死执行中的会话或语句。

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

  • old_alter_table

    Command-Line Format --old-alter-table[={OFF|ON}]
    System Variable old_alter_table
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

    当该变量启用时,服务器不使用优化的方法来处理ALTER TABLE操作。它会重新使用临时表,复制数据,并将临时表重命名为原始表,类似于MySQL 5.0和更早版本的操作。关于ALTER TABLE的操作信息,请见第15.1.9节,“ALTER TABLE 语句”

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

  • open_files_limit

    Command-Line Format --open-files-limit=#
    System Variable open_files_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 5000,可能需要调整
    Minimum Value 0
    Maximum Value 平台依赖

    可供mysqld从操作系统获取的文件描述符数量:

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

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

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

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

      在 Windows 上,只有 2048(C 运行时库文件描述符最大值)被添加到这个数字中。这总共是 10209,使用默认值的系统变量。

    • max_connections * 5

    • 操作系统限制。

    服务器尝试使用最大值中的文件描述符数量,如果不能获得那么多的描述符,服务器将尝试获得操作系统允许的最大数量。

    实际值在系统上不能更改文件描述符数量的地方是 0。

    在 Unix 上,这个值不能超过 ulimit -n 命令显示的值。在使用 systemd 的 Linux 系统上,这个值不能超过 LimitNOFILE(如果 LimitNOFILE 没有设置),否则在 Linux 上,这个值不能超过 ulimit -n

  • optimizer_prune_level

    Command-Line Format --optimizer-prune-level=#
    System Variable optimizer_prune_level
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 0
    Maximum Value 1

    控制查询优化器在查询优化过程中应用的 heuristics,以 pruning 不太有希望的部分计划从优化器搜索空间中。值为 0 将禁用 heuristics,使优化器执行 exhaustive 搜索。值为 1 将使优化器根据中间计划中检索的行数来 pruning 计划。

  • optimizer_search_depth

    Command-Line Format --optimizer-search-depth=#
    System Variable optimizer_search_depth
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 62
    Minimum Value 0
    Maximum Value 62

    查询优化器的搜索深度。值大于查询结果中的关系数,生成的查询计划更好,但生成时间更长。值小于查询结果中的关系数,生成查询计划更快,但生成的计划可能不太好。如果设置为0,系统将自动选择合理的值。

  • optimizer_switch

    Command-Line Format --optimizer-switch=value
    System Variable optimizer_switch
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 设置
    Valid Values

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_condition_pushdown={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    hash_join={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    prefer_ordering_index={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    subquery_to_derived={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    Valid Values

    批量键访问={on|off}

    块嵌套循环={on|off}

    条件分支过滤={on|off}

    派生合并={on|off}

    重复weedout={on|off}

    引擎条件推送={on|off}

    首匹配={on|off}

    哈希连接={on|off}

    索引条件推送={on|off}

    索引合并={on|off}

    索引合并交叉={on|off}

    索引合并排序并集={on|off}

    索引合并并集={on|off}

    松散扫描={on|off}

    物化={on|off}

    MRR={on|off}

    MRR基于成本={on|off}

    优先排序索引={on|off}

    半连接={on|off}

    跳过扫描={on|off}

    子查询物化基于成本={on|off}

    子查询到派生={on|off}

    使用索引扩展={on|off}

    使用不可见索引={on|off}

    Valid Values

    批量键访问={on|off}

    块嵌套循环={on|off}

    条件分支过滤={on|off}

    派生合并={on|off}

    重复weedout={on|off}

    引擎条件推送={on|off}

    首匹配={on|off}

    哈希连接={on|off}

    索引条件推送={on|off}

    索引合并={on|off}

    索引合并交叉={on|off}

    索引合并排序并集={on|off}

    索引合并并集={on|off}

    松散扫描={on|off}

    物化={on|off}

    MRR={on|off}

    MRR基于成本={on|off}

    半连接={on|off}

    跳过扫描={on|off}

    子查询物化基于成本={on|off}

    子查询到派生={on|off}

    使用索引扩展={on|off}

    使用不可见索引={on|off}

    Valid Values

    批处理键访问={on|off}

    块嵌套循环={on|off}

    条件扇出过滤={on|off}

    派生合并={on|off}

    重复weedout={on|off}

    引擎条件推送={on|off}

    首匹配={on|off}

    索引条件推送={on|off}

    索引合并={on|off}

    索引合并交叉={on|off}

    索引合并排序并集={on|off}

    索引合并并集={on|off}

    松散扫描={on|off}

    物化={on|off}

    MRR={on|off}

    MRR基于成本={on|off}

    半连接={on|off}

    跳过扫描={on|off}

    子查询物化基于成本={on|off}

    使用索引扩展={on|off}

    使用不可见索引={on|off}

    系统变量optimizer_switch控制优化器行为。该变量的值是一个标志集,每个标志都有一个值为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

    Command-Line Format --optimizer-trace=value
    System Variable optimizer_trace
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    该变量控制优化器跟踪。详细信息,请见MySQL Internals: Tracing the Optimizer

  • optimizer_trace_features

    Command-Line Format --optimizer-trace-features=value
    System Variable optimizer_trace_features
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    该变量启用或禁用选择的优化器跟踪功能。详细信息,请见MySQL Internals: Tracing the Optimizer.

  • optimizer_trace_limit

    Command-Line Format --optimizer-trace-limit=#
    System Variable optimizer_trace_limit
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 0
    Maximum Value 2147483647

    显示的最大优化器跟踪数量。详细信息,请见MySQL Internals: Tracing the Optimizer.

  • optimizer_trace_max_mem_size

    Command-Line Format --optimizer-trace-max-mem-size=#
    System Variable optimizer_trace_max_mem_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1048576
    Minimum Value 0
    Maximum Value 4294967295
    Unit 字节

    存储的优化器跟踪的最大累积大小。详细信息,请见MySQL Internals: Tracing the Optimizer.

  • optimizer_trace_offset

    Command-Line Format --optimizer-trace-offset=#
    System Variable optimizer_trace_offset
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value -1
    Minimum Value -2147483647
    Maximum Value 2147483647

    优化器跟踪的偏移量。详细信息,请见MySQL Internals: Tracing the Optimizer.

  • performance_schema_xxx

    性能 Schema 系统变量列表见Section 29.15, “Performance Schema System Variables”。这些变量可能用于配置性能 Schema 操作。

  • parser_max_mem_size

    Command-Line Format --parser-max-mem-size=#
    System Variable parser_max_mem_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value (64-bit platforms) 18446744073709551615
    Default Value (32-bit platforms) 4294967295
    Minimum Value 10000000
    Maximum Value (64-bit platforms) 18446744073709551615
    Maximum Value (32-bit platforms) 4294967295
    Unit 字节

    解析器可用的最大内存量。默认值不限制内存可用量,可以将其减少以保护对长或复杂SQL语句的解析可能导致的内存不足情况。

  • partial_revokes

    Command-Line Format --partial-revokes[={OFF|ON}]
    System Variable partial_revokes
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value

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

    ON (如果部分撤销存在)

    启用该变量使得可以部分撤销权限。特别是,对于拥有全局权限的用户,partial_revokes 允许在特定的架构中撤销权限,而不是撤销所有权限。例如,对于拥有全局UPDATE权限的用户,可以限制其在mysql架构中执行UPDATE操作。换言之,该用户的全局UPDATE权限部分撤销。

    启用partial_revokes后,不能禁用该变量,如果存在任何账户具有权限限制,禁用partial_revokes将失败。

    要禁用partial_revokes,首先修改每个具有部分撤销权限的账户,或者重新授予权限或删除账户。

    Note

    在权限分配中,启用partial_revokes将使MySQL将未转义的_%SQL通配符字符在架构名称中解释为字面字符,就像它们被转义为\_\%一样。由于这将改变MySQL解释权限的方式,因此在可能启用partial_revokes的安装中,可能需要避免在权限分配中使用未转义的通配符字符。

    此外,使用_%作为通配符字符在授权中的使用已经被弃用,您应该预期在未来版本的MySQL中将其支持移除。

    有关更多信息,包括删除部分撤销的指令,请见第8.2.12节,“权限限制使用部分撤销”

  • password_history

    Command-Line Format --password-history=#
    System Variable password_history
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295

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

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

    全局密码更改次数限制可以在个别帐户中使用PASSWORD HISTORY选项的CREATE USERALTER USER语句中进行覆盖。请见第8.2.15节,“密码管理”

  • password_require_current

    Command-Line Format --password-require-current[={OFF|ON}]
    System Variable password_require_current
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    该变量定义了控制帐户密码更改时是否需要指定当前密码的全局策略。

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

    全球验证所需的策略可以在使用PASSWORD REQUIRE选项的CREATE USERALTER USER语句中为单个帐户进行override。请参阅第8.2.15节,“密码管理”

  • password_reuse_interval

    Command-Line Format --password-reuse-interval=#
    System Variable password_reuse_interval
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295
    Unit

    该变量定义了全球密码重用策略,基于时间的延迟。对于之前使用的帐户密码,该变量指示了在重用密码之前必须经过的天数。如果值为0(默认值),则没有基于时间的重用限制。

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

    全球时间延迟密码重用策略可以在使用PASSWORD REUSE INTERVAL选项的CREATE USERALTER USER语句中为单个帐户进行override。请参阅第8.2.15节,“密码管理”

  • persisted_globals_load

    Command-Line Format --persisted-globals-load[={OFF|ON}]
    System Variable persisted_globals_load
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    是否从数据目录中的mysqld-auto.cnf文件中加载 persisted 配置设置。服务器通常在启动时处理该文件(见第6.2.2.2节,“使用选项文件”)。禁用persisted_globals_load将使服务器启动序列跳过mysqld-auto.cnf

    要修改mysqld-auto.cnf的内容,使用SET PERSISTSET PERSIST_ONLYRESET PERSIST语句。详见第7.1.9.3节,“ Persisted System Variables”

  • persist_only_admin_x509_subject

    Command-Line Format --persist-only-admin-x509-subject=string
    System Variable persist_only_admin_x509_subject
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 空字符串

    SET PERSISTSET PERSIST_ONLY使得系统变量可以被 persisted 到mysqld-auto.cnf选项文件中(见第15.7.6.1节,“SET Syntax for Variable Assignment”)。persisting系统变量使得可以在服务器重启后应用配置更改,这对远程管理非常有用。但是,有些系统变量是不可 persist 的或只能在某些限制条件下 persist。

    系统变量persist_only_admin_x509_subject指定了用户必须具有的SSL证书X.509主体值,以便可以 persist persist-限制的系统变量。默认值是空字符串,这意味着不能 persist 任何用户的 persist-限制的系统变量。

    如果persist_only_admin_x509_subject非空,使用加密连接连接到服务器并提供指定主体值的SSL证书的用户,可以使用SET PERSIST_ONLY来 persist persist-限制的系统变量。关于 persist-限制的系统变量和启用persist_only_admin_x509_subject的配置信息,请见第7.1.9.4节,“Nonpersistible and Persist-Restricted System Variables”

  • persist_sensitive_variables_in_plaintext

    Command-Line Format --persist_sensitive_variables_in_plaintext[={OFF|ON}]
    System Variable persist_sensitive_variables_in_plaintext
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

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

    默认设置为ON,如果keyring 组件支持可用,服务器将加密值;否则,如果keyring 组件支持不可用,服务器将将敏感系统变量的值存储在未加密的格式中(带警告)。下次设置任何 persisted 系统变量时,如果keyring 组件支持可用,服务器将加密未加密的敏感系统变量的值。ON设置也允许服务器在加密系统变量值不能被解密时启动,在这种情况下,服务器将发出警告,并使用默认值来设置系统变量的值。在这种情况下,不能更改系统变量的值,直到它们可以被解密。

    最安全的设置为OFF,这意味着敏感系统变量的值不能在keyring 组件支持不可用时被 persisted。如果设置为OFF,服务器也不能在加密系统变量值不能被解密时启动。

    更多信息,请见 Persisting Sensitive System Variables.

  • pid_file

    Command-Line Format --pid-file=file_name
    System Variable pid_file
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名

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

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

  • plugin_dir

    Command-Line Format --plugin-dir=dir_name
    System Variable plugin_dir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value BASEDIR/lib/plugin

    插件目录的路径名。

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

  • port

    Command-Line Format --port=port_num
    System Variable port
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 3306
    Minimum Value 0
    Maximum Value 65535

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

  • preload_buffer_size

    Command-Line Format --preload-buffer-size=#
    System Variable preload_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 32768
    Minimum Value 1024
    Maximum Value 1073741824
    Unit 字节

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

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

  • print_identified_with_as_hex

    Command-Line Format --print-identified-with-as-hex[={OFF|ON}]
    System Variable print_identified_with_as_hex
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

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

  • profiling

    如果设置为0或OFF(默认值),语句 profiling 将被禁用。如果设置为1或ON,语句 profiling 将被启用,并且SHOW PROFILESHOW PROFILES语句将提供 profiling 信息。请参阅Section 15.7.7.32, “SHOW PROFILES Statement”

    该变量已弃用;在将来 MySQL 发布中将被删除。

  • profiling_history_size

    如果启用profiling,则将维护的语句数量。默认值为15。最大值为100。将值设置为0将禁用 profiling。请参阅Section 15.7.7.32, “SHOW PROFILES Statement”

    该变量已弃用;在将来 MySQL 发布中将被删除。

  • protocol_compression_algorithms

    Command-Line Format --protocol-compression-algorithms=value
    System Variable protocol_compression_algorithms
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 设置
    Default Value zlib,zstd,uncompressed
    Valid Values

    zlib

    zstd

    uncompressed

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

    protocol_compression_algorithms不控制X协议的连接压缩。请参阅第22.5.5节,“X插件连接压缩”了解如何操作。

    变量值是一个逗号分隔的压缩算法名称列表,可以是任意顺序,来自以下项目(不区分大小写):

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

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

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

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

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

  • protocol_version

    System Variable protocol_version
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 10
    Minimum Value 0
    Maximum Value 4294967295

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

  • proxy_user

    System Variable proxy_user
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    如果当前客户端是另一个用户的代理,那么这个变量是代理用户帐户名称。否则,这个变量是NULL。请参阅第8.2.19节,“代理用户”

  • pseudo_replica_mode

    System Variable pseudo_replica_mode
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔

    pseudo_replica_mode 是服务器内部使用的变量。它帮助正确地处理来自较老或较新的服务器的事务。mysqlbinlog 在执行任何 SQL 语句之前将pseudo_replica_mode 设置为 true。

    pseudo_replica_mode 的会话值是受限制的操作。会话用户必须拥有REPLICATION_APPLIER特权(见第19.3.3节,“Replication Privilege Checks”)或具有设置受限制会话变量的权限(见第7.1.9.1节,“System Variable Privileges”)。然而,请注意该变量不供用户设置;它将自动由复制基础结构设置。

    pseudo_replica_mode 对于XA事务的处理方式如下,可以附加到或从会话中分离(默认情况下是会话,该会话执行XA START语句):

    • 如果为真,并且会话已经执行了内部使用的BINLOG语句,XA事务将在事务的第一部分完成XA PREPARE后自动从会话中分离,以便任何具有XA_RECOVER_ADMIN特权的会话可以提交或回滚事务。

    • 如果为假,XA事务将与会话保持关联直到会话关闭或服务器重启时才分离。

    pseudo_replica_mode 对于original_server_version系统变量和original_commit_timestamp复制延迟时间戳有以下影响:

    • 如果为真,则不显式设置original_commit_timestamporiginal_server_version的事务被假设来自另一个未知的服务器,因此将0(未知)分配给时间戳和系统变量。

    • 如果为假,则不显式设置original_commit_timestamporiginal_server_version的事务被假设来自当前服务器,因此将当前时间戳和当前服务器的版本分配给时间戳和系统变量。

    pseudo_replica_mode对处理设置一个或多个不支持(已删除或未知)的SQL模式的语句有以下影响:

    • 如果为真,服务器将忽略不支持的模式并发出警告。

    • 如果为假,服务器将拒绝语句并返回ER_UNSUPPORTED_SQL_MODE错误。

  • pseudo_slave_mode

    Deprecated
    System Variable pseudo_slave_mode
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔

    已弃用别名为pseudo_replica_mode

  • pseudo_thread_id

    System Variable pseudo_thread_id
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 2147483647
    Minimum Value 0
    Maximum Value 2147483647

    该变量用于内部服务器使用。

    Warning

    将会话值更改为pseudo_thread_id系统变量将更改CONNECTION_ID()函数返回的值。

    将会话值设置为该系统变量是受限制的操作。会话用户必须具有设置受限制的会话变量的权限。请参阅第7.1.9.1节,“系统变量权限”

  • query_alloc_block_size

    Command-Line Format --query-alloc-block-size=#
    System Variable query_alloc_block_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8192
    Minimum Value 1024
    Maximum Value 4294966272
    Unit 字节
    Block Size 1024

    内存块的分配大小,用于存储语句解析和执行期间创建的对象。如果您遇到内存碎片问题,可能需要增加该参数。

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

  • query_prealloc_size

    Command-Line Format --query-prealloc-size=#
    Deprecated
    System Variable query_prealloc_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8192
    Minimum Value 8192
    Maximum Value (64-bit platforms) 18446744073709550592
    Maximum Value (32-bit platforms) 4294966272
    Unit 字节
    Block Size 1024

    query_prealloc_size已弃用,设置它无效,您应该期望在未来的MySQL版本中删除它。

  • rand_seed1

    System Variable rand_seed1
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value N/A
    Minimum Value 0
    Maximum Value 4294967295

    变量rand_seed1rand_seed2只存在于会话变量中,可以设置,但不能读取。这些变量——但不是它们的值——在SHOW VARIABLES的输出中显示。

    这些变量的目的是支持RAND()函数的复制。对于调用RAND()的语句,源端将传递两个值给副本,副本使用这些值来设置会话变量rand_seed1rand_seed2,以便副本生成的随机数与源端相同。

  • rand_seed2

    请查看rand_seed1的描述。

  • range_alloc_block_size

    Command-Line Format --range-alloc-block-size=#
    System Variable range_alloc_block_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4096
    Minimum Value 4096
    Maximum Value (64-bit platforms) 18446744073709550592
    Maximum Value 4294966272
    Unit 字节
    Block Size 1024

    当执行范围优化时分配的块大小(以字节为单位)。

    字节的块大小为1024。MySQL Server在存储该系统变量的值之前将其值向下舍入到块大小的下一个整数倍。解析器允许的最大值为平台的最大无符号整数值(4294967295或2^32-1在32位系统上,18446744073709551615或2^64-1在64位系统上),但实际的最大值是块大小的下一个整数倍。

  • range_optimizer_max_mem_size

    Command-Line Format --range-optimizer-max-mem-size=#
    System Variable range_optimizer_max_mem_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8388608
    Minimum Value 0
    Maximum Value 18446744073709551615
    Unit 字节

    范围优化器的内存使用限制。值为0表示“无限制”。如果优化器估计使用的内存超过限制,它将放弃该计划并考虑其他计划。更多信息,请见Limiting Memory Use for Range Optimization

  • rbr_exec_mode

    System Variable rbr_exec_mode
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value STRICT
    Valid Values

    STRICT

    IDEMPOTENT

    mysqlbinlog内部使用。该变量将服务器切换到IDEMPOTENT模式和STRICT模式。IDEMPOTENT模式会抑制在BINLOG语句中出现的重复键和找不到键错误。该模式在重新播放基于行的二进制日志时非常有用,以避免与现有数据冲突。mysqlbinlog在指定--idempotent选项时设置该模式。

    SET SESSION RBR_EXEC_MODE=IDEMPOTENT;
  • read_buffer_size

    Command-Line Format --read-buffer-size=#
    System Variable read_buffer_size
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies Yes
    Type Integer
    Default Value 131072
    Minimum Value 8192
    Maximum Value 2147479552
    Unit 字节
    Block Size 4096

    每个线程在扫描MyISAM表时分配一个缓冲区的大小(以字节为单位)。如果您执行多个顺序扫描,您可能想增加该值,default为131072。该值应该是4KB的倍数。如果设置的值不是4KB的倍数,则将其下舍到最近的4KB倍数。

    该选项在以下情况下也用于其他存储引擎,除了InnoDB

    • 在排序行时缓存索引在临时文件(不是临时表)中的结果。

    • 在批量插入分区时。

    • 在缓存嵌套查询的结果时。

    read_buffer_size在其他存储引擎中还有一种使用方式:用于确定MEMORY表的内存块大小。

    select_into_buffer_size用于SELECT INTO DUMPFILESELECT INTO OUTFILE语句的I/O缓冲区大小(在所有其他情况下使用read_buffer_size)。

    关于不同操作中的内存使用信息,请见第10.12.3.1节,“MySQL如何使用内存”

  • read_only

    Command-Line Format --read-only[={OFF|ON}]
    System Variable read_only
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果启用read_only系统变量,服务器允许的唯一客户端更新是由拥有CONNECTION_ADMIN特权(或弃用的SUPER特权)的用户。该变量默认处于禁用状态。

    服务器还支持super_read_only系统变量(默认禁用),该变量具有以下效果:

    read_only启用且super_read_only启用时,服务器仍然允许这些操作:

    • 由复制线程执行的更新,如果服务器是一个副本。在复制设置中,可以启用read_only在副本服务器上,以确保副本服务器仅从源服务器接受更新,而不是从客户端。

    • 将系统表mysql.gtid_executed写入,这个表存储了执行的交易ID,该交易ID不在当前二进制日志文件中。

    • 使用ANALYZE TABLEOPTIMIZE TABLE语句。读取模式的目的是防止对表结构或内容的更改。分析和优化不属于更改的范畴。这意味着,例如,可以使用mysqlcheck --all-databases --analyze对只读副本进行一致性检查。

    • 使用FLUSH STATUS语句,这些语句总是写入到二进制日志中。

    • 对临时表的操作。

    • 将日志表(mysql.general_logmysql.slow_log)中的插入操作;见第7.4.1节,“选择通用查询日志和慢查询日志输出目的地”

    • 对性能Schema表的更新,例如UPDATETRUNCATE TABLE操作。

    在复制源服务器上设置read_only的值不会被复制到副本服务器上。该值可以在副本服务器上独立设置,不受源服务器的设置影响。

    以下条件适用于尝试启用read_only(包括隐式尝试结果来自启用super_read_only):

    • 尝试失败,并出现错误,如果您拥有任何明确锁(使用LOCK TABLES)或有待处理的事务。

    • 尝试阻塞其他客户端请求表锁或事务开始请求,直到锁释放和语句和事务结束为止。尝试启用read_only时,其他客户端的请求也会被阻塞,直到read_only被设置为止。

    • 尝试阻塞,如果有活动事务持有元数据锁,直到那些事务结束为止。

    • read_only可以在您持有全局读锁(使用FLUSH TABLES WITH READ LOCK)时启用,因为这不涉及表锁。

  • read_rnd_buffer_size

    Command-Line Format --read-rnd-buffer-size=#
    System Variable read_rnd_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 262144
    Minimum Value 1
    Maximum Value 2147483647
    Unit 字节

    该变量用于从MyISAM表中读取数据,以及对任何存储引擎进行Multi-Range Read优化。

    在对MyISAM表进行排序读取操作时,rows将通过该缓冲区读取,以避免磁盘寻道。详见第10.2.1.16节,“ORDER BY Optimization”。将该变量设置为大值可以大大提高ORDER BY性能。但是,这是一个客户端分配的缓冲区,因此您不应该将全局变量设置为大值。相反,在需要运行大查询的客户端中更改会话变量。

    关于内存使用的更多信息,请见第10.12.3.1节,“How MySQL Uses Memory”。关于Multi-Range Read优化的信息,请见第10.2.1.11节,“Multi-Range Read Optimization”

  • regexp_stack_limit

    Command-Line Format --regexp-stack-limit=#
    System Variable regexp_stack_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8000000
    Minimum Value 0
    Maximum Value 2147483647
    Unit 字节

    该变量用于指定用于正则表达式匹配操作的内存栈的最大可用字节数,该操作由REGEXP_LIKE()和类似函数执行(详见第14.8.2节,“Regular Expressions”)。

  • regexp_time_limit

    Command-Line Format --regexp-time-limit=#
    System Variable regexp_time_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 32
    Minimum Value 0
    Maximum Value 2147483647

    对正则表达式匹配操作的时间限制,包括REGEXP_LIKE()和类似函数(见第14.8.2节,“正则表达式”)。这个限制是指匹配引擎执行的最大步骤数,因此只间接地影响执行时间。通常情况下,它是以毫秒为单位的。

  • require_row_format

    System Variable require_row_format
    Scope Session
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    这个变量是由复制和mysqlbinlog内部服务器使用。它限制了会话中的DML事件只能执行在行基于二进制日志格式中,并且不能创建临时表。不能满足限制的查询将失败。

    将这个系统变量的会话值设置为ON不需要任何权限。将这个系统变量的会话值设置为OFF是受限制的操作,会话用户必须具有设置受限制的会话变量的权限。见第7.1.9.1节,“系统变量权限”

  • require_secure_transport

    Command-Line Format --require-secure-transport[={OFF|ON}]
    System Variable require_secure_transport
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否要求客户端连接到服务器时使用某种形式的安全传输。启用这个变量时,服务器仅允许使用TLS/SSL加密的TCP/IP连接或使用套接字文件(在Unix上)或共享内存(在Windows上)的连接。服务器将拒绝非安全连接尝试,这些尝试将以ER_SECURE_TRANSPORT_REQUIRED错误失败。

    这个功能补充了每个帐户的SSL要求,这些要求优先。例如,如果一个帐户被定义为REQUIRE SSL,启用require_secure_transport不能使得使用套接字文件的帐户连接到服务器。

    可能会出现服务器没有可靠传输的情况。例如,在 Windows 上启动服务器时,如果没有指定 SSL 证书或密钥文件,并且禁用了shared_memory系统变量,那么服务器将在启动时写入错误日志并退出。尝试在启动时启用require_secure_transport变量将导致服务器写入错误日志并退出。尝试在运行时启用变量将失败,并返回ER_NO_SECURE_TRANSPORTS_CONFIGURED错误。

    详见强制加密连接

  • resultset_metadata

    System Variable resultset_metadata
    Scope Session
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value FULL
    Valid Values

    FULL

    NONE

    对于可选的元数据传输连接,客户端将设置resultset_metadata系统变量,以控制服务器是否返回结果集元数据。允许的值是FULL(返回所有元数据,这是默认值)和NONE(返回无元数据)。

    对于非元数据可选的连接,设置resultset_metadataNONE将导致错误。

    关于管理结果集元数据传输的详细信息,请见Optional Result Set Metadata

  • secondary_engine_cost_threshold

    System Variable secondary_engine_cost_threshold
    Scope Session
    Dynamic
    SET_VAR Hint Applies
    Type 数字
    Default Value 100000.000000
    Minimum Value 0
    Maximum Value DBL_MAX (maximum double value)

    查询离线到次要引擎的优化成本阈值。

    用于HeatWave。详见MySQL HeatWave User Guide

  • schema_definition_cache

    Command-Line Format --schema-definition-cache=#
    System Variable schema_definition_cache
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 256
    Minimum Value 256
    Maximum Value 524288

    定义了 schema 定义对象的限制数量,包括已使用和未使用的对象,可以在字典对象缓存中保留。

    未使用的 schema 定义对象仅在使用的数量小于由 schema_definition_cache 定义的容量时保留在字典对象缓存中。

    设置为 0 时,schema 定义对象仅在使用时保留在字典对象缓存中。

    更多信息,请见第16.4节,“字典对象缓存”

  • secure_file_priv

    Command-Line Format --secure-file-priv=dir_name
    System Variable secure_file_priv
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 平台相关
    Valid Values

    空字符串

    dirname

    NULL

    该变量用于限制数据导入和导出操作,例如执行LOAD DATASELECT ... INTO OUTFILE语句,以及LOAD_FILE()函数。这些操作仅允许对拥有FILE特权的用户执行。

    secure_file_priv 可以设置为以下值:

    • 如果为空,变量无效。这不是安全的设置。

    • 如果设置为目录名称,服务器将限制导入和导出操作,以便只在该目录中工作。目录必须存在;服务器不创建它。

    • 如果设置为 NULL,服务器将禁用导入和导出操作。

    默认值是平台相关的,取决于INSTALL_LAYOUT CMake 选项的值,如下表所示。如果您从源代码构建,使用INSTALL_SECURE_FILE_PRIVDIR CMake 选项来指定明确的secure_file_priv 值。

    INSTALL_LAYOUT Value Default secure_file_priv Value
    STANDALONE
    DEB, RPM, SVR4 /var/lib/mysql-files
    否则 mysql-filesCMAKE_INSTALL_PREFIX 值下

    服务器在启动时检查secure_file_priv 的值,并在错误日志中记录警告,如果值不安全。非空值被认为是不安全的,如果值为空、是数据目录或其子目录、或所有用户都可以访问的目录。如果secure_file_priv 设置为不存在的路径,服务器将在错误日志中记录错误信息并退出。

  • select_into_buffer_size

    Command-Line Format --select-into-buffer-size=#
    System Variable select_into_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 131072
    Minimum Value 8192
    Maximum Value 2147479552
    Unit 字节
    Block Size 4096

    使用SELECT INTO OUTFILESELECT INTO DUMPFILE 将数据写入一个或多个文件以进行备份、数据迁移或其他目的时,可以使用缓冲区来写入数据到存储设备,以确定缓冲区同步时机,以避免写入延迟 stall 其他查询。

    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

    Command-Line Format --select-into-disk-sync={ON|OFF}
    System Variable select_into_disk_sync
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF
    Valid Values

    OFF

    ON

    当设置为ON时,启用了输出文件的缓冲同步写入操作,用于长时间运行的SELECT INTO OUTFILESELECT INTO DUMPFILE语句。

  • select_into_disk_sync_delay

    Command-Line Format --select-into-disk-sync-delay=#
    System Variable select_into_disk_sync_delay
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 31536000
    Unit 毫秒

    当启用了输出文件的缓冲同步写入操作时,这个变量设置了可选的延迟(以毫秒为单位),用于同步写入操作。0(默认值)表示没有延迟。

    设置会话变量的操作是受限制的。会话用户必须具有足够的权限来设置受限制的会话变量。见第7.1.9.1节,“系统变量权限”

  • session_track_gtids

    Command-Line Format --session-track-gtids=value
    System Variable session_track_gtids
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value OFF
    Valid Values

    OFF

    OWN_GTID

    ALL_GTIDS

    控制服务器是否将GTIDs返回给客户端,以便客户端使用它们来跟踪服务器状态。根据变量值,服务器在每个事务结束时将其GTIDs捕获并将其返回给客户端作为确认。可能的session_track_gtids值如下所示:

    • OFF: 服务器不将GTID返回给客户端。这是默认设置。

    • OWN_GTID: 服务器返回自当前会话中自上次确认以来的所有事务的GTID。通常,这是最后一个事务的单个GTID,但如果单个客户端请求导致多个事务,则服务器返回包含所有相关GTID的GTID集。

    • ALL_GTIDS: 服务器返回其gtid_executed系统变量的全局值,该变量在事务成功提交后由服务器读取。该GTID集除了事务刚刚提交的GTID外,还包括服务器上的所有客户端事务,以及可能在事务当前被确认时提交的事务。

    session_track_gtids不能在事务上下文中设置。

    有关会话状态跟踪的更多信息,请见第7.1.18节,“服务器跟踪客户端会话状态”

  • session_track_schema

    Command-Line Format --session-track-schema[={OFF|ON}]
    System Variable session_track_schema
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    控制服务器是否跟踪当前会话中的默认架构(数据库)设置,并通知客户端提供架构名称。

    如果架构名称跟踪器启用,名称通知将在每次设置默认架构时发生,即使新架构名称与旧架构名称相同。

    有关会话状态跟踪的更多信息,请见第7.1.18节,“服务器跟踪客户端会话状态”

  • session_track_state_change

    Command-Line Format --session-track-state-change[={OFF|ON}]
    System Variable session_track_state_change
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    控制服务器是否跟踪当前会话的状态变化,并在状态变化时通知客户端。状态变化可以报告以下客户端会话状态属性的变化:

    • 默认架构(数据库).

    • 会话特定的系统变量值.

    • 用户定义的变量.

    • 临时表.

    • 预备语句.

    如果启用了会话状态跟踪器,通知将在每个跟踪的会话属性发生变化时发生,即使新值与旧值相同。例如,将用户定义的变量设置为其当前值将导致通知。

    变量session_track_state_change仅控制变化的通知,而不是变化的内容。例如,状态变化通知将在设置默认架构或跟踪会话系统变量时发生,但通知不包括架构名称或变量值。要接收架构名称或会话系统变量值的通知,请使用session_track_schemasession_track_system_variables系统变量,分别。

    Note

    session_track_state_change的值分配给自己不是状态变化,并且不会报告为这样。然而,如果其名称列在session_track_system_variables的值中,则对其的任何分配将导致通知新的值。

    有关会话状态跟踪的更多信息,请见第7.1.18节,“服务器跟踪客户会话状态”

  • session_track_system_variables

    Command-Line Format --session-track-system-variables=#
    System Variable session_track_system_variables
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type String
    Default Value 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

    Command-Line Format --session-track-transaction-info=value
    System Variable session_track_transaction_info
    Scope 全局,会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value OFF
    Valid Values

    OFF

    STATE

    CHARACTERISTICS

    控制服务器是否跟踪当前会话中的事务状态,并通知客户端使该信息可用。这些session_track_transaction_info值允许:

    • OFF:禁用事务状态跟踪。这是默认值。

    • STATE:启用事务状态跟踪,但不跟踪特征。状态跟踪使客户端能够确定事务是否在进行,并且是否可以将其移到另一个会话中而不回滚。

    • CHARACTERISTICS:启用事务状态跟踪,包括特征跟踪。特征跟踪使客户端能够确定如何在另一个会话中重新启动事务,以便具有原始会话的特征。以下特征对于重新启动事务是有用的:

      ISOLATION LEVEL
      READ ONLY
      READ WRITE
      WITH CONSISTENT SNAPSHOT

    为了安全地将事务移到另一个会话中,客户端必须跟踪不仅事务状态,还有事务特征。此外,客户端还必须跟踪transaction_isolationtransaction_read_only系统变量,以正确确定会话默认值。 (要跟踪这些变量,请将其添加到session_track_system_variables系统变量的值中。)

    关于会话状态跟踪的更多信息,请见第7.1.18节,“服务器跟踪客户会话状态”

  • set_operations_buffer_size

    Command-Line Format --set-operations-buffer-size=#
    System Variable set_operations_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 256K
    Minimum Value 16K
    Maximum Value 1 GB

    设置INTERSECTEXCEPT操作的哈希表缓冲区大小,当hash_set_operations优化器开关为ON时。在一般情况下,增加该缓冲区的大小可以提高这些操作的性能,当哈希优化启用时。

  • sha256_password_auto_generate_rsa_keys

    Command-Line Format --sha256-password-auto-generate-rsa-keys[={OFF|ON}]
    Deprecated
    System Variable sha256_password_auto_generate_rsa_keys
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

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

    在启动时,服务器自动生成RSA私钥/公钥对文件,如果满足以下条件:sha256_password_auto_generate_rsa_keyscaching_sha2_password_auto_generate_rsa_keys系统变量启用;没有指定RSA选项;RSA文件不在数据目录中。这些私钥/公钥对文件使得使用RSA加密的密码交换在未加密连接上进行身份验证,见第8.4.1.3节,“SHA-256可插拔身份验证”第8.4.1.2节,“Caching SHA-2可插拔身份验证”

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

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

  • sha256_password_private_key_path

    Command-Line Format --sha256-password-private-key-path=file_name
    Deprecated
    System Variable sha256_password_private_key_path
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value private_key.pem

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

    Important

    由于该文件存储私钥,因此其访问权限应限制为只有 MySQL 服务器才能读取。

    关于sha256_password,见第8.4.1.3节,“SHA-256 可插拔身份验证”

  • sha256_password_proxy_users

    Command-Line Format --sha256-password-proxy-users[={OFF|ON}]
    Deprecated
    System Variable sha256_password_proxy_users
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    该变量控制sha256_password内置身份验证插件是否支持代理用户。如果check_proxy_users系统变量启用,则无效。关于用户代理,请见第8.2.19节,“代理用户”

  • sha256_password_public_key_path

    Command-Line Format --sha256-password-public-key-path=file_name
    Deprecated
    System Variable sha256_password_public_key_path
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value public_key.pem

    该变量的值是 sha256_password 身份验证插件的 RSA 公钥文件路径。如果文件名是相对路径,它将相对于服务器数据目录解释。文件必须以 PEM 格式保存。因为该文件存储的是公钥,可以自由分发给客户端用户。 (使用 RSA 密码加密连接到服务器的客户端必须使用与服务器相同的公钥。)

    有关 sha256_password 的信息,包括客户端指定 RSA 公钥的信息,请见第8.4.1.3节,“SHA-256 可插拔身份验证”

  • shared_memory

    Command-Line Format --shared-memory[={OFF|ON}]
    System Variable shared_memory
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Platform Specific Windows
    Type 布尔
    Default Value OFF

    (仅限 Windows。) 服务器是否允许共享内存连接。

  • shared_memory_base_name

    Command-Line Format --shared-memory-base-name=name
    System Variable shared_memory_base_name
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Platform Specific Windows
    Type 字符串
    Default Value MYSQL

    (仅限 Windows。) 共享内存连接使用的共享内存名称。这对于在单个物理机上运行多个 MySQL 实例时非常有用。默认名称是 MYSQL。名称是大小写敏感的。

    该变量仅在服务器启动时使用 shared_memory 系统变量启用支持共享内存连接时生效。

  • show_create_table_skip_secondary_engine

    Command-Line Format --show-create-table-skip-secondary-engine[={OFF|ON}]
    System Variable show_create_table_skip_secondary_engine
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    启用show_create_table_skip_secondary_engine将使SHOW CREATE TABLE输出和CREATE TABLE语句中排除mysqldump工具dump的--show-create-skip-secondary-engine选项。

    mysqldump提供了--show-create-skip-secondary-engine选项。当指定时,它将启用show_create_table_skip_secondary_engine系统变量,以便在dump操作期间生效。

    用于HeatWave。请参阅MySQL HeatWave User Guide

  • show_create_table_verbosity

    Command-Line Format --show-create-table-verbosity[={OFF|ON}]
    System Variable show_create_table_verbosity
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    SHOW CREATE TABLE normally does not show the ROW_FORMAT table option if the row format is the default format. Enabling this variable causes SHOW CREATE TABLE to display ROW_FORMAT regardless of whether it is the default format.

  • show_gipk_in_create_table_and_information_schema

    Command-Line Format --show-gipk-in-create-table-and-information-schema[={OFF|ON}]
    System Variable show_gipk_in_create_table_and_information_schema
    Scope Global, Session
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value ON

    Whether generated invisible primary keys are visible in the output of SHOW statements and in Information Schema tables. When this variable is set to OFF, such keys are not shown.

    This variable is not replicated.

    更多信息,请见第15.1.20.11节,“生成的不可见主键”.

  • skip_external_locking

    Command-Line Format --skip-external-locking[={OFF|ON}]
    System Variable skip_external_locking
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    如果mysqld使用外部锁定(系统锁定),则该变量为OFF;如果外部锁定被禁用,则该变量为ON。这只影响MyISAM表的访问。

    该变量可以通过--external-locking--skip-external-locking选项设置。外部锁定默认禁用。

    外部锁定只影响MyISAM表的访问。有关详细信息,包括在什么情况下可以和不能使用,请见第10.11.5节,“外部锁定”.

  • skip_name_resolve

    Command-Line Format --skip-name-resolve[={OFF|ON}]
    System Variable skip_name_resolve
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否在检查客户端连接时解析主机名。如果该变量为OFFmysqld在检查客户端连接时解析主机名。如果该变量为ONmysqld使用IP地址;在这种情况下,所有Host列值在授权表中必须是IP地址。请见第7.1.12.3节,“DNS 查询和主机缓存”.

    根据系统网络配置和帐户的Host值,客户端可能需要使用明确的--host选项,例如--host=127.0.0.1--host=::1.

    连接到主机127.0.0.1通常会将其解析到localhost账户。然而,如果服务器以skip_name_resolve启用,这将失败。如果您计划这样做,请确保存在可以接受连接的账户。例如,要使用--host=127.0.0.1--host=::1连接到root账户,创建这些账户:

    CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
    CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
  • skip_networking

    Command-Line Format --skip-networking[={OFF|ON}]
    System Variable skip_networking
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    这个变量控制服务器是否允许TCP/IP连接。默认情况下,它禁用了TCP连接。如果启用,服务器只允许本地(非TCP/IP)连接,并且所有与mysqld的交互必须使用命名管道或共享内存(在Windows上)或Unix套接字文件(在Unix上)。这项选项对系统非常有用,其中只允许本地客户端。请参阅第7.1.12.3节,“DNS Lookups and the Host Cache”

    由于使用--skip-grant-tables禁用身份验证检查,服务器也禁用远程连接,以启用skip_networking

  • skip_show_database

    Command-Line Format --skip-show-database
    System Variable skip_show_database
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    这可以防止用户使用SHOW DATABASES语句,如果他们没有SHOW DATABASES特权。这可以提高安全性,如果您对用户可以查看其他用户的数据库有所担忧。该变量的效果取决于SHOW DATABASES特权:如果变量值为ON,则SHOW DATABASES语句只能由拥有SHOW DATABASES特权的用户执行,并且语句将显示所有数据库名称。如果变量值为OFF,则SHOW DATABASES语句可以由所有用户执行,但是只显示用户拥有SHOW DATABASES或其他特权的数据库名称。

    Caution

    由于任何静态全局特权都是所有数据库的特权,因此任何静态全局特权都允许用户使用SHOW DATABASES语句或通过检查SCHEMATA表中的INFORMATION_SCHEMA,除了通过部分撤销限制的数据库外。

  • slow_launch_time

    Command-Line Format --slow-launch-time=#
    System Variable slow_launch_time
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 2
    Minimum Value 0
    Maximum Value 31536000
    Unit

    如果创建线程需要超过这个时间秒,服务器将增加Slow_launch_threads状态变量。

  • slow_query_log

    Command-Line Format --slow-query-log[={OFF|ON}]
    System Variable slow_query_log
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

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

    long_query_time变量的值确定。请参阅第7.4.5节,“慢查询日志”

  • slow_query_log_file

    Command-Line Format --slow-query-log-file=file_name
    System Variable slow_query_log_file
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value 主机名-slow.log

    慢查询日志文件的名称。默认值为主机名-slow.log,但可以使用--slow_query_log_file选项来更改初始值。

  • socket

    Command-Line Format --socket={file_name|pipe_name}
    System Variable socket
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value (Windows) MySQL
    Default Value (Other) /tmp/mysql.sock

    在Unix平台上,这个变量是本地客户端连接使用的套接字文件名称。默认值为/tmp/mysql.sock。(对于某些分发格式,目录可能不同,例如RPMs中的/var/lib/mysql。)

    在Windows上,这个变量是本地客户端连接使用的命名管道名称。默认值为MySQL(不区分大小写)。

  • sort_buffer_size

    Command-Line Format --sort-buffer-size=#
    System Variable sort_buffer_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 262144
    Minimum Value 32768
    Maximum Value (Windows) 4294967295
    Maximum Value (Other, 64-bit platforms) 18446744073709551615
    Maximum Value (Other, 32-bit platforms) 4294967295
    Unit 字节

    每个会话都需要对排序分配一个缓冲区的大小。sort_buffer_size 不特定于任何存储引擎,用于通用的优化。最小的sort_buffer_size值必须足够容纳15个排序缓冲区的元组。同时,增加max_sort_length的值可能需要增加sort_buffer_size的值。更多信息,请见第10.2.1.16节,“ORDER BY 优化”

    如果在SHOW GLOBAL STATUS输出中看到每秒有许多Sort_merge_passes,可以考虑增加sort_buffer_size的值,以加速ORDER BYGROUP BY操作,这些操作不能通过查询优化或改进索引来提高。

    优化器尝试计算需要的空间,但可以分配更多的空间,直到达到限制。将其设置为更大的值将使大多数查询执行排序操作变慢。最好是在会话设置中增加它,并且只对需要更大大小的会话。Linux平台上有256KB和2MB的阈值,超过这些值可能会导致内存分配速度变慢,因此您应该考虑保持在其中一个值以下。通过实验找到适合您的工作负载的最佳值。请见第B.3.3.5节,“MySQL 中的临时文件”

    sort_buffer_size的最大允许设置为4GB−1。64位平台(除了64位 Windows外)允许更大的值,但将被截断到4GB−1,并显示警告。

  • sql_auto_is_null

    System Variable sql_auto_is_null
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果该变量启用,则在成功插入自动生成的AUTO_INCREMENT值后,可以通过以下形式的语句找到该值:

    SELECT * FROM tbl_name WHERE auto_col IS NULL

    如果语句返回一行,返回的值与调用LAST_INSERT_ID()函数时相同。有关详细信息,包括多行插入后的返回值,请参见第14.15节,“信息函数”。如果没有成功插入AUTO_INCREMENT值,SELECT语句返回无行。

    使用IS NULL比较来获取AUTO_INCREMENT值的行为是某些ODBC程序,例如Access使用的。请参见获取自增值。可以通过设置sql_auto_is_nullOFF来禁用该行为。

    默认值sql_auto_is_nullOFF

  • sql_big_selects

    System Variable sql_big_selects
    Scope 全局,会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    如果设置为OFF,MySQL将中止可能需要很长时间执行的SELECT语句(即optimizer估计的检查行数超过max_join_size的值)。这对于在SELECT语句中发出不良WHERE子句时非常有用。新连接的默认值为ON,允许所有SELECT语句。

    如果将max_join_size系统变量设置为除DEFAULT之外的值sql_big_selects将设置为OFF

  • sql_buffer_result

    System Variable sql_buffer_result
    Scope 全局,会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果启用,sql_buffer_result 将强制将SELECT 语句的结果存储在临时表中。这可以帮助 MySQL 早期释放表锁定,并在将结果发送给客户端时可以节省时间。默认值为 OFF.

  • sql_generate_invisible_primary_key

    Command-Line Format --sql-generate-invisible-primary-key[={OFF|ON}]
    System Variable sql_generate_invisible_primary_key
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否将生成不可见的主键添加到任何InnoDB 表中,如果该表没有自动生成主键。

    这个变量不被复制。即使在副本上设置了该变量,它也将被忽略;这意味着,副本默认情况下不会为复制的表生成主键,如果源端的表没有自动生成主键。您可以通过在CHANGE REPLICATION SOURCE TO 语句中设置 REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE,以便在副本上生成不可见的主键。

    更多信息和示例,请见Section 15.1.20.11, “Generated Invisible Primary Keys”.

  • sql_log_off

    System Variable sql_log_off
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF
    Valid Values

    OFF (启用日志记录)

    ON (禁用日志记录)

    这个变量控制当前会话是否禁用一般查询日志记录(假设一般查询日志本身是启用的)。默认值为 OFF (启用日志记录)。要禁用或启用当前会话的日志记录,可以将会话sql_log_off 变量设置为 ONOFF.

    设置会话变量的操作是受限的。会话用户必须具有足够的权限来设置受限的会话变量。见Section 7.1.9.1, “System Variable Privileges”.

  • sql_mode

    Command-Line Format --sql-mode=name
    System Variable sql_mode
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 设置
    Default Value ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
    Valid Values

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    当前服务器 SQL 模式,可以动态设置。详细信息,请参见第7.1.11节,“服务器 SQL 模式”

    Note

    MySQL 安装程序可能在安装过程中配置 SQL 模式。

    如果 SQL 模式与默认值或您期望的值不同,请检查服务器在启动时读取的选项文件中是否存在设置。

  • sql_notes

    System Variable sql_notes
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    如果启用(默认),诊断将增加Note级别的warning_count,并将其记录到服务器中。如果禁用,Note诊断将不增加warning_count,并且服务器将不记录它们。 mysqldump 包含了禁用该变量的输出,以便在重新加载dump文件时不产生警告,以免影响重新加载操作的完整性。

  • sql_quote_show_create

    System Variable sql_quote_show_create
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    如果启用(默认),服务器将对SHOW CREATE TABLESHOW CREATE DATABASE语句的标识符进行引用。如果禁用,引用将被禁用。这项选项默认启用,以便在需要引用时的复制工作。请参阅第15.7.7.11节,“SHOW CREATE TABLE Statement”第15.7.7.7节,“SHOW CREATE DATABASE Statement”

  • sql_require_primary_key

    Command-Line Format --sql-require-primary-key[={OFF|ON}]
    System Variable sql_require_primary_key
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    是否在创建新表或更改现有表的结构时强制要求表具有主键。

    设置会话值的系统变量是受限制的操作。会话用户必须具有足够的权限以设置受限制的会话变量。请参阅第7.1.9.1节,“System Variable Privileges”

    启用该变量可以避免在没有主键的表上进行的更新或删除操作可能引起的性能问题。在复制源服务器上,这些操作可以使用单个表扫描,但在使用行基于复制时,结果是对每个要修改的行进行表扫描。具有主键的表扫描不再出现。

    sql_require_primary_key适用于基本表和TEMPORARY表,并且对其值的更改将被复制到副本服务器。表必须使用支持复制的MySQL存储引擎。

    启用sql_require_primary_key将产生以下效果:

    • 尝试创建一个没有主键的新表将失败,并且包括CREATE TABLE ... LIKECREATE TABLE ... SELECT。在CREATE TABLE部分包括主键定义除外。

    • 尝试从现有表中删除主键将失败,唯一的例外是ALTER TABLE语句中同时删除主键并添加主键。

      删除主键失败,即使表还包含一个唯一不可空索引。

    • 尝试导入没有主键的表将失败并出现错误。

    REQUIRE_TABLE_PRIMARY_KEY_CHECK选项是CHANGE REPLICATION SOURCE TO语句的 replica 可以选择自己的主键检查策略。当该选项设置为ON时,对于一个复制通道,replica 始终使用ON的值作为sql_require_primary_key系统变量在复制操作中,要求主键。当该选项设置为OFF时,对于一个复制通道,replica 始终使用OFF的值作为sql_require_primary_key系统变量在复制操作中,不要求主键。在REQUIRE_TABLE_PRIMARY_KEY_CHECK选项设置为STREAM时(这是默认值),replica 使用来自源的每个事务的值。使用STREAM设置REQUIRE_TABLE_PRIMARY_KEY_CHECK选项时,如果对复制通道启用了权限检查,PRIVILEGE_CHECKS_USER帐户需要足够的权限来设置受限的会话变量,以便将sql_require_primary_key系统变量的会话值。使用ONOFF设置时,不需要这些权限。更多信息,请参见第19.3.3节,“Replication Privilege Checks”

  • sql_safe_updates

    System Variable sql_safe_updates
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果该变量启用,UPDATEDELETE语句不使用键在WHERE子句或LIMIT子句中将产生错误。这使得可以捕捉UPDATEDELETE语句,其中键未正确使用,并将可能改变或删除大量行。默认值为OFF

    对于mysql客户端,sql_safe_updates可以通过使用--safe-updates选项启用。更多信息,请见使用安全更新模式 (--safe-updates)

  • sql_select_limit

    System Variable sql_select_limit
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 18446744073709551615
    Minimum Value 0
    Maximum Value 18446744073709551615

    SELECT 语句返回的最大行数。更多信息,请见使用安全更新模式 (--safe-updates)

    新连接的默认值是服务器允许的每个表的最大行数。典型的默认值是(232)−1 或(264)−1。如果您已经更改了限制,可以通过将值设置为DEFAULT来恢复默认值。

    如果SELECT语句具有LIMIT子句,LIMIT将优先于sql_select_limit的值。

  • sql_warnings

    System Variable sql_warnings
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    该变量控制单行INSERT语句是否生成警告信息字符串。如果发生警告,服务器将生成信息字符串。默认值为OFF。将值设置为ON以生成信息字符串。

  • ssl_ca

    Command-Line Format --ssl-ca=file_name
    System Variable ssl_ca
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value NULL

    该变量指定了证书授权机构(CA)证书文件的路径名。文件包含了PEM格式的证书授权机构列表。

    该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文,该连接在执行ALTER INSTANCE RELOAD TLS或重启后如果变量值被持久化。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections.

  • ssl_capath

    Command-Line Format --ssl-capath=dir_name
    System Variable ssl_capath
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value NULL

    包含PEM格式的受信任SSL证书_authority(CA)证书文件的目录路径。

    该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文,该连接在执行ALTER INSTANCE RELOAD TLS或重启后如果变量值被持久化。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections.

  • ssl_cert

    Command-Line Format --ssl-cert=file_name
    System Variable ssl_cert
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名称
    Default Value NULL

    服务器SSL公钥证书文件的路径名称,格式为PEM。

    如果服务器以ssl_cert设置为使用任何受限加密或加密类别的证书,服务器启动时将禁用加密连接支持。关于加密限制的信息,请见Connection Cipher Configuration.

    该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文,该连接在执行ALTER INSTANCE RELOAD TLS或重启后如果变量值被持久化。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections.

  • ssl_cipher

    Command-Line Format --ssl-cipher=name
    System Variable ssl_cipher
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value NULL

    用于TLSv1.2加密连接的加密cipher列表。如果列表中没有支持的cipher,使用该TLS协议的加密连接将无法工作。

    列表可能包括以下值:

    • ECDHE-ECDSA-AES128-GCM-SHA256

    • ECDHE-ECDSA-AES256-GCM-SHA384

    • ECDHE-RSA-AES128-GCM-SHA256

    • ECDHE-RSA-AES256-GCM-SHA384

    • ECDHE-ECDSA-CHACHA20-POLY1305

    • ECDHE-RSA-CHACHA20-POLY1305

    • ECDHE-ECDSA-AES256-CCM

    • ECDHE-ECDSA-AES128-CCM

    • DHE-RSA-AES128-GCM-SHA256

    • DHE-RSA-AES256-GCM-SHA384

    • DHE-RSA-AES256-CCM

    • DHE-RSA-AES128-CCM

    • DHE-RSA-CHACHA20-POLY1305

    尝试将不在这里显示的cipher值添加到cipher列表中时,会引发错误(ER_BLOCKED_CIPHER)。

    为了获得最佳可移植性,cipher列表应该是cipher名称的列表,使用冒号分隔。以下示例显示了两个cipher名称之间使用冒号:

    [mysqld]
    ssl_cipher="DHE-RSA-AES128-GCM-SHA256:AES128-SHA"

    OpenSSL支持 OpenSSL文档中描述的cipher语法,见https://www.openssl.org/docs/manmaster/man1/ciphers.html

    关于MySQL支持的加密cipher列表,请见Section 8.3.2, “Encrypted Connection TLS Protocols and Ciphers”

    这个变量可以在运行时修改,以影响服务器用于新连接的TLS上下文。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections

  • ssl_crl

    Command-Line Format --ssl-crl=file_name
    System Variable ssl_crl
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value NULL

    包含证书撤销列表的文件路径,以PEM格式。

    该变量可以在运行时修改,以影响服务器在执行ALTER INSTANCE RELOAD TLS或重启后新建立的连接的TLS上下文。见服务器端运行时配置和监控加密连接

  • ssl_crlpath

    Command-Line Format --ssl-crlpath=dir_name
    System Variable ssl_crlpath
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称
    Default Value NULL

    包含PEM格式证书撤销列表文件的目录路径。

    该变量可以在运行时修改,以影响服务器在执行ALTER INSTANCE RELOAD TLS或重启后新建立的连接的TLS上下文。见服务器端运行时配置和监控加密连接

  • ssl_fips_mode

    Command-Line Format --ssl-fips-mode={OFF|ON|STRICT}
    Deprecated
    System Variable ssl_fips_mode
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value OFF
    Valid Values

    OFF (或 0)

    ON (或 1)

    STRICT (或 2)

    控制服务器端是否启用FIPS模式。该ssl_fips_mode系统变量不同于其他xxx">ssl_xxx系统变量,因为它不是控制服务器是否允许加密连接,而是影响哪些加密操作被允许。见第8.8节,“FIPS支持”

    这些ssl_fips_mode值是允许的:

    • OFF (或 0):禁用FIPS模式。

    • ON (或 1):启用FIPS模式。

    • STRICT (或 2):启用“严格”FIPS模式。

    Note

    如果 OpenSSL FIPS 对象模块不可用,唯一允许的ssl_fips_mode值是OFF。在这种情况下,设置ssl_fips_modeONSTRICT将导致服务器产生错误信息并退出。

    这个选项已经弃用,并且已经设置为只读。预计在未来的 MySQL 版本中将其删除。

  • ssl_key

    Command-Line Format --ssl-key=file_name
    System Variable ssl_key
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value NULL

    服务器 SSL 私钥文件的路径名,以 PEM 格式。为了更好的安全性,使用RSA 密钥大小至少2048 位的证书。

    如果密钥文件被保护密码,服务器将提示用户输入密码。密码不能存储在文件中。如果密码错误,程序将继续像不能读取密钥一样。

    这个变量可以在运行时修改,以影响服务器用于新连接的TLS上下文。见Server-Side Runtime Configuration and Monitoring for Encrypted Connections

  • ssl_session_cache_mode

    Command-Line Format --ssl_session_cache_mode={ON|OFF}
    System Variable ssl_session_cache_mode
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON
    Valid Values

    ON

    OFF

    控制服务器是否启用内存会话缓存和会话票据生成。默认模式是ON(启用会话缓存模式)。将ssl_session_cache_mode系统变量的更改将在执行ALTER INSTANCE RELOAD TLS语句或重启后生效,如果变量值被持久化。

    这些ssl_session_cache_mode值是允许的:

    • ON:启用会话缓存模式。

    • OFF:禁用会话缓存模式。

    服务器不在广告支持会话恢复,如果该系统变量的值为OFF。在运行 OpenSSL 1.0.x 时,会话票据总是生成,但是票据在ssl_session_cache_mode启用时不可用。

    当前ssl_session_cache_mode的值可以通过Ssl_session_cache_mode状态变量观察。

  • ssl_session_cache_timeout

    Command-Line Format --ssl_session_cache_timeout
    System Variable ssl_session_cache_timeout
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 300
    Minimum Value 0
    Maximum Value 84600
    Unit

    设置了在建立新加密连接到服务器时,允许重新使用先前的会话的时间段,条件是ssl_session_cache_mode系统变量启用且先前的会话数据可用。如果会话超时,会话不能再被重新使用。

    默认值为 300 秒,最大值为 84600(或一天的秒数)。对ssl_session_cache_timeout系统变量的更改,只在ALTER INSTANCE RELOAD TLS语句执行后或在重启时生效。当前ssl_session_cache_timeout的值可以通过Ssl_session_cache_timeout状态变量观察。

  • stored_program_cache

    Command-Line Format --stored-program-cache=#
    System Variable stored_program_cache
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Integer
    Default Value 256
    Minimum Value 16
    Maximum Value 524288

    设置了软上限,用于存储程序每个连接的缓存数量。该变量的值是根据存储程序在 MySQL 服务器中维护的两个缓存中,分别用于存储存储程序和存储函数的数量。

    每当存储程序被执行时,这个缓存大小将在首次或顶级语句在程序中被解析之前被检查;如果同类型的存储程序(存储程序或存储函数)数量超过指定的限制,该对应的缓存将被刷新,并之前为缓存对象分配的内存将被释放。这允许缓存安全地刷新,即使存在存储程序之间的依赖关系。

    存储程序和存储函数缓存在与字典对象缓存的存储程序定义缓存部分并行存在。存储程序和存储函数缓存在每个连接上,而存储程序定义缓存在共享上。存储程序和存储函数缓存中的对象存在与字典对象缓存中的对象存在无关联,反之亦然。更多信息,请见第16.4节,“字典对象缓存”

  • stored_program_definition_cache

    Command-Line Format --stored-program-definition-cache=#
    System Variable stored_program_definition_cache
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 256
    Minimum Value 256
    Maximum Value 524288

    定义了字典对象缓存中存储程序定义对象的数量限制,包括已使用和未使用的对象。

    未使用的存储程序定义对象仅在在使用的数量少于缓存容量时在字典对象缓存中保留。

    设置为0意味着存储程序定义对象仅在使用时在字典对象缓存中保留。

    存储程序定义缓存分区与使用stored_program_cache选项配置的存储程序和存储函数缓存并行存在。

    选项stored_program_cache设置了每个连接的存储程序或函数缓存的软上限,每次连接执行存储程序或函数时都会检查该限制。存储程序定义缓存分区则是共享缓存,用于存储其他用途的存储程序定义对象。存储程序定义缓存分区中的对象存在与存储程序缓存或存储函数缓存中的对象存在无关联,反之亦然。

    相关信息,请见第16.4节,“字典对象缓存”

  • super_read_only

    Command-Line Format --super-read-only[={OFF|ON}]
    System Variable super_read_only
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    如果read_only系统变量启用,服务器允许的客户端更新仅来自拥有CONNECTION_ADMIN特权(或弃用的SUPER特权)的用户。如果super_read_only系统变量也启用,服务器禁止客户端更新,即使用户拥有CONNECTION_ADMINSUPER特权。请参阅read_only系统变量的描述,以了解读写模式的描述和read_onlysuper_read_only的交互信息。

    super_read_only启用时,客户端更新将被阻止,包括不一定看起来像更新的操作,如CREATE FUNCTION(安装可加载函数)、INSTALL PLUGININSTALL COMPONENT。这些操作被禁止,因为它们涉及到mysql系统架构中的表。

    类似地,如果事件调度器启用,启用super_read_only系统变量将阻止事件调度器更新事件last executed时间戳在events数据字典表中。这将导致事件调度器在下一次尝试执行计划事件时停止,并将错误信息写入服务器日志。 (在这种情况下,event_scheduler系统变量不会从ON切换到OFF。这意味着该变量将拒绝DBAintent,即使实际状态可能不同。) 如果super_read_only后续被禁用,服务器将自动重新启动事件调度器。

    在复制源服务器上更改super_read_only的值不会被复制到副本服务器。该值可以在副本服务器上独立设置。

  • syseventlog.facility

    Command-Line Format --syseventlog.facility=value
    System Variable syseventlog.facility
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 守护进程

    syslog 中写入错误日志的facility(是什么类型的程序发送了消息)。这个变量在 log_sink_syseventlog 错误日志组件安装时不可用。请参阅第7.4.2.8节,“系统日志错误记录”

    允许的值可能因操作系统而异,请查看您的系统 syslog 文档。

    这个变量在 Windows 上不可用。

  • syseventlog.include_pid

    Command-Line Format --syseventlog.include-pid[={OFF|ON}]
    System Variable syseventlog.include_pid
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value

    是否将服务器进程ID添加到每行错误日志输出中,写入到 syslog 中。这一个变量在 log_sink_syseventlog 错误日志组件安装时不可用。请参阅第7.4.2.8节,“系统日志错误记录”

    这个变量在 Windows 上不可用。

  • syseventlog.tag

    Command-Line Format --syseventlog.tag=tag
    System Variable syseventlog.tag
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value 空字符串

    syslog 或 Windows 事件日志中添加的标签。这个变量在 log_sink_syseventlog 错误日志组件安装时不可用。请参阅第7.4.2.8节,“系统日志错误记录”

    默认情况下,不设置标签,因此服务器标识符将是 MySQL 在 Windows 上,mysqld 在其他平台上。如果指定的标签值为 tag,则将其追加到服务器标识符的开头,结果是 syslog 标识符为 mysqld-tag (或 MySQL-tag 在 Windows 上)。

    在 Windows 上,要使用不已经存在的标签,服务器必须以管理员权限运行,以便创建标签的注册表项。已存在的标签不需要管理员权限。

  • system_time_zone

    System Variable system_time_zone
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    服务器系统时间区。服务器启动时,继承自机器默认的时间区,可能受到运行服务器或启动脚本的环境变量的修改。该值用于设置system_time_zone。要显式指定系统时间区,可以设置环境变量TZ或使用--timezone选项的mysqld_safe脚本。

    此外,在服务器主机时间区变化(例如, daylight saving time)时,system_time_zone反映该变化,这对应用程序有以下影响:

    • 引用system_time_zone的查询将在日光节省时间变化前和后获取不同的值。

    • 对于在日光节省时间变化前开始执行并在变化后结束的查询,system_time_zone在查询中保持不变,因为该值通常在执行开始时缓存。

    system_time_zone变量不同于time_zone变量。虽然它们可能具有相同的值,但后者用于初始化每个客户端连接的时间区。请参阅第7.1.15节,“MySQL Server Time Zone Support”

  • table_definition_cache

    Command-Line Format --table-definition-cache=#
    System Variable table_definition_cache
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value -1(表示自动调整;不要分配该字面值)
    Minimum Value 400
    Maximum Value 524288

    可以存储在表定义缓存中的表定义数量。如果您使用大量表,可以创建一个大型表定义缓存以加速表打开。表定义缓存使用更少的空间,不像正常表缓存那样使用文件描述符。最小值为400。默认值基于以下公式, capped to a limit of 2000:

    MIN(400 + table_open_cache / 2, 2000)

    对于InnoDBtable_definition_cache设置作为对表实例在字典对象缓存和文件表空间的软限制,可以同时打开的文件表空间数量。

    如果字典对象缓存中的表实例数量超过table_definition_cache限制,LRU机制将开始标记表实例为删除,并最终从字典对象缓存中删除它们。由于包含外键关系的表实例,不会被LRU列表中标记。

    可以同时打开的文件表空间数量受到table_definition_cacheinnodb_open_files设置的限制。如果两个变量都设置,则使用最高设置。如果两个变量都未设置,则使用table_definition_cache设置,该设置的默认值更高。如果打开的表空间数量超过table_definition_cacheinnodb_open_files定义的限制,LRU机制将搜索LRU列表中的文件表空间,寻找已经flush完毕且不在扩展中的文件表空间。每次打开新的文件表空间时都会执行这个过程。只关闭不活动的文件表空间。

    表定义缓存与字典对象缓存的表定义缓存部分并行存在。两个缓存存储表定义,但服务于MySQL服务器的不同部分。缓存中的对象之间没有相互依赖关系。更多信息,请见第16.4章,“字典对象缓存”

  • table_encryption_privilege_check

    Command-Line Format --table-encryption-privilege-check[={OFF|ON}]
    System Variable table_encryption_privilege_check
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    控制TABLE_ENCRYPTION_ADMIN特权检查,该检查在创建或更改加密的架构或通用表空间时发生,或者在创建或更改加密设置不同的表时发生。该检查默认禁用。

    在运行时设置table_encryption_privilege_check需要SUPER特权。

    table_encryption_privilege_check支持SET PERSISTSET PERSIST_ONLY语法。请见第7.1.9.3节,“Persisted System Variables”

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

  • table_open_cache

    Command-Line Format --table-open-cache=#
    System Variable table_open_cache
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4000
    Minimum Value 1
    Maximum Value 524288

    所有线程的打开表的数量。增加该值将增加mysqld所需的文件描述符数量。该变量的实际值是open_files_limit - 10 -max_connections / 2的实际值的较大值,以及400;即

    MAX(
        (open_files_limit - 10 - max_connections) / 2,
        400
       )

    您可以检查是否需要增加表缓存的大小,通过检查Opened_tables状态变量。如果Opened_tables的值很大,您不经常使用FLUSH TABLES(强制所有表关闭并重新打开),那么您应该增加table_open_cache变量的值。关于表缓存的更多信息,请见第10.4.3.1节,“MySQL如何打开和关闭表”

  • table_open_cache_instances

    Command-Line Format --table-open-cache-instances=#
    System Variable table_open_cache_instances
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 16
    Minimum Value 1
    Maximum Value 64

    表缓存实例的数量。为了提高可扩展性,减少会话之间的竞争,可以将表缓存分割成多个较小的缓存实例,每个实例的大小为table_open_cache / table_open_cache_instances。会话需要锁定一个实例来访问它,以便执行DML语句。这将将缓存访问分配到多个实例中,从而提高性能在有许多会话访问表时。 (DDL语句仍然需要锁定整个缓存,但DDL语句的频率远远低于DML语句。)

    8或16是推荐的设置,在系统中使用16或更多核心时。然而,如果您有许多大型触发器在您的表中,这些触发器会导致高内存负载,那么默认的table_open_cache_instances设置可能会导致内存使用过高。在这种情况下,可以将table_open_cache_instances设置为1,以限制内存使用。

  • tablespace_definition_cache

    Command-Line Format --tablespace-definition-cache=#
    System Variable tablespace_definition_cache
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 256
    Minimum Value 256
    Maximum Value 524288

    定义了表空间定义对象的限制,包括已使用和未使用的对象,可以在字典对象缓存中保留的数量。

    未使用的表空间定义对象仅在字典对象缓存中保留,直到使用的数量少于由tablespace_definition_cache定义的容量。

    设置为0时,表空间定义对象仅在使用时保留在字典对象缓存中。

    更多信息,请见第16.4节,“字典对象缓存”

  • temptable_max_mmap

    Command-Line Format --temptable-max-mmap=#
    System Variable temptable_max_mmap
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 2^64-1
    Unit 字节

    定义了TempTable存储引擎可以从内存映射临时文件中分配的最大内存量(以字节为单位),以避免将数据写入到InnoDB内部临时表中。设置为0(默认)将禁用从内存映射临时文件中分配内存。更多信息,请见第10.4.4节,“MySQL中内部临时表的使用”

    在MySQL 8.4之前,这个选项设置为1 GiB,而不是0。

  • temptable_max_ram

    Command-Line Format --temptable-max-ram=#
    System Variable temptable_max_ram
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 3% of total memory: min 1 GB, max 4 GB
    Minimum Value 2097152
    Maximum Value 2^64-1
    Unit 字节

    定义了TempTable存储引擎可以占用的最大内存量,以避免将数据写入到磁盘中。默认值是服务器上的总内存的3%,但最小值和最大值为1-4 GiB。更多信息,请见第10.4.4节,“MySQL中内部临时表的使用”

    在MySQL 8.4之前,默认值为总内存的1 GiB。

  • temptable_use_mmap

    Command-Line Format --temptable-use-mmap[={OFF|ON}]
    Deprecated
    System Variable temptable_use_mmap
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    定义了TempTable存储引擎是否将内存中临时表的空间分配为内存映射临时文件,当TempTable存储引擎占用的内存超过由temptable_max_ram变量定义的限制时。禁用temptable_use_mmap(默认)时,TempTable存储引擎使用InnoDB磁盘内部临时表。更多信息,请见第10.4.4节,“MySQL中内部临时表的使用”

  • thread_cache_size

    Command-Line Format --thread-cache-size=#
    System Variable thread_cache_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value -1(表示自动调整;不要分配该字面值)
    Minimum Value 0
    Maximum Value 16384

    服务器应该缓存多少线程以供重用。当客户端断开连接,客户端的线程将被缓存在缓存中,如果缓存中有少于thread_cache_size个线程。请求线程将被满足通过重用缓存中的线程,如果可能,然后才创建新的线程。这個变量可以增加以提高性能,如果您有很多新的连接。通常,这不会提供明显的性能改进,如果您有一个良好的线程实现。然而,如果您的服务器每秒看到数百个连接,您应该将thread_cache_size设置高 enough,以便大多数新的连接使用缓存线程。通过检查ConnectionsThreads_created状态变量,您可以看到线程缓存的效率。详细信息,请见第7.1.10节,“服务器状态变量”

    默认值基于以下公式, capped to a limit of 100:

    8 + (max_connections / 100)
  • thread_handling

    Command-Line Format --thread-handling=name
    System Variable thread_handling
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value one-thread-per-connection
    Valid Values

    no-threads

    one-thread-per-connection

    loaded-dynamically

    服务器用于连接线程的处理模型。允许的值是 no-threads(服务器使用单个线程处理一个连接)、one-thread-per-connection(服务器使用一个线程处理每个客户端连接)和 loaded-dynamically(由线程池插件在初始化时设置)。no-threads 对于 Linux 调试非常有用;见第7.9节,“Debugging MySQL”

  • thread_pool_algorithm

    Command-Line Format --thread-pool-algorithm=#
    System Variable thread_pool_algorithm
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Integer
    Default Value 0
    Minimum Value 0
    Maximum Value 1

    该变量控制线程池插件使用的算法:

    • 0: 使用保守的低并发算法。

    • 1: 使用激进的高并发算法,性能可能会在极高连接数时下降。

    该变量仅在线程池插件启用时可用。见第7.6.3节,“MySQL Enterprise Thread Pool”

  • thread_pool_dedicated_listeners

    Command-Line Format --thread-pool-dedicated-listeners
    System Variable thread_pool_dedicated_listeners
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

    将每个线程组中的一个监听线程分配给连接,以便从连接中接收语句。

    • OFF: (默认) 不启用专门的监听线程。

    • ON: 将每个线程组中的一个监听线程分配给连接,以便从连接中接收语句。专门的监听线程不执行查询。

    启用thread_pool_dedicated_listeners仅在定义了 thread_pool_max_transactions_limit 时有用。否则,thread_pool_dedicated_listeners 不应该启用。

    MySQL HeatWave 服务使用该变量,该变量仅在 MySQL Enterprise Edition 中可用,并且在 MySQL 8.4 中不受支持。

  • thread_pool_high_priority_connection

    Command-Line Format --thread-pool-high-priority-connection=#
    System Variable thread_pool_high_priority_connection
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 1

    该变量影响执行前语句的排队。 如果值为0(false,缺省),语句排队使用低优先级和高优先级队列。如果值为1(true),排队语句总是进入高优先级队列。

    该变量仅在启用线程池插件时可用。请参阅第7.6.3节,“MySQL Enterprise Thread Pool”

  • thread_pool_max_active_query_threads

    Command-Line Format --thread-pool-max-active-query-threads
    System Variable thread_pool_max_active_query_threads
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 512

    每个组中的活动(运行)查询线程的最大允许数量。如果值为0,线程池插件使用可用的线程数量。

    该变量仅在启用线程池插件时可用。请参阅第7.6.3节,“MySQL Enterprise Thread Pool”

  • thread_pool_max_transactions_limit

    Command-Line Format --thread-pool-max-transactions-limit
    System Variable thread_pool_max_transactions_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 1000000

    线程池插件允许的最大事务数量。定义事务限制将一个线程绑定到事务中,直到它提交,这有助于在高并发情况下稳定通过率。

    默认值为0表示没有事务限制。该变量是动态的,但不能在运行时从0更改为更高值或反之。非零值在启动时允许动态配置在运行时。需要CONNECTION_ADMIN权限来在运行时配置thread_pool_max_transactions_limit

    当您定义事务限制时,启用thread_pool_dedicated_listeners将在每个线程组中创建一个专用监听线程。额外的专用监听线程消耗更多资源,影响线程池性能。因此,thread_pool_dedicated_listeners应该谨慎使用。

    thread_pool_max_transactions_limit定义的限制达到时,新的连接将出现假死状态,直到一个或多个现有事务完成。同样,在尝试在现有连接上启动新事务时也会出现这种情况。如果存在阻塞或长时间运行的连接,可能需要具有特权连接来访问服务器以增加限制、删除限制或杀死运行的事务。见特权连接

    MySQL HeatWave 服务使用该变量,该变量仅在 MySQL Enterprise Edition 中可用,不支持在 MySQL 8.4 中。

  • thread_pool_max_unused_threads

    Command-Line Format --thread-pool-max-unused-threads=#
    System Variable thread_pool_max_unused_threads
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4096

    线程池中允许的未使用线程最大数量。这使得可以限制睡眠线程占用的内存。

    值为0(默认)意味着没有线程池限制。值为N,其中N大于0,表示1个消费线程和N−1保留线程。在这种情况下,如果线程准备睡眠,但睡眠线程数量已经达到最大,线程将退出,而不是睡眠。

    睡眠线程是消费线程或保留线程之一。线程池允许一个线程作为消费线程睡眠。如果线程睡眠,但没有现有消费线程,它将睡眠作为消费线程。当线程需要被唤醒时,将选择消费线程。如果没有消费线程,可以选择保留线程。

    该变量仅在启用线程池插件时可用。见Section 7.6.3, “MySQL Enterprise Thread Pool”

  • thread_pool_prio_kickup_timer

    Command-Line Format --thread-pool-prio-kickup-timer=#
    System Variable thread_pool_prio_kickup_timer
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1000
    Minimum Value 0
    Maximum Value 4294967294
    Unit 毫秒

    该变量影响等待执行的语句在低优先级队列中的状态。该值是等待语句被移动到高优先级队列的毫秒数。默认值为 1000(1 秒)。

    该变量仅在线程池插件启用时可用。请参阅第7.6.3节,“MySQL Enterprise Thread Pool”

  • thread_pool_query_threads_per_group

    Command-Line Format --thread-pool-query-threads-per-group
    System Variable thread_pool_query_threads_per_group
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 1
    Maximum Value 4096

    允许每个线程组中的查询线程数的最大值。最大值为 4096,但如果thread_pool_max_transactions_limit设置了值,则thread_pool_query_threads_per_group不能超过该值。

    默认值为 1,这意味着每个线程组中只有一个活动查询线程,这在许多负载下工作良好。使用高并发线程池算法(thread_pool_algorithm = 1)时,考虑增加值以解决因长事务而导致的响应时间延迟。

    需要CONNECTION_ADMIN特权来在运行时配置thread_pool_query_threads_per_group

    如果在运行时减少thread_pool_query_threads_per_group的值,当前运行用户查询的线程将被允许完成,然后移到保留池或终止。如果在运行时增加该值,并且线程组需要更多线程,这些线程将从保留池中获取,如果可能,则创建新的线程。

    MySQL HeatWave 服务使用该变量,该变量仅在 MySQL Enterprise Edition 中可用,并且不支持 MySQL 8.4。

  • thread_pool_size

    Command-Line Format --thread-pool-size=#
    System Variable thread_pool_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 16
    Minimum Value 1
    Maximum Value 512

    线程池中的线程组数。这是控制线程池性能的最重要参数。它影响了多少个语句可以同时执行。如果指定的值超出了允许的范围,线程池插件将不加载,服务器将在错误日志中写入一条消息。

    这个变量只有在启用线程池插件时可用。见第7.6.3节,“MySQL Enterprise Thread Pool”

  • thread_pool_stall_limit

    Command-Line Format --thread-pool-stall-limit=#
    System Variable thread_pool_stall_limit
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 6
    Minimum Value 4
    Maximum Value 600
    Unit 毫秒 * 10

    这个变量影响执行语句。值是语句开始执行后需要等待的时间,以便在语句变为阻塞状态时开始执行另一个语句。值以10毫秒为单位,故默认的6表示60ms。短的等待值允许线程更快地启动。短的值也更适合避免死锁情况。长的等待值对包含长时间运行语句的工作负载非常有用,以避免在当前语句执行时启动太多新的语句。

    这个变量只有在启用线程池插件时可用。见第7.6.3节,“MySQL Enterprise Thread Pool”

  • thread_pool_transaction_delay

    Command-Line Format --thread-pool-transaction-delay
    System Variable thread_pool_transaction_delay
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 300000

    执行新事务前的延迟期限,以毫秒为单位。最大值为300000(5分钟)。

    在并发事务影响其他操作的性能时,可以使用事务延迟。例如,如果并发事务影响索引创建或在线缓冲池重置操作,可以配置事务延迟以减少资源竞争在这些操作执行时。

    工作线程睡眠指定的毫秒数,以便执行新事务。

    thread_pool_transaction_delay设置不影响来自特权连接(分配给Admin线程组)的查询。这些查询不受配置的事务延迟影响。

  • thread_stack

    Command-Line Format --thread-stack=#
    System Variable thread_stack
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1048576
    Minimum Value 131072
    Maximum Value (64-bit platforms) 18446744073709550592
    Maximum Value (32-bit platforms) 4294966272
    Unit 字节
    Block Size 1024

    每个线程的堆栈大小。默认值足以满足正常操作。如果线程堆栈大小太小,它将限制服务器可以处理的SQL语句的复杂度、存储过程的递归深度和其他内存消耗的操作。

  • time_zone

    System Variable time_zone
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value SYSTEM
    Minimum Value -13:59
    Maximum Value +14:00

    当前时区。这個變數用於初始化每个客户端连接的时区。默认情况下,这個变量的初始值是 'SYSTEM'(即使用 system_time_zone 的值)。该值可以在服务器启动时使用 --default-time-zone 选项指定。请参阅第7.1.15节,“MySQL Server Time Zone Support”

    Note

    如果设置为 SYSTEM,每个MySQL函数调用都需要时间戳计算时将调用系统库函数来确定当前系统时区。这可能会受到全局锁定的保护,从而导致竞争。

  • timestamp

    System Variable timestamp
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 数字
    Default Value UNIX_TIMESTAMP()
    Minimum Value 1
    Maximum Value 2147483647

    设置这个客户端的时间。这用于从二进制日志中恢复行。 timestamp_value 应该是一个Unix epoch时间戳(类似于 UNIX_TIMESTAMP() 的值,而不是 'YYYY-MM-DD hh:mm:ss' 格式的值)或 DEFAULT

    timestamp设置为常量值使其保持该值直到它被再次更改。将timestamp设置为DEFAULT使其值为当前日期和时间,以便在访问时获取。

    timestamp是一个DOUBLE而不是BIGINT,因为其值包括微秒部分。最大值对应于'2038-01-19 03:14:07' UTC,与TIMESTAMP数据类型相同。

    SET timestamp影响NOW()返回的值,但不影响SYSDATE()。这意味着在二进制日志中设置的时间戳设置对SYSDATE()的调用没有影响。服务器可以使用--sysdate-is-now选项来使SYSDATE()成为NOW()的同义词,在这种情况下SET timestamp影响两个函数。

  • tls_certificates_enforced_validation

    Command-Line Format --tls-certificates-enforced-validation[={OFF|ON}]
    System Variable tls_certificates_enforced_validation
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Boolean
    Default Value OFF

    在启动时,服务器确保每个必要的SSL证书文件的位置在默认数据目录中,如果命令行上没有提供文件位置。然而,服务器不验证证书文件,因此可以在启动时使用无效证书。系统变量tls_certificates_enforced_validation控制是否在启动时强制证书验证。发现无效证书时,启用验证强制时启动执行将被中断。默认情况下,证书验证强制是禁用的(OFF)。

    验证强制可以通过在命令行中指定--tls-certificates-enforced-validation选项来启用,或者不带ON值。启用验证强制后,证书也将在通过ALTER INSTANCE RELOAD TLS语句时被验证。这系统变量不能在重启时持久化。更多信息,请见配置证书验证强制

  • tls_ciphersuites

    Command-Line Format --tls-ciphersuites=ciphersuite_list
    System Variable tls_ciphersuites
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value NULL

    服务器允许的加密连接使用TLSv1.3的加密套件列表。值是一个或多个以冒号分隔的加密套件名称,从以下列表中选择:

    • TLS_AES_128_GCM_SHA256

    • TLS_AES_256_GCM_SHA384

    • TLS_CHACHA20_POLY1305_SHA256

    • TLS_AES_128_CCM_SHA256

    尝试将不在这里列出的值添加到加密套件列表中时,会引发错误(ER_BLOCKED_CIPHER)。

    可以为该变量命名的加密套件取决于MySQL使用的SSL库。如果该变量没有设置,它的默认值是NULL第8.3.2节,“加密连接TLS协议和加密套件”

  • tls_version

    Command-Line Format --tls-version=protocol_list
    System Variable tls_version
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value TLSv1.2,TLSv1.3

    服务器允许的加密连接协议。值是一个或多个以逗号分隔的协议名称,不区分大小写。可以命名的协议取决于MySQL使用的SSL库。选择的协议应该避免留下空洞。更多信息,请见第8.3.2节,“加密连接TLS协议和加密套件”

    该变量可以在运行时修改,以影响服务器用于新连接的TLS上下文。见服务器端运行时配置和监控加密连接

    Important
    • MySQL 8.4不支持TLSv1和TLSv1.1连接协议。见TLSv1和TLSv1.1协议的移除支持以获取更多信息。

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

  • tmp_table_size

    Command-Line Format --tmp-table-size=#
    System Variable tmp_table_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 16777216
    Minimum Value 1024
    Maximum Value 18446744073709551615
    Unit 字节

    定义了内存中临时表的最大大小,这些表由MEMORY和TempTable存储引擎创建。如果内存中临时表超过这个大小,它将自动转换为磁盘临时表。

    变量tmp_table_size不适用于用户创建的MEMORY表。用户创建的TempTable表不受支持。

    使用MEMORY存储引擎为内存中临时表时,实际大小限制是tmp_table_sizemax_heap_table_size的较小值。设置max_heap_table_size不适用于TempTable表。

    如果您执行许多复杂的GROUP BY查询,并且有大量内存,可以增加tmp_table_size(和max_heap_table_size如果必要)的值,以便使用MEMORY存储引擎创建内存中临时表。

    您可以通过比较内存磁盘临时表的数量和总的临时表数量来比较。可以比较Created_tmp_disk_tablesCreated_tmp_tables的值。

    请参见第10.4.4节,“MySQL中内部临时表的使用”

  • tmpdir

    Command-Line Format --tmpdir=dir_name
    System Variable tmpdir
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 目录名称

    用于创建临时文件的目录路径。可能有用的是,如果您的默认/tmp目录位于一个存储空间太小的分区上。该变量可以设置为多个路径的列表,这些路径将按顺序使用。路径应该使用Unix上的冒号字符(:)或Windows上的分号字符(;)分隔。

    tmpdir可以是一个非永久的位置,如内存文件系统或重启服务器时清除的目录。如果MySQL服务器作为副本,并且您使用了非永久的位置来设置tmpdir,请考虑为副本设置不同的临时目录使用replica_load_tmpdir变量。对于副本,临时文件用于复制LOAD DATA语句的存储在这个目录中,因此在机器重启时可以存储这些文件,以便在重启后继续复制。

    关于临时文件存储位置的更多信息,请参见第B.3.3.5节,“MySQL中临时文件的存储位置”

  • transaction_alloc_block_size

    Command-Line Format --transaction-alloc-block-size=#
    System Variable transaction_alloc_block_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 8192
    Minimum Value 1024
    Maximum Value 131072
    Unit 字节
    Block Size 1024

    每个事务内存池的增加量(以字节为单位)。请参见transaction_prealloc_size的描述。

  • transaction_isolation

    Command-Line Format --transaction-isolation=name
    System Variable transaction_isolation
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value REPEATABLE-READ
    Valid Values

    READ-UNCOMMITTED

    READ-COMMITTED

    REPEATABLE-READ

    SERIALIZABLE

    事务隔离级别。默认是REPEATABLE-READ

    事务隔离级别有三个作用域:全局、会话和下一个事务。这三个作用域的实现会导致一些非标准的隔离级别分配语义,如后文所述。

    在启动时,可以使用--transaction-isolation服务器选项来设置全局事务隔离级别。

    在运行时,可以使用SET语句将transaction_isolation系统变量的值分配给一个名称,或者使用SET TRANSACTION语句。如果将transaction_isolation直接设置为一个包含空格的名称,名称应该被包含在引号中,空格被替换为破折号。例如,使用以下SET语句来设置全局值:

    SET GLOBAL transaction_isolation = 'READ-COMMITTED';

    设置全局transaction_isolation值将设置所有后续会话的隔离级别。现有会话不受影响。

    要设置会话或下一个transaction_isolation值,使用SET语句。对于大多数会话系统变量,使用这些语句是等效的方式来设置值:

    SET @@SESSION.var_name = value;
    SET SESSION var_name = value;
    SET var_name = value;
    SET @@var_name = value;

    如前所述,事务隔离级别有一个下一个事务作用域,除了全局和会话作用域之外。要启用下一个事务作用域,可以使用SET语句将会话系统变量值分配给transaction_isolation:

    • 要设置会话隔离级别,可以使用以下语句:

      SET @@SESSION.transaction_isolation = value;
      SET SESSION transaction_isolation = value;
      SET transaction_isolation = value;

      对每种语法,这些语义都适用:

      • 将会话中所有后续事务的隔离级别设置为指定的隔离级别。

      • 在事务中允许使用,但不会影响当前正在进行的事务。

      • 如果在事务之间执行,会覆盖任何先前的语句,该语句设置了下一个事务的隔离级别。

      • 等同于SET SESSION TRANSACTION ISOLATION LEVEL(带有SESSION关键字)。

    • 要设置下一个事务的隔离级别,请使用以下语法:

      SET @@transaction_isolation = value;

      对该语法,这些语义都适用:

      • 只将隔离级别设置为下一个单个事务中。

      • 后续事务将重新设置为会话隔离级别。

      • 在事务中不允许使用。

      • 等同于SET TRANSACTION ISOLATION LEVEL(不带有SESSION关键字)。

    有关SET TRANSACTIONtransaction_isolation系统变量之间的关系,请参阅第15.3.7节,“SET TRANSACTION Statement”

  • transaction_prealloc_size

    Command-Line Format --transaction-prealloc-size=#
    Deprecated
    System Variable transaction_prealloc_size
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 4096
    Minimum Value 1024
    Maximum Value 131072
    Unit 字节
    Block Size 1024

    每个事务都有一个内存池,从中各种事务相关的分配都可以从中获取内存。该池的初始大小是transaction_prealloc_size字节。每次分配都无法从池中获取足够的内存时,池将增加transaction_alloc_block_size字节。事务结束时,池将被截断到transaction_prealloc_size字节。通过将transaction_prealloc_size设置为包含所有语句的单个事务中,可以避免许多malloc()调用。

    transaction_prealloc_size已弃用,设置该变量现在没有任何影响。预计transaction_prealloc_size将在未来的MySQL版本中被删除。

  • transaction_read_only

    Command-Line Format --transaction-read-only[={OFF|ON}]
    System Variable transaction_read_only
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value OFF

    事务访问模式。值可以是OFF(读/写;默认)或ON(只读)。

    事务访问模式有三个范围:全局、会话和下一个事务。这三个范围的实现导致了一些非标准的访问模式分配语义,如后面所述。

    要在启动时设置全局事务访问模式,可以使用--transaction-read-only服务器选项。

    在运行时,可以使用SET语句将值分配给transaction_read_only系统变量,或者使用SET TRANSACTION语句。例如,可以使用以下SET语句设置全局值:

    SET GLOBAL transaction_read_only = ON;

    设置全局transaction_read_only值将设置所有后续会话的访问模式。现有会话不受影响。

    要设置会话或下一个级别transaction_read_only值,可以使用SET语句。对于大多数会话系统变量,这些语句是等效的方式来设置值:

    SET @@SESSION.var_name = value;
    SET SESSION var_name = value;
    SET var_name = value;
    SET @@var_name = value;

    如前所述,事务访问模式还有一個下一个事务范围,除了全局和会话范围之外。要启用下一个事务范围,可以SET语句分配会话系统变量值的非标准语义transaction_read_only,

    • 要设置会话访问模式,可以使用以下语句之一:

      SET @@SESSION.transaction_read_only = value;
      SET SESSION transaction_read_only = value;
      SET transaction_read_only = value;

      对于每个语句,这些语义适用:

      • 将访问模式设置为所有后续事务中执行的会话。

      • 在事务中允许,但不影响当前事务的执行。

      • 如果在事务之间执行,则覆盖任何先前的语句设置下一个事务访问模式。

      • 对应于SET SESSION TRANSACTION {READ WRITE | READ ONLY}(带有SESSION关键字)。

    • 要设置下一个事务访问模式,可以使用以下语句:

      SET @@transaction_read_only = value;

      对于该语句,这些语义适用:

      • 将访问模式设置为下一个单个事务中执行的会话。

      • 后续事务将重置到会话访问模式。

      • 不允许在事务中使用。

      • 对应SET TRANSACTION {READ WRITE | READ ONLY}(不含SESSION关键字)。

    有关SET TRANSACTION和与transaction_read_only系统变量的关系,请参见第15.3.7节,“SET TRANSACTION 语句”

  • unique_checks

    System Variable unique_checks
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    如果设置为1(默认值),则在InnoDB表中执行secondary索引的唯一性检查。如果设置为0,存储引擎可以假设输入数据中不包含唯一性违规。如果您确定您的数据不包含唯一性违规,可以将其设置为0,以加速大表的导入到InnoDB中。

    将该变量设置为0不要求存储引擎忽略唯一性违规。引擎仍然可以检查它们并在检测到违规时发出错误信息。

  • updatable_views_with_limit

    Command-Line Format --updatable-views-with-limit[={OFF|ON}]
    System Variable updatable_views_with_limit
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value 1

    该变量控制了是否可以在视图中执行更新操作,而视图不包含所有的主键列,如果更新语句包含LIMIT子句。更新操作是UPDATEDELETE语句。主键这里指的是PRIMARY KEYUNIQUE索引,其中不包含NULL值。

    该变量可以有两个值:

    • 1YES: 发出警告(而不是错误信息)。这是默认值。

    • 0NO: 禁止更新操作。

  • use_secondary_engine

    System Variable use_secondary_engine
    Scope 会话
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value ON
    Valid Values

    OFF

    ON

    FORCED

    为将来使用。

    是否执行查询使用辅助引擎。

    与HeatWave一起使用。请参阅MySQL HeatWave用户指南

  • validate_password.xxx

    validate_password组件实现了一组名为validate_password.xxx的系统变量,这些变量影响该组件的密码测试;请参阅第8.4.3.2节,“密码验证选项和变量”

  • version

    服务器的版本号。这可能还包括服务器构建或配置信息的后缀。-debug表示服务器在启用调试支持时构建。

  • version_comment

    System Variable version_comment
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    CMake配置程序有一个COMPILATION_COMMENT_SERVER选项,允许在构建MySQL时指定注释。这变量包含注释的值。

  • version_compile_machine

    System Variable version_compile_machine
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    服务器二进制文件的类型。

  • version_compile_os

    System Variable version_compile_os
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    MySQL构建时的操作系统类型。

  • version_compile_zlib

    System Variable version_compile_zlib
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串

    编译时使用的zlib库的版本。

  • wait_timeout

    Command-Line Format --wait-timeout=#
    System Variable wait_timeout
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 28800
    Minimum Value 1
    Maximum Value (Windows) 2147483
    Maximum Value (Other) 31536000
    Unit

    服务器等待非交互连接上的活动时间,以便关闭连接。

    线程启动时,会话wait_timeout值将从全局wait_timeout值或全局interactive_timeout值初始化,取决于客户端类型(由mysql_real_connect()中的CLIENT_INTERACTIVE连接选项定义)。请参见interactive_timeout

  • warning_count

    上一个语句生成的错误、警告和注意的数量。这变量是只读的。请参见Section 15.7.7.41, “SHOW WARNINGS Statement”

  • windowing_use_high_precision

    Command-Line Format --windowing-use-high-precision[={OFF|ON}]
    System Variable windowing_use_high_precision
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    是否计算窗口操作不失精度。请参见Section 10.2.1.21, “Window Function Optimization”

  • xa_detach_on_prepare

    Command-Line Format --xa-detach-on-prepare[={OFF|ON}]
    System Variable xa_detach_on_prepare
    Scope 全局、会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔
    Default Value ON

    当设置为ON(启用)时,所有XA事务将与连接(会话)分离(断开)作为XA PREPARE的一部分。这意味着,即使原始连接未终止,XA事务也可以由另一个连接提交或回滚,并且该连接可以开始新的事务。

    在分离的XA事务中不能使用临时表。

    当设置为OFF(禁用)时,XA事务将严格与同一连接相关直到会话断开。建议您允许启用(默认行为)以便于复制。

    更多信息,请见第15.3.8.2节,“XA事务状态”