5.1.7 服务器系统变量

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

在运行时,设置全局系统变量值需要SUPER特权。设置会话系统变量值通常不需要特殊特权,并且任何用户都可以完成,尽管有 exception。有关更多信息,请参见第 5.1.8.1 节“系统变量特权”

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

  • 要查看服务器将根据其编译后的默认值及其读取的所有选项文件使用的值,请使用以下命令:
mysqld --verbose --help
  • 要仅根据服务器的编译缺省值查看服务器将使用的值,而忽略任何选项文件中的设置,请使用以下命令:
mysqld --no-defaults --verbose --help

本节介绍每个系统变量。有关系统变量摘要 table,请参见第 5.1.4 节“服务器系统变量参考”。有关操纵系统变量的更多信息,请参见第 5.1.8 节“使用系统变量”

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

Note

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

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

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

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

PropertyValue
Command-Line Format--authentication-windows-log-level=#
System Variableauthentication_windows_log_level
ScopeGlobal
DynamicNo
TypeInteger
Default Value2
Minimum Value0
Maximum Value4

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

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

ValueDescription
0No logging
1仅记录错误消息
2日志级别 1 消息和警告消息
3日志级别 2 的消息和信息说明
4记录 3 级消息和调试消息

PropertyValue
Command-Line Format--authentication-windows-use-principal-name[={OFF|ON}]
System Variableauthentication_windows_use_principal_name
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueON

仅当启用authentication_windows Windows 身份验证插件时,此变量才可用。参见第 6.4.1.8 节“ Windows 可插入身份验证”

使用InitSecurityContext()函数进行身份验证的 Client 端应提供一个字符串,以标识与其连接的服务(* targetName *)。 MySQL 使用运行服务器的帐户的主体名称(UPN)。 UPN 的格式为[email protected]_name,无需在任何要使用的地方进行注册。服务器在身份验证握手开始时发送此 UPN。

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

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

PropertyValue
Command-Line Format--autocommit[={OFF|ON}]
System Variableautocommit
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueON

自动提交模式。如果设置为 1,对 table 的所有更改将立即生效。如果设置为 0,则必须使用COMMIT接受 Transaction 或使用ROLLBACK取消 Transaction。如果autocommit为 0 并将其更改为 1,则 MySQL 对所有未完成的事务执行自动COMMIT。开始事务的另一种方法是使用START TRANSACTIONBEGIN语句。参见第 13.3.1 节“ START TRANSACTION,COMMIT 和 ROLLBACK 语句”

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

[mysqld]
autocommit=0

PropertyValue
Command-Line Format--automatic-sp-privileges[={OFF|ON}]
System Variableautomatic_sp_privileges
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueON

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

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

如果以mysqld开头mysqld,则automatic_sp_privileges设置为OFF

另请参见第 23.2.2 节“存储的例程和 MySQL 特权”

PropertyValue
Command-Line Format--auto-generate-certs[={OFF|ON}]
System Variableauto_generate_certs
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueON

如果服务器是使用 OpenSSL 编译的,则此变量可用(请参见第 6.3.4 节“依赖于 SSL 库的功能”)。它控制服务器是否自动生成数据目录中的 SSL 密钥和证书文件(如果尚不存在)。

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

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

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

PropertyValue
Command-Line Format--avoid-temporal-upgrade[={OFF|ON}]
DeprecatedYes
System Variableavoid_temporal_upgrade
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

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

不建议使用此变量,并将在将来的 MySQL 版本中将其删除。

PropertyValue
Command-Line Format--back-log=#
System Variableback_log
ScopeGlobal
DynamicNo
TypeInteger
Default Value-1(table 示自动调整大小;请勿分配此 Literals 值)
Minimum Value1
Maximum Value65535

MySQL 可以拥有的未完成连接请求数。当主要的 MySQL 线程在很短的时间内收到很多连接请求时,这就会起作用。然后,主线程需要花费一些时间(尽管很少)来检查连接并启动新线程。 back_log值指示在 MySQL 暂时停止回答新请求之前的短时间内可以堆叠多少个请求。仅当您期望在短时间内有大量连接时,才需要增加此数量。

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

默认值基于以下公式,上限为 900:

50 + (max_connections / 5)

PropertyValue
Command-Line Format--basedir=dir_name
System Variablebasedir
ScopeGlobal
DynamicNo
TypeDirectory name
Default Valueconfiguration-dependent default

MySQL 安装基础目录的路径。

PropertyValue
Command-Line Format--big-tables[={OFF|ON}]
System Variablebig_tables
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

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

新连接的默认值为OFF(使用内存中的临时 table)。通常,永远不需要启用此变量,因为服务器可以通过为小型临时 table 使用内存并根据需要切换到基于磁盘的 table 来自动处理大型结果集。

PropertyValue
Command-Line Format--bind-address=addr
System Variablebind_address
ScopeGlobal
DynamicNo
TypeString
Default Value*

MySQL 服务器在单个网络套接字上侦听 TCP/IP 连接。该套接字绑定到一个地址,但是一个地址可以 Map 到多个网络接口。要指定地址,请在服务器启动时设置bind_address=addr,其中* addr 是 IPv4 或 IPv6 地址或主机名。如果 addr *是主机名,则服务器会将名称解析为 IP 地址并绑定到该地址。如果主机名解析为多个 IP 地址,则服务器使用第一个 IPv4 地址(如果有),否则使用第一个 IPv6 地址。

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

  • 如果地址为*,则服务器在所有服务器主机的 IPv4 接口上接受 TCP/IP 连接,如果服务器主机支持 IPv6,则在所有 IPv6 接口上接受 TCP/IP 连接。使用此地址允许所有服务器接口上的 IPv4 和 IPv6 连接。此值为默认值。

    • 如果地址为0.0.0.0,则服务器在所有服务器主机 IPv4 接口上接受 TCP/IP 连接。

    • 如果地址为::,则服务器在所有服务器主机 IPv4 和 IPv6 接口上接受 TCP/IP 连接。

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

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

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

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

该变量对嵌入式服务器(libmysqld)不起作用,并且在嵌入式服务器中不可见。

PropertyValue
Command-Line Format--block-encryption-mode=#
System Variableblock_encryption_mode
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueaes-128-ecb

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

block_encryption_mode采用aes-keylen-mode格式的值,其中* keylen 是密钥长度(以位为单位), mode *是加密模式。该值不区分大小写。允许的_keylen *值为 128、192 和 256.允许的加密模式取决于 MySQL 是使用 OpenSSL 还是 yaSSL 编译的:

  • 对于 OpenSSL,允许的* mode *值为:ECBCBCCFB1CFB8CFB128OFB

    • 对于 yaSSL,允许的* mode *值为:ECBCBC

例如,以下语句使 AES 加密功能使用 256 位的密钥长度和 CBC 模式:

SET block_encryption_mode = 'aes-256-cbc';

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

PropertyValue
Command-Line Format--bulk-insert-buffer-size=#
System Variablebulk_insert_buffer_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value8388608
Minimum Value0
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

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

PropertyValue
System Variablecharacter_set_client
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueutf8

来自 Client 端的语句的字符集。当 Client 端连接到服务器时,使用 Client 端请求的字符集设置此变量的会话值。 (许多 Client 端支持--default-character-set选项,以便可以明确指定此字符集.另请参见第 10.4 节“连接字符集和排序规则”。)在 Client 端请求的值未知或不可用时,该变量的全局值用于设置会话值;或者服务器配置为忽略 Client 端请求:

  • Client 端请求服务器未知的字符集。例如,启用日语的 Client 端在连接到未配置sjis支持的服务器时请求sjis

    • Client 端来自低于 MySQL 4.1 的 MySQL 版本,因此不请求字符集。

    • mysqld是使用--skip-character-set-client-handshake选项启动的,这会导致它忽略 Client 端字符集配置。这重现了 MySQL 4.0 的行为,如果您希望在不升级所有 Client 端的情况下升级服务器,则将很有用。

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

PropertyValue
System Variablecharacter_set_connection
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueutf8

该字符集用于不带字符集介绍符的指定 Literals,以及用于数字到字符串的转换。有关介绍人的信息,请参见第 10.3.8 节“字符集介绍者”

PropertyValue
System Variablecharacter_set_database
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuelatin1
Footnote此选项是动态的,但只有服务器应设置此信息。您不应手动设置此变量的值。

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

全局character_set_databasecollation_database系统变量在 MySQL 5.7 中已弃用,并将在以后的 MySQL 版本中删除。

在 MySQL 5.7 中不建议向会话character_set_databasecollation_database系统变量分配值,并且分配会产生警告。会话变量在 MySQL 的 Future 版本中将变为只读,并且赋值将产生错误。仍然可以访问会话变量,以确定默认数据库的数据库字符集和排序规则。

PropertyValue
Command-Line Format--character-set-filesystem=name
System Variablecharacter_set_filesystem
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuebinary

文件系统字符集。此变量用于解释引用文件名的字符串 Literals,例如LOAD DATA选择...进入外档语句以及LOAD_FILE()函数。在尝试打开文件之前,此类文件名将从character_set_client转换为character_set_filesystem。默认值为binary,table 示不进行任何转换。对于允许多字节文件名的系统,不同的值可能更合适。例如,如果系统使用 UTF-8table 示文件名,则将character_set_filesystem设置为'utf8mb4'

PropertyValue
System Variablecharacter_set_results
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueutf8

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

PropertyValue
Command-Line Format--character-set-server=name
System Variablecharacter_set_server
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuelatin1

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

PropertyValue
System Variablecharacter_set_system
ScopeGlobal
DynamicNo
TypeString
Default Valueutf8

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

PropertyValue
Command-Line Format--character-sets-dir=dir_name
System Variablecharacter_sets_dir
ScopeGlobal
DynamicNo
TypeDirectory name

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

PropertyValue
Command-Line Format--check-proxy-users[={OFF|ON}]
System Variablecheck_proxy_users
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

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

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

PropertyValue
System Variablecollation_connection
ScopeGlobal, Session
DynamicYes
TypeString

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

PropertyValue
System Variablecollation_database
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuelatin1_swedish_ci
Footnote此选项是动态的,但只有服务器应设置此信息。您不应手动设置此变量的值。

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

全局character_set_databasecollation_database系统变量在 MySQL 5.7 中已弃用,并将在以后的 MySQL 版本中删除。

在 MySQL 5.7 中不建议向会话character_set_databasecollation_database系统变量分配值,并且分配会产生警告。会话变量在 MySQL 的 Future 版本中将变为只读,并且赋值将产生错误。仍然可以访问会话变量,以确定默认数据库的数据库字符集和排序规则。

PropertyValue
Command-Line Format--collation-server=name
System Variablecollation_server
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuelatin1_swedish_ci

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

PropertyValue
Command-Line Format--completion-type=#
System Variablecompletion_type
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default ValueNO_CHAIN
Valid ValuesNO_CHAIN

CHAIN
RELEASE
0
1
2

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

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

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

PropertyValue
Command-Line Format--concurrent-insert[=value]
System Variableconcurrent_insert
ScopeGlobal
DynamicYes
TypeEnumeration
Default ValueAUTO
Valid ValuesNEVER

AUTO
ALWAYS
0
1
2

如果是AUTO(默认值),MySQL 允许MyISAMtable 并发运行INSERTSELECT语句,而MyISAMtable 在数据文件的中间没有空闲块。

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

ValueDescription
NEVER(或 0)禁用并发插入
AUTO(或 1)(默认)为没有孔的MyISAMtable 启用并发插入
ALWAYS(或 2 个)为所有MyISAMtable 启用并发插入,即使是有孔的 table 也是如此。对于有孔的 table,如果另一个线程正在使用该 table,则在 table 末插入新行。否则,MySQL 将获得普通的写锁,并将该行插入到该孔中。

如果以mysqld开头mysqld,则concurrent_insert设置为NEVER

另请参见第 8.11.3 节“并发插入”

PropertyValue
Command-Line Format--connect-timeout=#
System Variableconnect_timeout
ScopeGlobal
DynamicYes
TypeInteger
Default Value10
Minimum Value2
Maximum Value31536000

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

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

PropertyValue
System Variablecore_file
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueOFF

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

PropertyValue
Command-Line Format--datadir=dir_name
System Variabledatadir
ScopeGlobal
DynamicNo
TypeDirectory name

MySQL 服务器数据目录的路径。相对路径相对于当前目录进行解析。如果服务器将自动启动(即,在无法假定当前目录为上下文的上下文中),则最好将datadir值指定为绝对路径。

此变量未使用。它已被弃用并在 MySQL 8.0 中删除。

此变量未使用。它已被弃用并在 MySQL 8.0 中删除。

PropertyValue
Command-Line Format--debug[=debug_options]
System Variabledebug
ScopeGlobal, Session
DynamicYes
TypeString
预设值(Windows)d:t:i:O,\mysqld.trace
预设值(Unix)d:t:i:o,/tmp/mysqld.trace

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

设置此系统变量的会话值是受限制的操作。会话用户必须具有足以设置受限会话变量的特权。参见第 5.1.8.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       |
+---------+

有关更多信息,请参见第 28.5.3 节“ DBUG 软件包”

PropertyValue
System Variabledebug_sync
ScopeSession
DynamicYes
TypeString

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

全局变量值是只读的,它指示是否启用该功能。默认情况下,“调试同步”是禁用的,并且debug_sync的值为OFF。如果服务器以--debug-sync-timeout=N开头,其中* N 是大于 0 的超时值,则启用调试同步,并且debug_sync的值为ON - current signal,后跟 signal 名称。此外, N *成为各个同步点的默认超时。

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

设置此系统变量的会话值是受限制的操作。会话用户必须具有足以设置受限会话变量的特权。参见第 5.1.8.1 节“系统变量特权”

有关“调试同步”功能以及如何使用同步点的说明,请参见MySQL 内部:测试同步

PropertyValue
Command-Line Format--default-authentication-plugin=plugin_name
System Variabledefault_authentication_plugin
ScopeGlobal
DynamicNo
TypeEnumeration
Default Valuemysql_native_password
Valid Valuesmysql_native_password

sha256_password

默认身份验证插件。这些值是允许的:

Note

如果此变量的值不是mysql_native_password,则 MySQL 5.5.7 之前的 Client 端无法连接,因为在允许的默认身份验证插件中,它们仅了解mysql_native_password身份验证协议。

default_authentication_plugin值会影响服务器操作的以下方面:

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

    • old_passwords系统变量会影响使用mysql_native_passwordsha256_password身份验证插件的帐户的密码哈希。如果默认身份验证插件是这些插件之一,则服务器在启动时将old_passwords设置为插件密码哈希方法所需的值。

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

CREATE USER ... IDENTIFIED BY 'cleartext password';
GRANT ...  IDENTIFIED BY 'cleartext password';
  • 对于使用以下任一语句创建的帐户,如果密码哈希具有插件所需的格式,则服务器会将帐户与默认身份验证插件关联,并为该帐户分配给定的密码哈希:
CREATE USER ... IDENTIFIED BY PASSWORD 'encrypted password';
GRANT ...  IDENTIFIED BY PASSWORD 'encrypted password';

如果密码哈希不是默认身份验证插件要求的格式,则该语句将失败。

PropertyValue
Command-Line Format--default-password-lifetime=#
System Variabledefault_password_lifetime
ScopeGlobal
DynamicYes
TypeInteger
默认值(≥5.7.11)0
预设值(≤5.7.10)360
Minimum Value0
Maximum Value65535

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

使用ALTER USER语句的密码到期选项,可以根据需要为单个帐户覆盖全局密码到期策略。参见第 6.2.11 节“密码 Management”

Note

在 MySQL 5.7.11 之前,默认的default_password_lifetime值为 360(密码大约每年必须更改一次)。对于这些版本,请注意,如果您未对default_password_lifetime变量或单个用户帐户进行任何更改,则所有用户密码将在 360 天后过期,并且所有用户帐户在这种情况下都将以受限模式运行。然后,连接到服务器的 Client 端(实际上是用户)将收到错误消息,指示必须更改密码:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

但是,对于自动连接到服务器的 Client 端(例如通过脚本进行的连接),这很容易错过。为避免此类 Client 端由于密码过期而突然停止工作,请确保更改这些 Client 端的密码过期设置,如下所示:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER

或者,将default_password_lifetime变量设置为0,从而禁用所有用户的自动密码过期。

PropertyValue
Command-Line Format--default-storage-engine=name
System Variabledefault_storage_engine
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default ValueInnoDB

table 的默认存储引擎。参见第 15 章,备用存储引擎。此变量仅将存储引擎设置为永久 table。要为TEMPORARY个 table 设置存储引擎,请设置default_tmp_storage_engine系统变量。

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

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

PropertyValue
Command-Line Format--default-tmp-storage-engine=name
System Variabledefault_tmp_storage_engine
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default ValueInnoDB

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

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

PropertyValue
Command-Line Format--default-week-format=#
System Variabledefault_week_format
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value0
Minimum Value0
Maximum Value7

用于WEEK()功能的默认模式值。参见第 12.6 节“日期和时间函数”

PropertyValue
Command-Line Format--delay-key-write[={OFF|ON|ALL}]
System Variabledelay_key_write
ScopeGlobal
DynamicYes
TypeEnumeration
Default ValueON
Valid ValuesON

OFF
ALL

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

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

OptionDescription
OFFDELAY_KEY_WRITE被忽略。
ONMySQL 支持CREATE TABLE语句中指定的任何DELAY_KEY_WRITE选项。这是默认值。
ALL将所有新打开的 table 视为已将其启用DELAY_KEY_WRITE选项创建。

Note

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

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

如果以mysqld开头mysqld,则delay_key_write设置为OFF

Warning

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

PropertyValue
Command-Line Format--delayed-insert-limit=#
DeprecatedYes
System Variabledelayed_insert_limit
ScopeGlobal
DynamicYes
TypeInteger
Default Value100
Minimum Value1
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

不建议使用此系统变量(因为不支持DELAYED插入),并将在以后的版本中将其删除。

PropertyValue
Command-Line Format--delayed-insert-timeout=#
DeprecatedYes
System Variabledelayed_insert_timeout
ScopeGlobal
DynamicYes
TypeInteger
Default Value300

不建议使用此系统变量(因为不支持DELAYED插入),并将在以后的版本中将其删除。

PropertyValue
Command-Line Format--delayed-queue-size=#
DeprecatedYes
System Variabledelayed_queue_size
ScopeGlobal
DynamicYes
TypeInteger
Default Value1000
Minimum Value1
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

不建议使用此系统变量(因为不支持DELAYED插入),并将在以后的版本中将其删除。

PropertyValue
Command-Line Format--disabled-storage-engines=engine[,engine]...
System Variabledisabled_storage_engines
ScopeGlobal
DynamicNo
TypeString
Default Valueempty string

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

[mysqld]
disabled_storage_engines="MyISAM,FEDERATED"

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

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

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

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

Note

设置disabled_storage_engines可能会导致mysql_upgrade出现问题。有关详细信息,请参见第 4.4.7 节“ mysql_upgrade-检查和升级 MySQLtable”

PropertyValue
Command-Line Format--disconnect-on-expired-password[={OFF|ON}]
System Variabledisconnect_on_expired_password
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueON

此变量控制服务器如何处理具有过期密码的 Client 端:

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

PropertyValue
Command-Line Format--div-precision-increment=#
System Variablediv_precision_increment
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value4
Minimum Value0
Maximum Value30

此变量指示数字位数,通过该位数可以增加用/运算符执行的除法运算结果的小数位数。默认值为 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 |
+----------------+

PropertyValue
Command-Line Format--end-markers-in-json[={OFF|ON}]
System Variableend_markers_in_json
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

优化程序 JSON 输出是否应添加结束标记。参见MySQL Internals:end_markers_in_json 系统变量

PropertyValue
Command-Line Format--eq-range-index-dive-limit=#
System Variableeq_range_index_dive_limit
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value200
Minimum Value0
Maximum Value4294967295

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

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

在这两种情况下,table 达式都包含* N *相等范围。优化器可以使用索引下降或索引统计信息进行行估计。如果eq_range_index_dive_limit大于 0,则当存在eq_range_index_dive_limit或更大的相等范围时,优化器将使用现有索引统计信息,而不是索引下潜。因此,要允许在最多_ N 相等范围内使用索引转移,请将eq_range_index_dive_limit设置为 N * 1.要禁用索引统计信息,并且始终使用索引转移而不考虑 N *,请将eq_range_index_dive_limit设置为 0.

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

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

由最后一条生成消息的语句导致的错误数。该变量是只读的。参见第 13.7.5.17 节“ SHOW ERRORS 语句”

PropertyValue
Command-Line Format--event-scheduler[=value]
System Variableevent_scheduler
ScopeGlobal
DynamicYes
TypeEnumeration
Default ValueOFF
Valid ValuesON

OFF
DISABLED

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

PropertyValue
Command-Line Format--explicit-defaults-for-timestamp[={OFF|ON}]
DeprecatedYes
System Variableexplicit_defaults_for_timestamp
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

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

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

  • 未使用NULL属性明确声明的TIMESTAMP列将自动通过NOT NULL属性声明。允许为此类列分配值NULL并将其设置为当前时间戳。

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

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

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

刚刚描述的非标准行为已被弃用,并将在将来的 MySQL 版本中删除。

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

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

    • 未使用NOT NULL属性明确声明的TIMESTAMP列将自动通过NULL属性声明并允许NULL值。为此类列分配值NULL会将其设置为NULL,而不是当前时间戳。

    • 使用NOT NULL属性声明的TIMESTAMP列不允许NULL值。对于为此类列指定NULL的插入,结果是单行插入错误或启用了严格 SQL 模式,或者在禁用了严格 SQL 模式的情况下为多行插入插入'0000-00-00 00:00:00'。在任何情况下,都不会为列分配值NULL并将其设置为当前时间戳。

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

    • 不会自动使用DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP属性声明TIMESTAMP列。这些属性必须明确指定。

    • table 中的第一个TIMESTAMP列与第一个后的TIMESTAMP列没有不同的处理方式。

如果在服务器启动时禁用了explicit_defaults_for_timestamp,则此警告将显示在错误日志中:

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

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

Note

explicit_defaults_for_timestamp本身已被弃用,因为其唯一目的是允许控制将在以后的 MySQL 版本中删除的已弃用的TIMESTAMP行为。当删除这些行为时,explicit_defaults_for_timestamp将没有任何作用,也将被删除。

有关更多信息,请参见第 11.2.6 节“ TIMESTAMP 和 DATETIME 的自动初始化和更新”

PropertyValue
System Variableexternal_user
ScopeSession
DynamicNo
TypeString

认证过程中使用的外部用户名,由用于认证 Client 端的插件设置。使用本地(内置)MySQL 身份验证,或者如果插件未设置值,则此变量为NULL。参见第 6.2.14 节“代理用户”

PropertyValue
Command-Line Format--flush[={OFF|ON}]
System Variableflush
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

Note

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

PropertyValue
Command-Line Format--flush-time=#
System Variableflush_time
ScopeGlobal
DynamicYes
TypeInteger
Default Value0
Minimum Value0

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

Note

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

PropertyValue
System Variableforeign_key_checks
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueON

如果设置为 1(默认值),则检查外键约束。如果设置为 0,将忽略外键约束,但有一些 exception。重新创建被删除的 table 时,如果 table 定义不符合引用该 table 的外键约束,则会返回错误。同样,如果外键定义格式错误,则ALTER TABLE操作将返回错误。有关更多信息,请参见第 13.1.18.5 节“外键约束”

设置此变量对NDBtable 的作用与对InnoDBtable 的作用相同。通常,您可以在正常操作期间启用此设置以实施referential integrity。禁用外键检查对于以不同于其父/子关系所需 Sequences 的 Sequences 重新加载InnoDBtable 很有用。参见第 13.1.18.5 节“外键约束”

foreign_key_checks设置为 0 也将影响数据定义语句:DROP SCHEMA删除一个架构,即使它包含具有该架构之外的 table 所引用的外键的 table,而DROP TABLE删除一个具有其他 table 所引用的外键的 table。

Note

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

即使使用foreign_key_checks=0,也不允许删除外键约束所需的索引。在删除索引之前,必须删除外键约束(错误#70260)。

PropertyValue
Command-Line Format--ft-boolean-syntax=name
System Variableft_boolean_syntax
ScopeGlobal
DynamicYes
TypeString
Default Value+ -><()~*:""&|

使用IN BOOLEAN MODE执行的布尔全文搜索支持的运算符列 table。参见第 12.9.2 节“Boolean 全文本搜索”

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

  • 运算符功能由字符串中的位置确定。

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

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

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

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

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

  • ft_max_word_len

PropertyValue
Command-Line Format--ft-max-word-len=#
System Variableft_max_word_len
ScopeGlobal
DynamicNo
TypeInteger
Minimum Value10

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

Note

更改此变量后,必须在MyISAMtable 上重建FULLTEXT索引。使用REPAIR TABLE tbl_name QUICK

PropertyValue
Command-Line Format--ft-min-word-len=#
System Variableft_min_word_len
ScopeGlobal
DynamicNo
TypeInteger
Default Value4
Minimum Value1

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

Note

更改此变量后,必须在MyISAMtable 上重建FULLTEXT索引。使用REPAIR TABLE tbl_name QUICK

PropertyValue
Command-Line Format--ft-query-expansion-limit=#
System Variableft_query_expansion_limit
ScopeGlobal
DynamicNo
TypeInteger
Default Value20
Minimum Value0
Maximum Value1000

用于使用WITH QUERY EXPANSION进行全文本搜索的最高匹配数。

PropertyValue
Command-Line Format--ft-stopword-file=file_name
System Variableft_stopword_file
ScopeGlobal
DynamicNo
TypeFile name

从中读取停用词列 table 以在MyISAMtable 上进行全文搜索的文件。除非给出绝对路径名以指定其他目录,否则服务器将在数据目录中查找文件。文件中的所有单词都被使用;Comment不接受。默认情况下,使用内置的停用词列 table(在storage/myisam/ft_static.c文件中定义)。将此变量设置为空字符串('')将禁用停用词过滤。另请参见第 12.9.4 节“全文停用词”

Note

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

PropertyValue
Command-Line Format--general-log[={OFF|ON}]
System Variablegeneral_log
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

PropertyValue
Command-Line Format--general-log-file=file_name
System Variablegeneral_log_file
ScopeGlobal
DynamicYes
TypeFile name
Default Valuehost_name.log

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

PropertyValue
Command-Line Format--group-concat-max-len=#
System Variablegroup_concat_max_len
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value1024
Minimum Value4
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

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

YES(如果zlib压缩库可用于服务器),NO(如果没有)。如果没有,则不能使用COMPRESS()UNCOMPRESS()功能。

YES(如果crypt()系统调用可用于服务器),则NO(如果服务器不可用)。如果不是,则不能使用ENCRYPT()功能。

Note

ENCRYPT()函数在 MySQL 5.7 中已弃用,它将在以后的 MySQL 版本中删除,并且不再使用。 (对于单向哈希,请考虑改用SHA2()。)因此,have_crypt也已弃用,将被删除。

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

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

此变量是have_ssl的同义词。

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

不建议使用此变量,并将在将来的 MySQL 版本中将其删除。

YES(如果mysqld支持查询缓存),NO(不支持)。

Note

从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。弃用包括have_query_cache

YES(如果RTREE个索引可用),NO(如果不可用)。 (这些用于MyISAMtable 中的空间索引.)

PropertyValue
System Variablehave_ssl
ScopeGlobal
DynamicNo
TypeString
Valid ValuesYES(提供 SSL 支持)

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

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

PropertyValue
System Variablehave_statement_timeout
ScopeGlobal
DynamicNo
TypeBoolean

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

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

在 Windows 上,此变量没有意义。

PropertyValue
Command-Line Format--host-cache-size=#
System Variablehost_cache_size
ScopeGlobal
DynamicYes
TypeInteger
Default Value-1(table 示自动调整大小;请勿分配此 Literals 值)
Minimum Value0
Maximum Value65536

此变量控制主机缓存的大小,以及公开缓存内容的 Performance Schema host_cachetable 的大小。将大小设置为 0 将禁用主机缓存。在运行时更改缓存大小会导致隐式FLUSH HOSTS操作,该操作将清除主机缓存,截断host_cachetable 并取消阻止所有被阻止的主机。

默认值自动调整为 128,对于max_connections到 500 的值,加 1;对于max_connections值中的 500 上的每 20 的增量,加 1.上限为 2000.

使用--skip-host-cache选项类似于将host_cache_size系统变量设置为 0,但是host_cache_size更灵活,因为它还可以用于在运行时调整大小,启用和禁用主机缓存,而不仅仅是在服务器启动时。使用--skip-host-cache启动服务器不会阻止更改host_cache_size的值,但是即使host_cache_size在运行时设置为大于 0,这样的更改也不会生效,并且不会重新启用缓存。

有关主机缓存如何工作的更多信息,请参见第 5.1.11.2 节“ DNS 查找和主机缓存”

PropertyValue
System Variablehostname
ScopeGlobal
DynamicNo
TypeString

服务器在启动时将此变量设置为服务器主机名。

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

PropertyValue
Deprecated5.7.16
System Variableignore_db_dirs
ScopeGlobal
DynamicNo
TypeString

以逗号分隔的名称列 table,这些名称在数据目录中不被视为数据库目录。该值是从服务器启动时给定的--ignore-db-dir的任何实例设置的。

从 MySQL 5.7.11 开始,--ignore-db-dir可以在数据目录初始化时与mysqld --initialize一起使用,以指定服务器为了评估现有数据目录是否为空而应忽略的目录。参见第 2.10.1 节“初始化数据目录”

MySQL 5.7 中不推荐使用此系统变量。随着 MySQL 8.0 中数据字典的引入,它变得多余,并在该版本中被删除。

PropertyValue
Command-Line Format--init-connect=name
System Variableinit_connect
ScopeGlobal
DynamicYes
TypeString

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

对于具有SUPER特权的用户,不执行init_connect的内容。这样做是为了避免init_connect的错误值不会阻止所有 Client 端连接。例如,该值可能包含具有语法错误的语句,从而导致 Client 端连接失败。对于具有SUPER特权的用户不执行init_connect可以使他们打开连接并修复init_connect的值。

从 MySQL 5.7.22 开始,密码过期的所有 Client 端用户都会跳过init_connect执行。这样做是因为这样的用户无法执行任意语句,因此init_connect执行将失败,从而使 Client 端无法连接。跳过init_connect执行可使用户连接并更改密码。

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

PropertyValue
Command-Line Format--init-file=file_name
System Variableinit_file
ScopeGlobal
DynamicNo
TypeFile name

如果指定,此变量将命名一个文件,该文件包含要在启动过程中读取和执行的 SQL 语句。每个语句必须在一行上,并且不应包含 Comments。

如果服务器以--bootstrap--initialize--initialize-insecure选项中的任何一个启动,则它将以引导模式运行,并且某些功能不可用,该功能限制了文件中允许的语句。这些包括与帐户 Management(例如CREATE USERGRANT),复制和全局事务标识符有关的语句。参见第 16.1.3 节“使用全局事务标识符进行复制”

  • innodb_xxx

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

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

PropertyValue
Command-Line Format--interactive-timeout=#
System Variableinteractive_timeout
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value28800
Minimum Value1

服务器在关闭交互式连接之前 await 活动的秒数。交互式 Client 端定义为使用mysql_real_connect()CLIENT_INTERACTIVE选项的 Client 端。另请参见wait_timeout

PropertyValue
Command-Line Format--internal-tmp-disk-storage-engine=#
System Variableinternal_tmp_disk_storage_engine
ScopeGlobal
DynamicYes
TypeEnumeration
Default ValueINNODB
Valid ValuesMYISAM

INNODB

磁盘上内部临时 table 的存储引擎(请参见第 8.4.4 节“ MySQL 中的内部临时 table 使用”)。允许的值为MYISAMINNODB(默认值)。

optimizerinternal_tmp_disk_storage_engine定义的存储引擎用于磁盘内部临时 table。

使用internal_tmp_disk_storage_engine=INNODB(默认设置)时,生成超过InnoDB 行或列限制的磁盘内部临时 table 的查询将返回“行大小太大”或“列太多”错误。解决方法是将internal_tmp_disk_storage_engine设置为MYISAM

PropertyValue
Command-Line Format--join-buffer-size=#
System Variablejoin_buffer_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value262144
Minimum Value128
最大值(其他 64 位平台)18446744073709547520
最大值(其他 32 位平台)4294967295
最大值(Windows)4294967295

用于普通索引扫描,范围索引扫描和不使用索引的联接的缓冲区的最小大小,从而执行全 table 扫描。通常,获得快速联接的最佳方法是添加索引。当无法添加索引时,增加join_buffer_size的值以获得更快的完全联接。为两个 table 之间的每个完全连接分配一个连接缓冲区。对于不使用索引的多个 table 之间的复杂联接,可能需要多个联接缓冲区。

除非使用“块嵌套循环”或“批处理密钥访问”算法,否则将缓冲区设置为大于容纳每个匹配行所需的缓冲区不会有任何好处,并且所有联接至少分配最小大小,因此在将此变量设置为 Global 价值巨大。最好将全局设置保持较小,并且仅在进行大型联接的会话中将会话设置更改为较大的值。如果全局大小大于使用它的大多数查询所需的大小,则内存分配时间可能会导致性能大幅下降。

当使用“块嵌套循环”时,较大的连接缓冲区可能是有益的,直到第一个 table 中所有行的所有必需列都存储在连接缓冲区中为止。这取决于查询;最佳大小可能小于保存第一个 table 中的所有行。

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

默认值为 256KB。 join_buffer_size的最大允许设置为 4GB-1.允许在 64 位平台上使用更大的值(64 位 Windows 除外,对于 64 位 Windows,较大的值会被警告截断为 4GB-1)。

有关联接缓冲的其他信息,请参见第 8.2.1.6 节“嵌套循环加入算法”。有关批量密钥访问的信息,请参见第 8.2.1.11 节,“阻止嵌套循环和批处理键访问联接”

PropertyValue
Command-Line Format--keep-files-on-create[={OFF|ON}]
System Variablekeep_files_on_create
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

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

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

PropertyValue
Command-Line Format--key-buffer-size=#
System Variablekey_buffer_size
ScopeGlobal
DynamicYes
TypeInteger
Default Value8388608
Minimum Value8
最大值(64 位平台)OS_PER_PROCESS_LIMIT
最大值(32 位平台)4294967295

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

在 32 位平台上,key_buffer_size的最大允许设置为 4GB-1.对于 64 位平台,允许使用更大的值。有效的最大大小可能会更少,具体取决于您的可用物理 RAM 以及 os 或硬件平台施加的按进程 RAM 限制。此变量的值指示请求的内存量。在内部,服务器会分配尽可能多的内存(最多达到此数量),但实际分配的内存可能会更少。

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

为了在同时写入多行时提高速度,请使用LOCK TABLES。参见第 8.2.4.1 节“优化 INSERT 语句”

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

可以使用key_buffer_size结合Key_blocks_unused status 变量和缓冲区块大小来确定使用中的关键缓冲区的比例,这可以从key_cache_block_size系统变量中获得:

1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)

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

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

PropertyValue
Command-Line Format--key-cache-age-threshold=#
System Variablekey_cache_age_threshold
ScopeGlobal
DynamicYes
TypeInteger
Default Value300
Minimum Value100
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

此值控制从键高速缓存的热子列 table 到热子列 table 的缓冲区降级。较低的值会导致降级速度更快。最小值是 100.默认值是 300.请参阅第 8.10.2 节“ MyISAM 密钥缓存”

PropertyValue
Command-Line Format--key-cache-block-size=#
System Variablekey_cache_block_size
ScopeGlobal
DynamicYes
TypeInteger
Default Value1024
Minimum Value512
Maximum Value16384

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

PropertyValue
Command-Line Format--key-cache-division-limit=#
System Variablekey_cache_division_limit
ScopeGlobal
DynamicYes
TypeInteger
Default Value100
Minimum Value1
Maximum Value100

关键高速缓存缓冲区列 table 的热和热子列 table 之间的划分点。该值是用于热子列 table 的缓冲区列 table 的百分比。允许值的范围是 1 到 100.默认值是 100.请参阅第 8.10.2 节“ MyISAM 密钥缓存”

PropertyValue
System Variablelarge_files_support
ScopeGlobal
DynamicNo

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

PropertyValue
Command-Line Format--large-pages[={OFF|ON}]
System Variablelarge_pages
ScopeGlobal
DynamicNo
Platform SpecificLinux
TypeBoolean
Default ValueOFF

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

PropertyValue
System Variablelarge_page_size
ScopeGlobal
DynamicNo
TypeInteger
Default Value0

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

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

PropertyValue
Command-Line Format--lc-messages=name
System Variablelc_messages
ScopeGlobal, Session
DynamicYes
TypeString
Default Valueen_US

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

PropertyValue
Command-Line Format--lc-messages-dir=dir_name
System Variablelc_messages_dir
ScopeGlobal
DynamicNo
TypeDirectory name

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

PropertyValue
Command-Line Format--lc-time-names=value
System Variablelc_time_names
ScopeGlobal, Session
DynamicYes
TypeString

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

PropertyValue
System Variablelicense
ScopeGlobal
DynamicNo
TypeString
Default ValueGPL

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

PropertyValue
Command-Line Format--local-infile[={OFF|ON}]
System Variablelocal_infile
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueON

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

要明确导致服务器拒绝或允许本地加载数据语句(无论在构建时或运行时如何配置 Client 端程序和库),请分别在local_infile禁用或启用的情况下启动mysqldlocal_infile也可以在运行时设置。有关更多信息,请参见第 6.1.6 节“ LOAD DATA LOCAL 的安全注意事项”

PropertyValue
Command-Line Format--lock-wait-timeout=#
System Variablelock_wait_timeout
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value31536000
Minimum Value1
Maximum Value31536000

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

此超时适用于所有使用元数据锁的语句。这些包括对 table,视图,存储过程和存储函数以及LOCK TABLES带读取锁的平桌子HANDLER语句的 DML 和 DDL 操作。

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

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

lock_wait_timeout不适用于延迟插入,延迟插入始终执行 1 年。这样做是为了避免不必要的超时,因为发出延迟插入的会话不会收到延迟插入超时的通知。

PropertyValue
System Variablelocked_in_memory
ScopeGlobal
DynamicNo

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

PropertyValue
Command-Line Format--log-error[=file_name]
System Variablelog_error
ScopeGlobal
DynamicNo
TypeFile name

错误日志输出目标。如果目标是控制台,则值为stderr。否则,目标是文件,而log_error值是文件名。参见第 5.4.2 节“错误日志”

PropertyValue
Command-Line Format--log-error-verbosity=#
System Variablelog_error_verbosity
ScopeGlobal
DynamicYes
TypeInteger
Default Value3
Minimum Value1
Maximum Value3

服务器将错误,警告和 Comments 消息写入错误日志的详细程度。下 table 显示了允许的值。预设值为 3.

所需的日志过滤log_error_verbosity Value
Error messages1
错误和警告消息2
错误,警告和信息消息3

log_error_verbosity已在 MySQL 5.7.2 中添加。它比旧的log_warnings系统变量更可取,应该代替它使用。有关该变量与log_error_verbosity的关系的信息,请参见log_warnings的描述。特别是,将值分配给log_warnings会将值分配给log_error_verbosity,反之亦然。

PropertyValue
Command-Line Format--log-output=name
System Variablelog_output
ScopeGlobal
DynamicYes
TypeSet
Default ValueFILE
Valid ValuesTABLE

FILE
NONE

常规查询日志和慢速查询日志输出的一个或多个目标。该值是从TABLEFILENONE中选择的一个或多个逗号分隔的单词的列 table。 TABLE选择记录到mysql系统数据库中的general_logslow_logtable。 FILE选择日志记录日志文件。 NONE禁用日志记录。如果值中存在NONE,则它优先于存在的其他任何单词。可以同时提供TABLEFILE来选择两个日志输出目标。

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

PropertyValue
Command-Line Format--log-queries-not-using-indexes[={OFF|ON}]
System Variablelog_queries_not_using_indexes
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

PropertyValue
Command-Line Format--log-slow-admin-statements[={OFF|ON}]
System Variablelog_slow_admin_statements
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

PropertyValue
Command-Line Format--log-syslog[={OFF|ON}]
System Variablelog_syslog
ScopeGlobal
DynamicYes
TypeBoolean
预设值(Windows)ON
预设值(Unix)OFF

是否将错误日志输出写入系统日志。这是 Windows 上的事件日志,在 Unix 和类似 Unix 的系统上是syslog。默认值是特定于平台的:

  • 在 Windows 上,默认情况下启用事件日志输出。

    • 在 Unix 和类似 Unix 的系统上,默认情况下禁用syslog输出。

不管默认值如何,都可以将log_syslog显式设置为控制任何受支持平台上的输出。

系统日志输出控件不同于将错误输出发送到文件或控制台。可以根据需要将错误输出定向到文件或控制台,以作为系统日志的补充或替代。参见第 5.4.2 节“错误日志”

PropertyValue
Command-Line Format--log-syslog-facility=value
System Variablelog_syslog_facility
ScopeGlobal
DynamicYes
TypeString
Default Valuedaemon

将错误日志输出写入syslog的功能(哪种类型的程序正在发送消息)。除非启用了log_syslog系统变量,否则此变量无效。参见第 5.4.2.3 节“错误记录到系统日志”

允许的值可能会因 os 而异;请查阅系统syslog文档。

Windows 上不存在此变量。

PropertyValue
Command-Line Format--log-syslog-include-pid[={OFF|ON}]
System Variablelog_syslog_include_pid
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueON

是否在写入syslog的错误日志输出的每一行中包括服务器进程 ID。除非启用了log_syslog系统变量,否则此变量无效。参见第 5.4.2.3 节“错误记录到系统日志”

Windows 上不存在此变量。

PropertyValue
Command-Line Format--log-syslog-tag=tag
System Variablelog_syslog_tag
ScopeGlobal
DynamicYes
TypeString
Default Valueempty string

要添加到服务器标识符中的标记,该标记将写入syslog的错误日志输出中。除非启用了log_syslog系统变量,否则此变量无效。参见第 5.4.2.3 节“错误记录到系统日志”

默认情况下,服务器标识符是mysqld,没有标签。如果指定了标记值* tag *,则该标记值将以前导连字符附加到服务器标识符中,从而导致标识符mysqld-tag

在 Windows 上,要使用尚不存在的标记,必须从具有 Management 员特权的帐户运行服务器,以允许为该标记创建注册 table 项。如果标签已经存在,则不需要提升的特权。

PropertyValue
Command-Line Format--log-timestamps=#
System Variablelog_timestamps
ScopeGlobal
DynamicYes
TypeEnumeration
Default ValueUTC
Valid ValuesUTC

SYSTEM

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

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

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

PropertyValue
Command-Line Format--log-throttle-queries-not-using-indexes=#
System Variablelog_throttle_queries_not_using_indexes
ScopeGlobal
DynamicYes
TypeInteger
Default Value0

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

PropertyValue
Command-Line Format--log-warnings[=#]
DeprecatedYes
System Variablelog_warnings
ScopeGlobal
DynamicYes
TypeInteger
Default Value2
Minimum Value0
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

是否对错误日志产生其他警告消息。从 MySQL 5.7.2 开始,以前由log_warnings支配的信息项由log_error_verbosity支配,这是优先于而不是较早的log_warnings系统变量的,并且应代替它使用。 (log_warnings系统变量和--log-warnings命令行选项已弃用,并将在以后的 MySQL 版本中删除。)

默认情况下启用log_warnings(MySQL 5.7.2 之前的默认值是 1,5.7.2 之后的默认值是 2)。要禁用它,请将其设置为 0.如果该值大于 0,则服务器记录有关基于语句的日志记录不安全的语句的消息。如果该值大于 1,则服务器会记录新的连接尝试中止的连接和访问被拒绝的错误。参见第 B.4.2.10 节,“通信错误和中止的连接”

如果使用复制,建议通过将其设置为大于 0 来启用此变量,以获取有关所发生情况的更多信息,例如有关网络故障和重新连接的消息。

如果从属服务器在启用log_warnings的情况下启动,则从属服务器会将错误消息打印到错误日志中,以提供有关其状态的信息,例如,当它切换到另一个中继日志时,二进制日志和中继日志坐标即 table 示它开始工作的位置。断开连接后重新连接,依此类推。

log_warnings分配值将为log_error_verbosity分配值,反之亦然。变量之间的关系如下:

从 MySQL 5.7.2 开始,默认日志级别由log_error_verbosity控制,默认级别为 3.此外,log_warnings的默认级别从 1 更改为 2,对应于log_error_verbosity=3。要获得类似于先前默认值的日志记录级别,请设置log_error_verbosity=2

在 MySQL 5.7.2 和更高版本中,仍然允许使用log_warnings,但可以 Map 为使用log_error_verbosity,如下所示:

PropertyValue
Command-Line Format--long-query-time=#
System Variablelong_query_time
ScopeGlobal, Session
DynamicYes
TypeNumeric
Default Value10
Minimum Value0

如果查询所花的时间长于许多秒,则服务器会递增Slow_queries状态变量。如果启用了慢查询日志,则查询将记录到慢查询日志文件中。此值是实时测量的,而不是 CPU 时间,因此,在负载较轻的系统上低于阈值的查询可能会在负载较重的系统上高于阈值。 long_query_time的最小值和默认值分别为 0 和 10.可以将值指定为微秒的分辨率。参见第 5.4.5 节“缓慢的查询日志”

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

PropertyValue
Command-Line Format--low-priority-updates[={OFF|ON}]
System Variablelow_priority_updates
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

如果设置为1,则所有INSERTUPDATEDELETELOCK TABLE WRITE语句都将 await,直到受影响的 table 上没有待处理的SELECTLOCK TABLE READ。使用{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ...降低仅一个查询的优先级,可以获得相同的效果。该变量仅影响仅使用 table 级锁定(例如MyISAMMEMORYMERGE)的存储引擎。参见第 8.11.2 节“table 锁定问题”

PropertyValue
System Variablelower_case_file_system
ScopeGlobal
DynamicNo
TypeBoolean

此变量描述数据目录所在文件系统上文件名的大小写敏感性。 OFFtable 示文件名区分大小写,ONtable 示文件名不区分大小写。该变量是只读的,因为它反映了文件系统属性,并且对其进行设置对文件系统没有影响。

PropertyValue
Command-Line Format--lower-case-table-names[=#]
System Variablelower_case_table_names
ScopeGlobal
DynamicNo
TypeInteger
Default Value0
Minimum Value0
Maximum Value2

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

在 Windows 上,默认值为 1.在 macOS 上,默认值为 2.在 Linux 上,不支持值 2;在 Linux 上,默认值为 2.服务器将值强制改为 0.

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

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

如果使用的是InnoDBtable,则应在所有平台上将此变量设置为 1,以强制将名称转换为小写。

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

PropertyValue
Command-Line Format--max-allowed-packet=#
System Variablemax_allowed_packet
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value4194304
Minimum Value1024
Maximum Value1073741824

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

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

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

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

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

PropertyValue
Command-Line Format--max-connect-errors=#
System Variablemax_connect_errors
ScopeGlobal
DynamicYes
TypeInteger
Default Value100
Minimum Value1
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

在没有成功连接的情况下中断了来自主机的max_connect_errors个连续的连接请求后,服务器将阻止该主机进行进一步的连接。如果在先前的连接被中断后少于max_connect_errors次尝试中成功构建了来自主机的连接,则该主机的错误计数将清除为零。但是,一旦主机被阻止,刷新主机缓存是取消阻止它的唯一方法。要刷新主机缓存,请执行FLUSH HOSTS语句,截断 Performance Schema host_cachetable 的TRUNCATE TABLE语句或mysqladmin flush-hosts命令。

有关主机缓存如何工作的更多信息,请参见第 5.1.11.2 节“ DNS 查找和主机缓存”

PropertyValue
Command-Line Format--max-connections=#
System Variablemax_connections
ScopeGlobal
DynamicYes
TypeInteger
Default Value151
Minimum Value1
Maximum Value100000

允许的最大同时 Client 端连接数。有关更多信息,请参见第 5.1.11.1 节“连接接口”

PropertyValue
Command-Line Format--max-delayed-threads=#
DeprecatedYes
System Variablemax_delayed_threads
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value20
Minimum Value0
Maximum Value16384

不建议使用此系统变量(因为不支持DELAYED插入),并将在以后的版本中将其删除。

PropertyValue
Command-Line Format--max-digest-length=#
System Variablemax_digest_length
ScopeGlobal
DynamicNo
TypeInteger
Default Value1024
Minimum Value0
Maximum Value1048576

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

减小max_digest_length值会减少内存使用量,但是如果仅在末尾有所不同,则会使更多语句的摘要值变得难以区分。增大值可以区分较长的语句,但是会增加内存使用量,尤其是对于涉及大量同时会话的工作负载(服务器为每个会话分配max_digest_length个字节)。

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

有关语句摘要的更多信息,请参见第 25.10 节“性能模式语句摘要”

PropertyValue
Command-Line Format--max-error-count=#
System Variablemax_error_count
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value64
Minimum Value0
Maximum Value65535

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

PropertyValue
Command-Line Format--max-execution-time=#
System Variablemax_execution_time
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value0

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

max_execution_time适用如下:

PropertyValue
Command-Line Format--max-heap-table-size=#
System Variablemax_heap_table_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value16777216
Minimum Value16384
最大值(64 位平台)1844674407370954752
最大值(32 位平台)4294967295

此变量设置允许用户创建的MEMORYtable 增长的最大大小。变量的值用于计算MEMORYtableMAX_ROWS的值。除非使用诸如CREATE TABLE之类的语句重新创建该 table 或使用ALTER TABLETRUNCATE TABLE对其进行更改,否则设置此变量对任何现有的MEMORYtable 均无效。服务器重新启动还会将现有MEMORYtable 的最大大小设置为全局max_heap_table_size值。

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

max_heap_table_size不被复制。有关更多信息,请参见第 16.4.1.20 节“复制和内存 table”第 16.4.1.37 节,“复制和变量”

PropertyValue
DeprecatedYes
System Variablemax_insert_delayed_threads
ScopeGlobal, Session
DynamicYes
TypeInteger

此变量是max_delayed_threads的同义词。

不建议使用此系统变量(因为不支持DELAYED插入),并将在以后的版本中将其删除。

PropertyValue
Command-Line Format--max-join-size=#
System Variablemax_join_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value18446744073709551615
Minimum Value1
Maximum Value18446744073709551615

不要允许可能需要检查多于max_join_size行(对于单 table 语句)或行组合(对于多 table 语句)的语句,或者可能要检查多于max_join_size磁盘查找的语句。通过设置该值,您可以捕获未正确使用键的语句,这可能需要很长时间。如果您的用户倾向于执行缺少WHERE子句,需要很长时间或返回数百万行的联接,请进行设置。有关更多信息,请参见使用安全更新模式(-安全更新)

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

如果查询结果在查询缓存中,则不执行结果大小检查,因为该结果是先前已计算的,并且不会增加服务器将其发送到 Client 端的负担。

PropertyValue
Command-Line Format--max-length-for-sort-data=#
System Variablemax_length_for_sort_data
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value1024
Minimum Value4
Maximum Value8388608

确定要使用哪种filesort算法的索引值大小的上限。参见第 8.2.1.14 节“按优化排序”

PropertyValue
Command-Line Format--max-points-in-geometry=#
System Variablemax_points_in_geometry
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value65536
Minimum Value3
Maximum Value1048576

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

PropertyValue
Command-Line Format--max-prepared-stmt-count=#
System Variablemax_prepared_stmt_count
ScopeGlobal
DynamicYes
TypeInteger
Default Value16382
Minimum Value0
Maximum Value1048576

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

PropertyValue
Command-Line Format--max-seeks-for-key=#
System Variablemax_seeks_for_key
ScopeGlobal, Session
DynamicYes
TypeInteger
默认值(64 位平台)18446744073709551615
默认值(32 位平台)4294967295
Minimum Value1
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

在基于键查找行时,限制假定的最大搜索次数。 MySQL 优化器假定,通过扫描索引在 table 中搜索匹配的行时,与索引的实际基数无关(请参见第 13.7.5.22 节,“ SHOW INDEX 语句”),键搜索的次数不超过此数目。通过将此值设置为较低的值(例如 100),可以强制 MySQL 首选索引而不是 table 扫描。

PropertyValue
Command-Line Format--max-sort-length=#
System Variablemax_sort_length
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value1024
Minimum Value4
Maximum Value8388608

排序数据值时使用的字节数。服务器仅使用每个值的前max_sort_length个字节,而忽略其余的字节。因此,仅在前max_sort_length个字节之后才不同的值比较GROUP BYORDER BYDISTINCT操作是否相等。

增大max_sort_length的值可能也需要增大sort_buffer_size的值。有关详细信息,请参见第 8.2.1.14 节“按优化排序”

PropertyValue
Command-Line Format--max-sp-recursion-depth[=#]
System Variablemax_sp_recursion_depth
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value0
Maximum Value255

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

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

此变量未使用。它已被弃用并在 MySQL 8.0 中删除。

PropertyValue
Command-Line Format--max-user-connections=#
System Variablemax_user_connections
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value0
Minimum Value0
Maximum Value4294967295

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

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

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

PropertyValue
Command-Line Format--max-write-lock-count=#
System Variablemax_write_lock_count
ScopeGlobal
DynamicYes
TypeInteger
默认值(64 位平台)18446744073709551615
默认值(32 位平台)4294967295
Minimum Value1
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

经过这么多的写锁定后,允许在其间处理一些未决的读锁定请求。写锁定请求比读锁定请求具有更高的优先级。但是,如果max_write_lock_count设置为某个较低的值(例如 10),则读锁定请求可能比挂起的写锁定请求更可取,前提是已将读锁定请求传递给了 10 个写锁定请求。通常情况下不会发生这种情况,因为默认情况下max_write_lock_count的值非常大。

  • mecab_rc_file

PropertyValue
Command-Line Format--mecab-rc-file=file_name
System Variablemecab_rc_file
ScopeGlobal
DynamicNo
TypeFile name

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

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

有关 MeCab 全文语法分析器的信息,请参见第 12.9.9 节“ MeCab 全文分析器插件”

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

PropertyValue
Command-Line Format--metadata-locks-cache-size=#
DeprecatedYes
System Variablemetadata_locks_cache_size
ScopeGlobal
DynamicNo
TypeInteger
Default Value1024
Minimum Value1
Maximum Value1048576

元数据的大小锁定缓存。服务器使用此缓存来避免创建和破坏同步对象。这对于操作成本很高的系统(例如 Windows XP)特别有用。

在 MySQL 5.7.4 中,元数据锁定实现的更改使此变量变得不必要,因此已弃用该变量,并将在以后的 MySQL 版本中将其删除。

PropertyValue
Command-Line Format--metadata-locks-hash-instances=#
DeprecatedYes
System Variablemetadata_locks_hash_instances
ScopeGlobal
DynamicNo
TypeInteger
Default Value8
Minimum Value1
Maximum Value1024

可以将这组元数据锁划分为单独的哈希,以允许访问不同对象的连接使用不同的锁定哈希并减少争用。 metadata_locks_hash_instances系统变量指定哈希数(默认为 8)。

在 MySQL 5.7.4 中,元数据锁定实现的更改使此变量变得不必要,因此已弃用该变量,并将在以后的 MySQL 版本中将其删除。

PropertyValue
Command-Line Format--min-examined-row-limit=#
System Variablemin_examined_row_limit
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value0
Minimum Value0
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

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

PropertyValue
Command-Line Format--multi-range-count=#
DeprecatedYes
System Variablemulti_range_count
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value256
Minimum Value1
Maximum Value4294967295

此变量无效。它已被弃用并在 MySQL 8.0 中删除。

PropertyValue
Command-Line Format--myisam-data-pointer-size=#
System Variablemyisam_data_pointer_size
ScopeGlobal
DynamicYes
TypeInteger
Default Value6
Minimum Value2
Maximum Value7

当未指定MAX_ROWS选项时,CREATE TABLE将为MyISAMtable 使用的默认指针大小(以字节为单位)。此变量不能小于 2 或大于 7.默认值为 6.请参见B.4.2.11 节,“table 已满”

PropertyValue
Command-Line Format--myisam-max-sort-file-size=#
System Variablemyisam_max_sort_file_size
ScopeGlobal
DynamicYes
TypeInteger
默认值(64 位平台)9223372036854775807
默认值(32 位平台)2147483648

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

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

PropertyValue
Command-Line Format--myisam-mmap-size=#
System Variablemyisam_mmap_size
ScopeGlobal
DynamicNo
TypeInteger
默认值(64 位平台)18446744073709551615
默认值(32 位平台)4294967295
Minimum Value7
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

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

PropertyValue
Command-Line Format--myisam-recover-options[=list]
System Variablemyisam_recover_options
ScopeGlobal
DynamicNo
TypeEnumeration
Default ValueOFF
Valid ValuesOFF

DEFAULT
BACKUP
FORCE
QUICK

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

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

OptionDescription
OFFNo recovery.
DEFAULT恢复时无需备份,强制或快速检查。
BACKUP如果在恢复过程中更改了数据文件,请将tbl_name.MYD文件的备份另存为tbl_name-datetime.BAK
FORCE即使我们会丢失.MYD文件中的多行,也请执行恢复。
QUICK如果没有任何删除块,请不要检查 table 中的行。

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

See 第 15.2.1 节“ MyISAM 启动选项”.

PropertyValue
Command-Line Format--myisam-repair-threads=#
System Variablemyisam_repair_threads
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value1
Minimum Value1
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

如果该值大于 1,则在Repair by sorting进程中并行创建MyISAMtable 索引(每个索引在其自己的线程中)。预设值为 1.

Note

多线程修复仍然是* beta 质量*代码。

PropertyValue
Command-Line Format--myisam-sort-buffer-size=#
System Variablemyisam_sort_buffer_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value8388608
Minimum Value4096
最大值(其他 64 位平台)18446744073709551615
最大值(其他 32 位平台)4294967295
最大值(Windows,64 位平台)18446744073709551615
最大值(Windows,32 位平台)4294967295

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

PropertyValue
Command-Line Format--myisam-stats-method=name
System Variablemyisam_stats_method
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default Valuenulls_unequal
Valid Valuesnulls_equal

nulls_unequal
nulls_ignored

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

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

PropertyValue
Command-Line Format--myisam-use-mmap[={OFF|ON}]
System Variablemyisam_use_mmap
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

使用内存 Map 来读取和写入MyISAMtable。

PropertyValue
Command-Line Format--mysql-native-password-proxy-users[={OFF|ON}]
System Variablemysql_native_password_proxy_users
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

此变量控制mysql_native_password内置身份验证插件是否支持代理用户。除非启用了check_proxy_users系统变量,否则它无效。有关用户代理的信息,请参见第 6.2.14 节“代理用户”

PropertyValue
Command-Line Format--named-pipe[={OFF|ON}]
System Variablenamed_pipe
ScopeGlobal
DynamicNo
Platform SpecificWindows
TypeBoolean
Default ValueOFF

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

PropertyValue
Command-Line Format--named-pipe-full-access-group=value
Introduced5.7.25
System Variablenamed_pipe_full_access_group
ScopeGlobal
DynamicNo
Platform SpecificWindows
TypeString
Default Value*everyone*
Valid Values*everyone*

empty string

(仅限 Windows.)当启用named_pipe系统变量以支持命名管道连接时,将由 MySQL 服务器创建的授予给命名管道上的 Client 端的访问控制设置为成功进行通信所需的最小限制。较新的 MySQLClient 端软件无需任何其他配置即可打开命名管道连接,但是,较旧的 Client 端软件可能仍需要完全访问权限才能打开命名管道连接。

该变量设置 Windows 本地组的名称,该本地组的成员被 MySQL 服务器授予足够的访问权限,以使用较旧的命名管道 Client 端。最初,默认情况下该值设置为'*everyone*',这允许 Windows 上 Everyone 组的用户 continue 使用旧 Client 端,直到升级旧 Client 端为止。相反,将值设置为空字符串意味着没有 Windows 用户将被授予对命名管道的完全访问权限。默认值'*everyone*'提供了一种独立于语言的方式来引用 Windows 上的 Everyone 组。

理想情况下,应在 Windows 中创建一个新的 Windows 本地组名称(例如mysql_old_client_users),然后在绝对需要访问较旧的 Client 端软件时使用该名称替换该变量的默认值。在这种情况下,将组的成员资格限制为尽可能少的用户,在升级其 Client 端软件时将用户从组中删除。尝试使用较旧的命名管道 Client 端打开与 MySQL 的连接的组的非成员被拒绝访问,直到 WindowsManagement 员将用户添加到该组中,然后用户注销并登录(由 Windows)。

PropertyValue
Command-Line Format--net-buffer-length=#
System Variablenet_buffer_length
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value16384
Minimum Value1024
Maximum Value1048576

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

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

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

PropertyValue
Command-Line Format--net-read-timeout=#
System Variablenet_read_timeout
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value30
Minimum Value1

中止读取之前从 Connectingawait 更多数据的秒数。当服务器从 Client 端读取时,net_read_timeout是控制何时中止的超时值。服务器正在向 Client 端写入时,net_write_timeout是控制何时中止的超时值。另请参见slave_net_timeout

PropertyValue
Command-Line Format--net-retry-count=#
System Variablenet_retry_count
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value10
Minimum Value1
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

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

PropertyValue
Command-Line Format--net-write-timeout=#
System Variablenet_write_timeout
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value60
Minimum Value1

在中止写入之前 await 块写入连接的秒数。另请参见net_read_timeout

PropertyValue
Command-Line Format--new[={OFF|ON}]
System Variablenew
ScopeGlobal, Session
DynamicYes
Disabled byskip-new
TypeBoolean
Default ValueOFF

在 MySQL 4.0 中,此变量用于打开一些 4.1 行为,并保留该变量是为了向后兼容。其值始终为OFF

在 NDB 群集中,将此变量设置为ON可以对NDB个 table 使用KEYLINEAR KEY以外的分区类型。 此功能仅是实验性功能,Producing 不支持。有关更多信息,请参见用户定义的分区和 NDB 存储引擎(NDB 群集)

  • ngram_token_size

PropertyValue
Command-Line Format--ngram-token-size=#
System Variablengram_token_size
ScopeGlobal
DynamicNo
TypeInteger
Default Value2
Minimum Value1
Maximum Value10

为 n-gram 全文分析器定义 n-gram 令牌大小。 ngram_token_size选项是只读的,只能在启动时进行修改。默认值为 2(二字组)。最大值为 10.

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

PropertyValue
Command-Line Format--offline-mode[={OFF|ON}]
System Variableoffline_mode
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

服务器是否处于“脱机模式”,具有以下 Feature:

  • 不具有SUPER特权的已连接 Client 端用户将在下一个请求时断开连接,并出现相应的错误。断开连接包括终止正在运行的语句和释放锁。这样的 Client 端也无法启动新的连接,并收到适当的错误。

    • 具有SUPER特权的已连接 Client 端用户不会断开连接,并且可以启动新连接来 Management 服务器。

    • 复制从属线程被允许 continue 将数据应用于服务器。

只有具有SUPER特权的用户才能控制离线模式。要将服务器置于脱机模式,请将offline_mode系统变量的值从OFF更改为ON。要恢复正常操作,请将offline_modeON更改为OFF。在脱机模式下,被拒绝访问的 Client 端收到ER_SERVER_OFFLINE_MODE错误。

PropertyValue
Command-Line Format--old[={OFF|ON}]
System Variableold
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueOFF

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

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

PropertyValue
Command-Line Format--old-alter-table[={OFF|ON}]
System Variableold_alter_table
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

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

PropertyValue
Command-Line Format--old-passwords=value
DeprecatedYes
System Variableold_passwords
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default Value0
Valid Values0

2

Note

该系统变量在 MySQL 5.7 中已弃用,并将在以后的 MySQL 版本中删除。

此变量控制PASSWORD()函数使用的密码哈希方法。它还会影响由使用IDENTIFIED BY子句指定密码的CREATE USERGRANT语句执行的密码哈希处理。

下 table 显示了每种密码哈希方法的许可值old_passwords以及哪些身份验证插件使用该哈希方法。

密码哈希方法old_passwords Value关联身份验证插件
MySQL 4.1 本机哈希0mysql_native_password
SHA-256 hashing2sha256_password

如果您设置old_passwords=2,请按照第 6.4.1.5 节“ SHA-256 可插拔身份验证”的说明使用sha256_password插件。

服务器在启动期间将全局old_passwords值设置为与default_authentication_plugin系统变量指示的身份验证插件所需的密码哈希方法一致。

Client 端成功连接到服务器后,服务器将为帐户身份验证方法设置适当的会话old_passwords值。例如,如果帐户使用sha256_password身份验证插件,则服务器将设置old_passwords=2

有关身份验证插件和哈希格式的其他信息,请参见第 6.2.13 节“可插入身份验证”第 6.1.2.4 节“ MySQL 中的密码哈希”

PropertyValue
Command-Line Format--open-files-limit=#
System Variableopen_files_limit
ScopeGlobal
DynamicNo
TypeInteger
Default Value5000, with possible adjustment
Minimum Value0
Maximum Valueplatform dependent

os 中mysqld可用的文件 Descriptors 的数量。 mysqld通过直接设置此变量或通过将--open-files-limit选项设置为mysqld_safe来使用setrlimit()保留 Descriptors,它们使用启动时请求的值。如果mysqld产生错误Too many open files,请尝试增加open_files_limit的值。在内部,此变量的最大值是最大无符号整数值,但实际最大值取决于平台。

运行时的open_files_limit值 table 示 os 实际允许mysqld使用的文件 Descriptors 的数量,该数量可能与启动时请求的值不同。如果无法分配启动期间请求的文件 Descriptors 数量,则mysqld将警告写入错误日志。

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

  • 10 + max_connections + (table_open_cache * 2)

    • max_connections * 5

    • os 限制(如果该限制为正,但无穷大)

    • 如果 os 限制为 Infinity:open_files_limit值(如果在启动时指定),否则为 5000

服务器尝试使用这些值的最大值来获取文件 Descriptors 的数量。如果无法获得那么多的 Descriptors,服务器将尝试获得系统允许的数量。

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

在 Unix 上,该值不能设置为大于 ulimit -n

PropertyValue
Command-Line Format--optimizer-prune-level=#
System Variableoptimizer_prune_level
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value1
Minimum Value0
Maximum Value1

控制在查询优化期间应用的启发式方法,以从优化器搜索空间中修剪不太有希望的局部计划。值为 0 将禁用启发式搜索,以便优化器执行详尽搜索。值为 1 会使优化器根据中间计划检索到的行数来修剪计划。

PropertyValue
Command-Line Format--optimizer-search-depth=#
System Variableoptimizer_search_depth
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value62
Minimum Value0
Maximum Value62

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

PropertyValue
Command-Line Format--optimizer-switch=value
System Variableoptimizer_switch
ScopeGlobal, Session
DynamicYes
TypeSet
Valid Valuesbatched_key_access={on|off}

block_nested_loop={on|off}
condition_fanout_filter={on|off}
derived_merge={on|off}
duplicateweedout={on|off}
engine_condition_pushdown={on|off}
firstmatch={on|off}
index_condition_pushdown={on|off}
index_merge={on|off}
index_merge_intersection={on|off}
index_merge_sort_union={on|off}
index_merge_union={on|off}
loosescan={on|off}
materialization={on|off}
mrr={on|off}
mrr_cost_based={on|off}
semijoin={on|off}
subquery_materialization_cost_based={on|off}
use_index_extensions={on|off}

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

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

PropertyValue
Command-Line Format--optimizer-trace=value
System Variableoptimizer_trace
ScopeGlobal, Session
DynamicYes
TypeString

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

PropertyValue
Command-Line Format--optimizer-trace-features=value
System Variableoptimizer_trace_features
ScopeGlobal, Session
DynamicYes
TypeString

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

PropertyValue
Command-Line Format--optimizer-trace-limit=#
System Variableoptimizer_trace_limit
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value1

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

PropertyValue
Command-Line Format--optimizer-trace-max-mem-size=#
System Variableoptimizer_trace_max_mem_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value16384

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

PropertyValue
Command-Line Format--optimizer-trace-offset=#
System Variableoptimizer_trace_offset
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value-1

要显示的优化程序轨迹的偏移量。有关详细信息,请参见MySQL 内部:跟踪优化器

  • performance_schema_xxx

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

PropertyValue
Command-Line Format--parser-max-mem-size=#
Introduced5.7.12
System Variableparser_max_mem_size
ScopeGlobal, Session
DynamicYes
TypeInteger
默认值(64 位平台)18446744073709551615
默认值(32 位平台)4294967295
Minimum Value10000000
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

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

PropertyValue
Command-Line Format--pid-file=file_name
System Variablepid_file
ScopeGlobal
DynamicNo
TypeFile name

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

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

PropertyValue
Command-Line Format--plugin-dir=dir_name
System Variableplugin_dir
ScopeGlobal
DynamicNo
TypeDirectory name
Default ValueBASEDIR/lib/plugin

插件目录的路径名。

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

PropertyValue
Command-Line Format--port=port_num
System Variableport
ScopeGlobal
DynamicNo
TypeInteger
Default Value3306
Minimum Value0
Maximum Value65535

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

PropertyValue
Command-Line Format--preload-buffer-size=#
System Variablepreload_buffer_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value32768
Minimum Value1024
Maximum Value1073741824

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

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

不建议使用此变量,并将在将来的 MySQL 版本中将其删除。

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

不建议使用此变量,并将在将来的 MySQL 版本中将其删除。

PropertyValue
System Variableprotocol_version
ScopeGlobal
DynamicNo
TypeInteger

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

PropertyValue
System Variableproxy_user
ScopeSession
DynamicNo
TypeString

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

PropertyValue
System Variablepseudo_slave_mode
ScopeSession
DynamicYes
TypeInteger

此系统变量供内部服务器使用。 pseudo_slave_mode有助于正确处理源自较旧或较新服务器(而不是当前正在处理它们的服务器)的事务。 mysqlbinlog在执行任何 SQL 语句之前将pseudo_slave_mode的值设置为 true。

pseudo_slave_mode对准备好的 XA 事务的处理具有以下影响,这些 XA 事务可以附加到处理会话(默认为发出XA START的会话)中,也可以从中分离。

  • 如果为 true,并且处理会话执行了内部使用的BINLOG语句,则 XA 事务会在事务的第一部分(直到XA PREPARE)完成时自动从会话中分离,因此可以由任何会话提交或回滚它们拥有XA_RECOVER_ADMIN特权。

    • 如果为 false,则 XA 事务将一直附加到处理会话,只要该会话仍处于活动状态,在此期间,其他任何会话都无法提交该事务。仅当会话断开连接或服务器重新启动时,才分离准备好的事务。
  • pseudo_thread_id

PropertyValue
System Variablepseudo_thread_id
ScopeSession
DynamicYes
TypeInteger

此变量供内部服务器使用。

PropertyValue
Command-Line Format--query-alloc-block-size=#
System Variablequery_alloc_block_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value8192
Minimum Value1024
Maximum Value4294967295
Unitbytes
Block Size1024

为语句解析和执行期间创建的对象分配的内存块的分配大小(以字节为单位)。如果内存碎片有问题,则可能有助于增加此参数。

PropertyValue
Command-Line Format--query-cache-limit=#
Deprecated5.7.20
System Variablequery_cache_limit
ScopeGlobal
DynamicYes
TypeInteger
Default Value1048576
Minimum Value0
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

不要缓存大于此字节数的结果。默认值为 1MB。

Note

从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。弃用包括query_cache_limit

PropertyValue
Command-Line Format--query-cache-min-res-unit=#
Deprecated5.7.20
System Variablequery_cache_min_res_unit
ScopeGlobal
DynamicYes
TypeInteger
Default Value4096
Minimum Value512
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

查询缓存分配的块的最小大小(以字节为单位)。默认值为 4096(4KB)。 第 8.10.3.3 节“查询缓存配置”中提供了此变量的调整信息。

Note

从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。弃用包括query_cache_min_res_unit

PropertyValue
Command-Line Format--query-cache-size=#
Deprecated5.7.20
System Variablequery_cache_size
ScopeGlobal
DynamicYes
TypeInteger
Default Value1048576
Minimum Value0
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295

分配用于缓存查询结果的内存量。默认情况下,查询缓存处于禁用状态。这是使用默认值 1M 和query_cache_type的默认值 0 来实现的。(如果将大小设置为 0,要显着降低开销,还应该使用query_cache_type=0启动服务器。

允许的值是 1024 的倍数;其他值四舍五入到最接近的倍数。对于query_cache_size的非零值,即使query_cache_type=0也会分配许多字节的内存。有关更多信息,请参见第 8.10.3.3 节“查询缓存配置”

查询高速缓存至少需要大约 40KB 的大小才能分配其结构。 (确切的大小取决于系统体系结构.)如果将query_cache_size的值设置得太小,则会发生警告,如第 8.10.3.3 节“查询缓存配置”中所述。

Note

从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。弃用包括query_cache_size

PropertyValue
Command-Line Format--query-cache-type=#
Deprecated5.7.20
System Variablequery_cache_type
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default Value0
Valid Values0

1
2

设置查询缓存类型。设置GLOBAL值可设置此后连接的所有 Client 端的类型。各个 Client 端可以设置SESSION值来影响自己对查询缓存的使用。可能的值如下 table 所示。

OptionDescription
0OFF不要在查询缓存中缓存结果或从查询缓存中检索结果。请注意,这不会取消分配查询缓存缓冲区。为此,您应该将query_cache_size设置为 0.
1ON缓存所有以SELECT SQL_NO_CACHE开头的可缓存查询结果。
2DEMAND仅缓存以SELECT SQL_CACHE开头的可缓存查询的结果。

此变量默认为OFF

如果将query_cache_type设置为 0 来启动服务器,则它根本不会获取查询缓存互斥量,这意味着无法在运行时启用查询缓存,从而减少了查询执行的开销。

Note

从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。弃用包括query_cache_type

PropertyValue
Command-Line Format--query-cache-wlock-invalidate[={OFF|ON}]
Deprecated5.7.20
System Variablequery_cache_wlock_invalidate
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

通常,当一个 Client 端在MyISAMtable 上获得WRITE锁时,如果查询缓存中存在查询结果,则其他 Client 端不会被阻止发出从 table 读取的语句。将此变量设置为 1 会导致获取 table 的WRITE锁,以使查询高速缓存中引用该 table 的所有查询无效。这迫使其他尝试访问该 table 的 Client 端在锁定生效时 await。

Note

从 MySQL 5.7.20 开始,查询缓存已弃用,并在 MySQL 8.0 中删除。弃用包括query_cache_wlock_invalidate

PropertyValue
Command-Line Format--query-prealloc-size=#
System Variablequery_prealloc_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value8192
Minimum Value8192
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295
Block Size1024

用于语句解析和执行的持久缓冲区的大小(以字节为单位)。不会在语句之间释放此缓冲区。如果您正在运行复杂的查询,则较大的query_prealloc_size值可能有助于提高性能,因为它可以减少服务器在查询执行操作期间执行内存分配的需求。

PropertyValue
System Variablerand_seed1
ScopeSession
DynamicYes
TypeInteger

rand_seed1rand_seed2变量仅作为会话变量存在,并且可以设置但不能读取。在SHOW VARIABLES的输出中显示变量(但不包含其值)。

这些变量的目的是支持RAND()函数的复制。对于调用RAND()的语句,主控器将两个值传递给从属器,在此它们将用作随机数生成器的种子。从站使用这些值来设置会话变量rand_seed1rand_seed2,以便从站上的RAND()产生与主站上相同的值。

请参阅rand_seed1的说明。

PropertyValue
Command-Line Format--range-alloc-block-size=#
System Variablerange_alloc_block_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value4096
Minimum Value4096
最大值(64 位平台)18446744073709547520
Maximum Value4294967295
Block Size1024

进行范围优化时分配的块的字节大小。

PropertyValue
Command-Line Format--range-optimizer-max-mem-size=#
System Variablerange_optimizer_max_mem_size
ScopeGlobal, Session
DynamicYes
TypeInteger
默认值(≥5.7.12)8388608
默认值(≤5.7.11)1536000
Minimum Value0
Maximum Value18446744073709551615

范围优化器的内存消耗限制。值 0table 示“无限制”。如果优化器考虑的执行计划使用范围访问方法,但是优化器估计此方法所需的内存量将超过限制,则它会放弃该计划并考虑其他计划。有关更多信息,请参见限制内存使用以进行范围优化

PropertyValue
System Variablerbr_exec_mode
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default ValueSTRICT
Valid ValuesIDEMPOTENT

STRICT

mysqlbinlog内部使用。此变量在IDEMPOTENT模式和STRICT模式之间切换服务器。 IDEMPOTENT模式可抑制mysqlbinlog生成的BINLOG语句中的重复键错误和找不到键的错误。当在服务器上重播基于行的二进制日志时,该模式会导致与现有数据发生冲突,此模式很有用。通过将以下内容写入输出来指定--idempotent选项时,mysqlbinlog设置此模式:

SET SESSION RBR_EXEC_MODE=IDEMPOTENT;

PropertyValue
Command-Line Format--read-buffer-size=#
System Variableread_buffer_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value131072
Minimum Value8192
Maximum Value2147479552

MyISAMtable 进行 Sequences 扫描的每个线程都会为其扫描的每个 table 分配此大小(以字节为单位)的缓冲区。如果进行多次 Sequences 扫描,则可能需要增加此值,默认值为 131072.此变量的值应为 4KB 的倍数。如果将其设置为不是 4KB 倍数的值,则其值将四舍五入到最接近的 4KB 倍数。

在以下上下文中,所有存储引擎还使用此选项:

  • 在对ORDER BY的行进行排序时,用于将索引缓存在临时文件(而非临时 table)中。

    • 对于批量插入分区。

    • 用于缓存嵌套查询的结果。

read_buffer_size还以其他特定于存储引擎的方式使用:确定MEMORYtable 的内存块大小。

有关在不同操作期间使用内存的更多信息,请参见第 8.12.4.1 节“ MySQL 如何使用内存”

PropertyValue
Command-Line Format--read-only[={OFF|ON}]
System Variableread_only
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

启用read_only系统变量后,服务器将不允许具有SUPER特权的用户进行 Client 端更新。默认情况下禁用此变量。

服务器还支持super_read_only系统变量(默认情况下禁用),它具有以下作用:

即使启用了read_only,服务器也允许以下操作:

主服务器上对read_only的更改不会复制到从属服务器。可以在从属服务器上设置该值,而与主服务器上的设置无关。

以下条件适用于启用read_only的尝试(包括由启用super_read_only导致的隐式尝试):

  • 如果您有任何显式锁(通过LOCK TABLES获取)或有挂起的事务,则尝试失败并发生错误。

    • 当其他 Client 端具有任何正在进行的语句,活动LOCK TABLES WRITE或正在进行的提交时,尝试将阻塞,直到释放锁并结束语句和事务为止。在尝试启用read_only的过程中,其他 Client 端请求 table 锁定或开始事务的请求也会阻塞,直到设置了read_only为止。

    • 如果存在持有元数据锁的活动事务,尝试将阻塞,直到这些事务结束。

    • 当您持有全局读锁(由带读取锁的平桌子获取)时,可以启用read_only,因为它不涉及 table 锁。

  • read_rnd_buffer_size

PropertyValue
Command-Line Format--read-rnd-buffer-size=#
System Variableread_rnd_buffer_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value262144
Minimum Value1
Maximum Value2147483647

该变量用于读取MyISAMtable,以及用于任何存储引擎,用于多范围读取优化。

当在键排序操作之后按排序 Sequences 从MyISAMtable 中读取行时,将通过此缓冲区读取这些行以避免磁盘查找。参见第 8.2.1.14 节“按优化排序”。将变量设置为较大的值可以大大提高ORDER BY的性能。但是,这是为每个 Client 端分配的缓冲区,因此不应将全局变量设置为较大的值。而是仅在需要运行大型查询的那些 Client 端中更改会话变量。

有关在不同操作期间使用内存的更多信息,请参见第 8.12.4.1 节“ MySQL 如何使用内存”。有关多范围读取优化的信息,请参见第 8.2.1.10 节,“多范围读取优化”

PropertyValue
Command-Line Format--require-secure-transport[={OFF|ON}]
System Variablerequire_secure_transport
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

是否要求 Client 端与服务器的连接使用某种形式的安全传输。启用此变量后,服务器仅允许使用 TLS/SSL 加密的 TCP/IP 连接,或者使用套接字文件(在 Unix 上)或共享内存(在 Windows 上)的连接。服务器拒绝非安全连接尝试,该尝试失败并显示ER_SECURE_TRANSPORT_REQUIRED错误。

此功能补充了优先考虑的每个帐户的 SSL 要求。例如,如果使用REQUIRE SSL定义了一个帐户,则启用require_secure_transport将无法使用该帐户通过 Unix 套接字文件进行连接。

服务器可能没有可用的安全传输。例如,如果 Windows 服务器启动时未指定任何 SSL 证书或密钥文件且禁用了shared_memory系统变量,则不支持安全传输。在这种情况下,尝试在启动时启用require_secure_transport将导致服务器将一条消息写入错误日志并退出。尝试在运行时启用变量失败,错误为ER_NO_SECURE_TRANSPORTS_CONFIGURED

另请参见将加密连接配置为强制性

PropertyValue
Command-Line Format--secure-auth[={OFF|ON}]
DeprecatedYes
System Variablesecure_auth
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueON
Valid ValuesON

如果启用了此变量,则服务器将阻止 Client 端尝试使用以旧(4.1 之前)格式存储密码的帐户的连接。启用此变量可防止所有使用旧格式的密码使用(因此将导致网络通信不安全)。

不建议使用此变量,并将在将来的 MySQL 版本中将其删除。它始终处于启用状态,尝试禁用它会产生错误。

如果启用了此变量并且特权 table 采用 4.1 之前的格式,则服务器启动将失败并显示错误。参见第 6.4.1.3 节“迁移到 4.1 版之前的密码哈希和 mysql_old_password 插件”

Note

使用 4.1 之前的哈希方法的密码比使用本地密码哈希方法的密码安全性较低,应避免使用。不建议使用 4.1 之前的密码,并且在 MySQL 5.7.5 中已删除对密码的支持。有关帐户升级的说明,请参阅第 6.4.1.3 节“迁移到 4.1 版之前的密码哈希和 mysql_old_password 插件”

PropertyValue
Command-Line Format--secure-file-priv=dir_name
System Variablesecure_file_priv
ScopeGlobal
DynamicNo
TypeString
Default Valueplatform specific
Valid Valuesempty string

dirname
NULL

此变量用于限制数据导入和导出操作的效果,例如由LOAD DATA选择...进入外档语句以及LOAD_FILE()函数执行的操作。只有具有FILE特权的用户才能使用这些操作。

secure_file_priv可以设置如下:

  • 如果为空,则该变量无效。这不是一个安全的设置。

    • 如果设置为目录名,则服务器将限制导入和导出操作,使其仅适用于该目录中的文件。该目录必须存在;服务器将不会创建它。

    • 如果设置为NULL,则服务器将禁用导入和导出操作。

缺省值是特定于平台的,并且取决于INSTALL_LAYOUT CMake 选项的值,如下 table 所示。如果要从源代码构建,则要明确指定默认的secure_file_priv值,请使用INSTALL_SECURE_FILE_PRIVDIR CMake 选项。

INSTALL_LAYOUT默认值secure_file_priv
STANDALONE , WINNULL(> = MySQL 5.7.16),空(<MySQL 5.7.16)
DEB , RPM , SLES , SVR4/var/lib/mysql-files
OtherwiseCMAKE_INSTALL_PREFIX值下的mysql-files

要为libmysqld嵌入式服务器设置默认的secure_file_priv值,请使用INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR CMake 选项。此选项的默认值为NULL

服务器在启动时检查secure_file_priv的值,如果该值不安全,则将警告写入错误日志。如果非NULL值为空,或者该值是数据目录或其子目录或所有用户都可以访问的目录,则认为该值不安全。如果secure_file_priv设置为不存在的路径,则服务器将错误消息写入错误日志并退出。

PropertyValue
Command-Line Format--session-track-gtids=value
System Variablesession_track_gtids
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default ValueOFF
Valid ValuesOFF

OWN_GTID
ALL_GTIDS

控制服务器是否在当前会话中跟踪 GTID 并将其返回给 Client 端。根据变量值,在执行每个事务结束时,服务器 GTID 由跟踪器捕获并返回给 Client 端。允许使用这些session_track_gtids值:

  • OFF:跟踪器未收集任何 GTID。这是默认值。

    • OWN_GTID:跟踪器收集成功提交的读/写事务生成的 GTID。

    • ALL_GTIDS:无论当前事务是读/写还是只读,跟踪器都会在提交当前事务时收集gtid_executed系统变量中的所有 GTID。

session_track_gtids不能在事务上下文中设置。

有关会话状态跟踪的更多信息,请参见第 5.1.15 节“Client 端会话状态更改的服务器跟踪”

PropertyValue
Command-Line Format--session-track-schema[={OFF|ON}]
System Variablesession_track_schema
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueON

控制服务器是否跟踪在当前会话中设置默认架构(数据库)的时间,并通知 Client 端使架构名称可用。

如果启用了架构名称跟踪器,则即使新的架构名称与旧的架构名称相同,每次设置默认架构时都会发生名称通知。

有关会话状态跟踪的更多信息,请参见第 5.1.15 节“Client 端会话状态更改的服务器跟踪”

PropertyValue
Command-Line Format--session-track-state-change[={OFF|ON}]
System Variablesession_track_state_change
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

控制服务器是否跟踪当前会话的状态更改,并在状态更改发生时通知 Client 端。可以报告 Client 端会话状态的以下属性的更改:

  • 默认架构(数据库)。

    • 系统变量的特定于会话的值。

    • User-defined variables.

    • Temporary tables.

    • Prepared statements.

如果启用了会话状态跟踪器,则即使涉及新的属性值与旧的属性值相同,也会针对涉及跟踪的会话属性的每个更改发生通知。例如,将用户定义的变量设置为其当前值会产生通知。

session_track_state_change变量仅控制何时发生更改的通知,而不控制更改的通知。例如,当设置了默认模式或分配了跟踪的会话系统变量时,就会发生状态更改通知,但该通知不包括模式名称或变量值。要接收架构名称或会话系统变量值的通知,请分别使用session_track_schemasession_track_system_variables系统变量。

Note

session_track_state_change本身分配值不会被视为状态更改,因此不会这样报告。但是,如果其名称列在session_track_system_variables的值中,则对其的任何分配都会导致通知新值。

有关会话状态跟踪的更多信息,请参见第 5.1.15 节“Client 端会话状态更改的服务器跟踪”

PropertyValue
Command-Line Format--session-track-system-variables=#
System Variablesession_track_system_variables
ScopeGlobal, Session
DynamicYes
TypeString
Default Valuetime_zone, autocommit, character_set_client, character_set_results, character_set_connection

控制服务器是否跟踪对会话系统变量的分配,并向 Client 端通知每个分配的变量的名称和值。变量值是用逗号分隔的变量列 table,可以跟踪其分配。默认情况下,启用time_zoneautocommitcharacter_set_clientcharacter_set_resultscharacter_set_connection的通知。 (后三个变量是受SET NAMES影响的变量。)

特殊值*使服务器跟踪对所有会话变量的分配。如果给定,则此值必须由其自身指定,而没有特定的系统变量名称。

要禁用会话变量分配的通知,请将session_track_system_variables设置为空字符串。

如果启用了会话系统变量跟踪,那么即使新值与旧值相同,也会对所有分配给跟踪会话变量的通知进行通知。

有关会话状态跟踪的更多信息,请参见第 5.1.15 节“Client 端会话状态更改的服务器跟踪”

PropertyValue
Command-Line Format--session-track-transaction-info=value
System Variablesession_track_transaction_info
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default ValueOFF
Valid ValuesOFF

STATE
CHARACTERISTICS

控制服务器是否在当前会话中跟踪事务的状态和 Feature,并通知 Client 端使此信息可用。允许使用这些session_track_transaction_info值:

  • OFF:禁用事务状态跟踪。这是默认值。

    • STATE:启用事务状态跟踪而不进行 Feature 跟踪。状态跟踪使 Client 端能够确定事务是否正在进行中,以及是否可以将其移至其他会话而不回滚。

    • CHARACTERISTICS:启用事务状态跟踪,包括 Feature 跟踪。通过 Feature 跟踪,Client 端可以确定如何在另一个会话中重新启动事务,以使其具有与原始会话相同的 Feature。以下特性与此有关:

ISOLATION LEVEL
READ ONLY
READ WRITE
WITH CONSISTENT SNAPSHOT

为了使 Client 安全地将事务重定位到另一个会话,它不仅必须跟踪事务状态,而且还必须跟踪事务 Feature。此外,Client 端必须跟踪transaction_isolationtransaction_read_only系统变量,才能正确确定会话默认值。 (要跟踪这些变量,请在session_track_system_variables系统变量的值中列出它们。)

有关会话状态跟踪的更多信息,请参见第 5.1.15 节“Client 端会话状态更改的服务器跟踪”

PropertyValue
Command-Line Format--sha256-password-auto-generate-rsa-keys[={OFF|ON}]
System Variablesha256_password_auto_generate_rsa_keys
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueON

如果服务器是使用 OpenSSL 编译的,则此变量可用(请参见第 6.3.4 节“依赖于 SSL 库的功能”)。它控制服务器是否自动生成数据目录中的 RSA 私钥/公钥对文件(如果尚不存在)。

启动时,如果启用了sha256_password_auto_generate_rsa_keys系统变量,未指定 RSA 选项并且数据目录中缺少 RSA 文件,则服务器会在数据目录中自动生成 RSA 私钥/公钥对文件。这些文件通过sha256_password插件认证的帐户,可以通过未加密的连接使用 RSA 使用安全的密码交换;参见第 6.4.1.5 节“ SHA-256 可插拔身份验证”

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

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

PropertyValue
Command-Line Format--sha256-password-private-key-path=file_name
System Variablesha256_password_private_key_path
ScopeGlobal
DynamicNo
TypeFile name
Default Valueprivate_key.pem

如果 MySQL 是使用 OpenSSL 编译的,则此变量可用(请参见第 6.3.4 节“依赖于 SSL 库的功能”)。它的值是sha256_password身份验证插件的 RSA 私钥文件的路径名。如果文件被命名为相对路径,则相对于服务器数据目录进行解释。该文件必须为 PEM 格式。

Important

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

有关sha256_password的信息,请参见第 6.4.1.5 节“ SHA-256 可插拔身份验证”

PropertyValue
Command-Line Format--sha256-password-proxy-users[={OFF|ON}]
System Variablesha256_password_proxy_users
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

此变量控制sha256_password内置身份验证插件是否支持代理用户。除非启用了check_proxy_users系统变量,否则它无效。有关用户代理的信息,请参见第 6.2.14 节“代理用户”

PropertyValue
Command-Line Format--sha256-password-public-key-path=file_name
System Variablesha256_password_public_key_path
ScopeGlobal
DynamicNo
TypeFile name
Default Valuepublic_key.pem

如果 MySQL 是使用 OpenSSL 编译的,则此变量可用(请参见第 6.3.4 节“依赖于 SSL 库的功能”)。它的值是sha256_password身份验证插件的 RSA 公钥文件的路径名。如果文件被命名为相对路径,则相对于服务器数据目录进行解释。该文件必须为 PEM 格式。由于此文件存储公用密钥,因此可以将副本自由分发给 Client 端用户。 (在使用 RSA 密码加密连接到服务器时,明确指定公钥的 Client 端必须使用与服务器使用的相同的公钥.)

有关sha256_password的信息,包括有关 Client 端如何指定 RSA 公钥的信息,请参阅第 6.4.1.5 节“ SHA-256 可插拔身份验证”

PropertyValue
Command-Line Format--shared-memory[={OFF|ON}]
System Variableshared_memory
ScopeGlobal
DynamicNo
Platform SpecificWindows
TypeBoolean
Default ValueOFF

(仅 Windows.)服务器是否允许共享内存连接。

PropertyValue
Command-Line Format--shared-memory-base-name=name
System Variableshared_memory_base_name
ScopeGlobal
DynamicNo
Platform SpecificWindows
TypeString
Default ValueMYSQL

(仅 Windows.)用于共享内存连接的共享内存的名称。在单个物理计算机上运行多个 MySQL 实例时,这很有用。默认名称为MYSQL。名称区分大小写。

仅当启用shared_memory系统变量以支持共享内存连接启动服务器时,此变量才适用。

PropertyValue
Command-Line Format--show-compatibility-56[={OFF|ON}]
DeprecatedYes
System Variableshow_compatibility_56
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

INFORMATION_SCHEMA的 table 包含系统和状态变量信息(请参阅第 24.11 节,“ INFORMATION_SCHEMA GLOBAL_VARIABLES 和 SESSION_VARIABLEStable”第 24.10 节,“ INFORMATION_SCHEMA GLOBAL_STATUS 和 SESSION_STATUStable”)。从 MySQL 5.7.6 开始,性能模式还包含系统和状态变量 table(请参见第 25.12.13 节,“性能架构系统变量 table”第 25.12.14 节,“性能模式状态变量 table”)。 Performance Schematable 用于替换INFORMATION_SCHEMAtable,该 table 从 MySQL 5.7.6 开始不推荐使用,并将在以后的 MySQL 版本中删除。

有关从INFORMATION_SCHEMAtable 迁移到 Performance Schematable 的建议,请参阅第 25.20 节“迁移到性能模式系统和状态变量 table”。为了协助迁移,您可以使用show_compatibility_56系统变量,这会影响是否通过INFORMATION_SCHEMA和 Performance Schematable 以及SHOW VARIABLESSHOW STATUS语句提供系统和状态变量信息的方式启用 MySQL 5.6 兼容性。

Note

show_compatibility_56已被弃用,因为其唯一目的是允许控制已弃用的系统和状态变量信息源,这些信息源将在将来的 MySQL 版本中删除。删除这些来源后,show_compatibility_56将没有任何用途,也将被删除。

以下讨论描述了show_compatibility_56的效果:

为了更好地理解,强烈建议您还阅读以下部分:

show_compatibility_56 效果概述

show_compatibility_56系统变量会影响服务器在系统和状态变量方面的以下方面:

  • SHOW VARIABLESSHOW STATUS语句中的可用信息

    • INFORMATION_SCHEMAtable 中提供的信息可提供系统和状态变量信息

    • 性能架构 table 中提供的信息,这些信息提供系统和状态变量信息

    • FLUSH STATUS语句对状态变量的影响

此列 table 总结了show_compatibility_56的效果,稍后还会提供其他详细信息:

  • show_compatibility_56ON时,启用与 MySQL 5.6 的兼容性。较早的变量信息源(SHOW语句,INFORMATION_SCHEMAtable)产生的输出与 MySQL 5.6 中的输出相同。

    • show_compatibility_56OFF时,将禁用与 MySQL 5.6 的兼容性。从INFORMATION_SCHEMAtable 中进行选择会产生错误,因为 Performance Schematable 旨在替换它们。 INFORMATION_SCHEMAtable 自 MySQL 5.7.6 起已弃用,并将在以后的 MySQL 版本中删除。

获取系统和状态变量信息show_compatibility_56=OFF时,使用性能模式 table 或SHOW语句。

Note

当为show_compatibility_56=OFF时,SHOW VARIABLESSHOW STATUS语句显示性能模式global_variablessession_variablesglobal_statussession_statustable 中的行。

从 MySQL 5.7.9 开始,这些 table 在世界范围内可读,并且没有SELECT特权就可以访问,这意味着使用SHOW语句也不需要SELECT。在 MySQL 5.7.9 之前,需要SELECT特权才能直接或通过SHOW语句间接访问那些性能模式 table。

  • show_compatibility_56ON时,SHOW STATUS提供了几个Slave_xxx状态变量。当show_compatibility_56OFF时,其中某些变量不会暴露给SHOW STATUS。它们提供的信息在与复制相关的“性能模式”table 中可用,如稍后所述。

  • show_compatibility_56使用@@table 示法对@@GLOBAL.var_name@@SESSION.var_name@@var_nametable 示法的系统变量访问没有影响。

  • show_compatibility_56对嵌入式服务器无效,嵌入式服务器在所有情况下均产生 5.6 兼容的输出。

以下描述详细说明了在应用此变量的上下文中将show_compatibility_56设置为ONOFF的效果。

show_compatibility_56 对 SHOW 语句的影响

显示 Global 变量 statement:

  • ON:MySQL 5.6 输出。

显示[会议|局部]变量 statement:

  • ON:MySQL 5.6 输出。

    • OFF:输出显示“性能模式session_variables”table 中的行。 (在 MySQL 5.7.6 和 5.7.7 中,OFF输出不能完全反映当前会话有效的所有系统变量值;它不包含没有会话对应项的全局变量的行.在 MySQL 5.7.8 中已得到纠正.)

显示 Global 状态 statement:

  • ON:MySQL 5.6 输出。

    • OFF:输出显示 Performance Schema global_statustable 中的行以及Com_xxx语句执行计数器。

ON输出不同,OFF输出不包含没有全局对应项的会话变量的行。

显示[会议|本地]状态 statement:

  • ON:MySQL 5.6 输出。

    • OFF:输出显示 Performance Schema session_statustable 中的行以及Com_xxx语句执行计数器。 (在 MySQL 5.7.6 和 5.7.7 中,OFF输出不能完全反映当前会话有效的所有状态变量值;它不包含没有会话对应项的全局变量行.在 MySQL 5.7.8 中已得到纠正.)

在 MySQL 5.7.6 和 5.7.7 中,对于刚刚描述的每个SHOW语句,使用_子句会在show_compatibility_56=ON时产生警告,在show_compatibility_56=OFF时产生错误。 (这适用于尚未优化的WHERE子句.例如,WHERE 1确实是正确的,已经优化了,因此不会产生警告或错误.)从 MySQL 5.7.8 开始,这种行为不会发生; WHERE和 5.7.6 一样受支持。

show_compatibility_56 对 INFORMATION_SCHEMAtable 的影响

INFORMATION_SCHEMA个 table(GLOBAL_VARIABLESSESSION_VARIABLESGLOBAL_STATUSSESSION_STATUS):

  • ON:MySQL 5.6 输出,带有弃用警告。

    • OFF:从这些 table 中选择会产生错误。 (在 5.7.9 之前的版本中,从这些 table 中进行选择不会产生任何输出,并带有弃用警告.)

show_compatibility_56 对性能模式 table 的影响

Performance Schema 系统变量 table:

  • OFF :

  • global_variables:仅全局系统变量。

    • session_variables:当前会话有效的系统变量:每个会话变量一行,每个没有会话对应项的全局变量一行。

    • variables_by_thread:仅会话系统变量,用于每个活动会话。

    • ON:与OFF相同的输出。 (在 5.7.8 之前,这些 table 不产生任何输出.)

性能架构状态变量 table:

  • OFF :

  • global_status:仅全局状态变量。

    • session_status:状态变量对当前会话有效:每个会话变量的行,以及没有会话对应项的每个全局变量的行。

    • status_by_account仅会话状态变量,每个帐户汇总。

    • status_by_host:仅会话状态变量,按主机名汇总。

    • status_by_thread:仅会话状态变量,用于每个活动会话。

    • status_by_user:仅会话状态变量,按用户名汇总。

性能架构不会在状态变量 table 中收集Com_xxx状态变量的统计信息。若要获取全局和每个会话语句的执行计数,请分别使用events_statements_summary_global_by_event_nameevents_statements_summary_by_thread_by_event_nametable。

  • ON:与OFF相同的输出。 (在 5.7.9 之前,这些 table 不产生任何输出.)

show_compatibility_56 对从站状态变量的影响

从站状态变量:

  • ONSHOW STATUS提供了几个Slave_xxx状态变量。

    • OFF:其中一些从属变量未公开给SHOW STATUS或“性能模式”状态变量 table。它们提供的信息在与复制相关的“性能模式”table 中可用。下 table 显示了SHOW STATUS中哪些Slave_xxx状态变量不可用及其在 Performance Schema 复制 table 中的位置。
Status Variable性能架构位置
Slave_heartbeat_periodreplication_connection_configurationtable,HEARTBEAT_INTERVAL
Slave_last_heartbeatreplication_connection_statustable,LAST_HEARTBEAT_TIMESTAMP
Slave_received_heartbeatsreplication_connection_statustable,COUNT_RECEIVED_HEARTBEATS
Slave_retried_transactionsreplication_applier_statustable,COUNT_TRANSACTIONS_RETRIES
Slave_runningreplication_connection_statusreplication_applier_statustable,SERVICE_STATE

show_compatibility_56 对 FLUSH STATUS 的影响

FLUSH STATUS statement:

  • ON:此语句产生 MySQL 5.6 行为。它将当前线程的会话状态变量值添加到全局值,并将会话值重置为零。一些全局变量也可能会重置为零。它还会将密钥缓存的计数器(默认和命名)重置为零,并将Max_used_connections设置为当前打开的连接数。

    • OFF:此语句将所有活动会话中的会话状态添加到全局状态变量中,重置所有活动会话的状态,并重置断开连接的会话中汇总的帐户,主机和用户状态值。
  • show_create_table_verbosity

PropertyValue
Command-Line Format--show-create-table-verbosity[={OFF|ON}]
Introduced5.7.22
System Variableshow_create_table_verbosity
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

如果行格式是默认格式,则显示创建 table通常不显示ROW_FORMATtable 选项。启用此变量将导致显示创建 table显示ROW_FORMAT,无论它是否是默认格式。

PropertyValue
Command-Line Format--show-old-temporals[={OFF|ON}]
DeprecatedYes
System Variableshow_old_temporals
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

显示创建 table输出是否包括 Comments 以标记发现的时间列为 5.6.4 之前的格式(TIMEDATETIMETIMESTAMP列不支持小数秒精度)。默认情况下禁用此变量。如果启用,则显示创建 table输出如下所示:

CREATE TABLE `mytbl` (
  `ts` timestamp /* 5.5 binary format */ NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `dt` datetime /* 5.5 binary format */ DEFAULT NULL,
  `t` time /* 5.5 binary format */ DEFAULT NULL
) DEFAULT CHARSET=latin1

INFORMATION_SCHEMA.COLUMNStable 的COLUMN_TYPE列的输出受到类似的影响。

不建议使用此变量,并将在将来的 MySQL 版本中将其删除。

PropertyValue
Command-Line Format--skip-external-locking[={OFF|ON}]
System Variableskip_external_locking
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueON

如果mysqld使用外部锁定(系统锁定),则为OFF;如果禁用了外部锁定,则为ON。这仅影响MyISAMtable 访问。

此变量由--external-locking--skip-external-locking选项设置。默认情况下,外部锁定是禁用的。

外部锁定仅影响MyISAMtable 访问。有关更多信息,包括可以使用和不能使用它的条件,请参阅第 8.11.5 节“外部锁定”

PropertyValue
Command-Line Format--skip-name-resolve[={OFF|ON}]
System Variableskip_name_resolve
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueOFF

检查 Client 端连接时是否解析主机名。如果此变量是OFF,则mysqld在检查 Client 端连接时解析主机名。如果是ON,则mysqld仅使用 IPNumbers;在这种情况下,授权 table 中的所有Host列值都必须是 IP 地址。参见第 5.1.11.2 节“ DNS 查找和主机缓存”

根据系统的网络配置和帐户的Host值,Client 端可能需要使用显式的--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';

PropertyValue
Command-Line Format--skip-networking[={OFF|ON}]
System Variableskip_networking
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueOFF

此变量控制服务器是否允许 TCP/IP 连接。默认情况下,它是禁用的(允许 TCP 连接)。如果启用,则服务器仅允许本地(非 TCP/IP)连接,并且必须使用命名管道或共享内存(在 Windows 上)或 Unix 套接字文件(在 Unix 上)与mysqld进行所有交互。对于仅允许本地 Client 端的系统,强烈建议使用此选项。参见第 5.1.11.2 节“ DNS 查找和主机缓存”

PropertyValue
Command-Line Format--skip-show-database
System Variableskip_show_database
ScopeGlobal
DynamicNo

如果人们没有SHOW DATABASES特权,这将阻止人们使用SHOW DATABASES语句。如果您担心用户能够查看属于其他用户的数据库,则可以提高安全性。它的作用取决于SHOW DATABASES特权:如果变量值为ON,则只有具有SHOW DATABASES特权的用户才能使用SHOW DATABASES语句,并且该语句显示所有数据库名称。如果值为OFF,则SHOW DATABASES允许所有用户使用,但仅显示该用户对其具有SHOW DATABASES或其他特权的那些数据库的名称。

Caution

因为全局特权被视为所有数据库的特权,所以* any *全局特权使用户可以使用SHOW DATABASES或通过检查INFORMATION_SCHEMA SCHEMATAtable 来查看所有数据库名称。

PropertyValue
Command-Line Format--slow-launch-time=#
System Variableslow_launch_time
ScopeGlobal
DynamicYes
TypeInteger
Default Value2

如果创建线程花费的时间超过了许多秒,则服务器将使Slow_launch_threads status 变量递增。

PropertyValue
Command-Line Format--slow-query-log[={OFF|ON}]
System Variableslow_query_log
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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

“慢”由long_query_time变量的值确定。参见第 5.4.5 节“缓慢的查询日志”

PropertyValue
Command-Line Format--slow-query-log-file=file_name
System Variableslow_query_log_file
ScopeGlobal
DynamicYes
TypeFile name
Default Valuehost_name-slow.log

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

PropertyValue
Command-Line Format--socket={file_name|pipe_name}
System Variablesocket
ScopeGlobal
DynamicNo
TypeString
默认值(其他)/tmp/mysql.sock
预设值(Windows)MySQL

在 Unix 平台上,此变量是用于本地 Client 端连接的套接字文件的名称。默认值为/tmp/mysql.sock。 (对于某些发行格式,目录可能有所不同,例如/var/lib/mysql用于 RPM.)

在 Windows 上,此变量是用于本地 Client 端连接的命名管道的名称。默认值为MySQL(不区分大小写)。

PropertyValue
Command-Line Format--sort-buffer-size=#
System Variablesort_buffer_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value262144
Minimum Value32768
最大值(其他 64 位平台)18446744073709551615
最大值(其他 32 位平台)4294967295
最大值(Windows)4294967295

每个必须执行排序的会话都会分配此大小的缓冲区。 sort_buffer_size并非特定于任何存储引擎,而是以一般方式进行优化。至少sort_buffer_size值必须足够大以容纳排序缓冲区中的 15 个 Tuples。同样,增加max_sort_length的值可能需要增加sort_buffer_size的值。有关更多信息,请参见第 8.2.1.14 节“按优化排序”

如果您在显示 Global 状态输出中看到许多每秒Sort_merge_passes,则可以考虑增加sort_buffer_size值以加快ORDER BYGROUP BY操作,而查询优化或改进的索引编制无法改善这些操作。

优化器尝试计算出需要多少空间,但可以分配更多空间(最大限制)。将其设置为大于全局所需的大小将减慢大多数此类查询的速度。最好将其增加为会话设置,并且仅适用于需要更大大小的会话。在 Linux 上,阈值分别为 256KB 和 2MB,其中较大的值可能会显着减慢内存分配,因此您应考虑保持低于这些值之一。尝试找到最适合您的工作量的价值。参见第 B.4.3.5 节“ MySQL 在哪里存储临时文件”

sort_buffer_size的最大允许设置为 4GB-1.允许在 64 位平台上使用更大的值(64 位 Windows 除外,对于 64 位 Windows,较大的值会被警告截断为 4GB-1)。

PropertyValue
System Variablesql_auto_is_null
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

如果启用了此变量,则在成功插入自动生成的AUTO_INCREMENT值的语句之后,可以通过发出以下形式的语句来找到该值:

SELECT * FROM tbl_name WHERE auto_col IS NULL

如果该语句返回一行,则返回的值与调用LAST_INSERT_ID()函数的值相同。有关详细信息,包括多行插入后的返回值,请参见第 12.15 节“信息功能”。如果没有成功插入AUTO_INCREMENT值,则SELECT语句不返回任何行。

一些 ODBC 程序(例如 Access)使用通过IS NULL比较来检索AUTO_INCREMENT值的行为。参见获取自动增量值。可以通过将sql_auto_is_null设置为OFF来禁用此行为。

sql_auto_is_null的默认值为OFF

PropertyValue
System Variablesql_big_selects
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueON

如果设置为OFF,MySQL 将中止可能需要很长时间才能执行的SELECT语句(即,优化器估计其检查的行数超过max_join_size的值的语句)。当发出了不明智的WHERE语句时,这很有用。新连接的默认值为ON,它允许所有SELECT语句。

如果将max_join_size系统变量设置为DEFAULT以外的值,则sql_big_selects设置为OFF

PropertyValue
System Variablesql_buffer_result
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

如果启用,则sql_buffer_result强制将SELECT语句的结果放入临时 table 中。这有助于 MySQL 尽早释放 table 锁,并且在将结果发送到 Client 端花费很长时间的情况下会很有用。默认值为OFF

PropertyValue
System Variablesql_log_off
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF
Valid ValuesOFF(启用日志记录)

ON(禁用日志记录)

此变量控制是否为当前会话禁用记录到常规查询日志的日志(假定常规查询日志本身已启用)。默认值为OFF(即启用日志记录)。要禁用或启用当前会话的常规查询日志记录,请将会话sql_log_off变量设置为ONOFF

设置此系统变量的会话值是受限制的操作。会话用户必须具有足以设置受限会话变量的特权。参见第 5.1.8.1 节“系统变量特权”

PropertyValue
Command-Line Format--sql-mode=name
System Variablesql_mode
ScopeGlobal, Session
DynamicYes
TypeSet
Default ValueONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
Valid ValuesALLOW_INVALID_DATES

ANSI_QUOTES
ERROR_FOR_DIVISION_BY_ZERO
HIGH_NOT_PRECEDENCE
IGNORE_SPACE
NO_AUTO_CREATE_USER
NO_AUTO_VALUE_ON_ZERO
NO_BACKSLASH_ESCAPES
NO_DIR_IN_CREATE
NO_ENGINE_SUBSTITUTION
NO_FIELD_OPTIONS
NO_KEY_OPTIONS
NO_TABLE_OPTIONS
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

当前服务器的 SQL 模式,可以动态设置。有关详细信息,请参见第 5.1.10 节“服务器 SQL 模式”

Note

MySQL 安装程序可能会在安装过程中配置 SQL 模式。如果 SQL 模式不同于默认模式或期望的模式,请检查服务器在启动时读取的选项文件中的设置。

PropertyValue
System Variablesql_notes
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueON

如果启用(默认值),则Note级别的诊断将以warning_count增量递增,并由服务器记录下来。如果禁用,则Note诊断不会递增warning_count,并且服务器不会记录它们。 mysqldump包含用于禁用此变量的输出,以便重新加载转储文件不会对不影响重新加载操作完整性的事件产生警告。

PropertyValue
System Variablesql_quote_show_create
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueON

如果启用(默认值),服务器将引用显示创建 table显示创建数据库语句的标识符。如果禁用,则引用被禁用。默认情况下启用此选项,以便复制适用于需要引用的标识符。参见第 13.7.5.10 节“ SHOW CREATE TABLE 语句”第 13.7.5.6 节“ SHOW CREATE DATABASE 语句”

PropertyValue
System Variablesql_safe_updates
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

如果启用了此变量,则在WHERE子句或LIMIT子句中不使用键的UPDATEDELETE语句将产生错误。这样就可以捕获未正确使用键的UPDATEDELETE语句,并且这些语句可能会更改或删除大量行。默认值为OFF

对于mysqlClient 端,可以使用--safe-updates选项启用sql_safe_updates。有关更多信息,请参见使用安全更新模式(-安全更新)

PropertyValue
System Variablesql_select_limit
ScopeGlobal, Session
DynamicYes
TypeInteger

SELECT条语句返回的最大行数。有关更多信息,请参见使用安全更新模式(-安全更新)

新连接的默认值是服务器每个 table 允许的最大行数。典型的默认值为(232)-1 或(264)-1.如果您更改了限制,则可以通过分配值DEFAULT来恢复默认值。

如果SELECTLIMIT子句,则LIMIT优先于sql_select_limit的值。

PropertyValue
System Variablesql_warnings
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

此变量控制如果发生警告,单行INSERT语句是否生成信息字符串。默认值为OFF。将值设置为ON以生成信息字符串。

PropertyValue
Command-Line Format--ssl-ca=file_name
System Variablessl_ca
ScopeGlobal
DynamicNo
TypeFile name
Default ValueNULL

证书颁发机构(CA)证书文件的路径名,采用 PEM 格式。该文件包含受信任的 SSL 证书颁发机构列 table。

PropertyValue
Command-Line Format--ssl-capath=dir_name
System Variablessl_capath
ScopeGlobal
DynamicNo
TypeDirectory name
Default ValueNULL

包含 PEM 格式的受信任 SSL 证书颁发机构(CA)证书文件的目录的路径名。对此功能的支持取决于用于编译 MySQL 的 SSL 库。参见第 6.3.4 节“依赖于 SSL 库的功能”

PropertyValue
Command-Line Format--ssl-cert=file_name
System Variablessl_cert
ScopeGlobal
DynamicNo
TypeFile name
Default ValueNULL

服务器 SSL 公钥证书文件的路径名(PEM 格式)。

如果服务器以设置为使用任何受限密码或密码类别的证书的ssl_cert开头,则服务器将禁用对加密连接的支持。有关密码限制的信息,请参见连接密码配置

PropertyValue
Command-Line Format--ssl-cipher=name
System Variablessl_cipher
ScopeGlobal
DynamicNo
TypeString
Default ValueNULL

连接加密的允许密码列 table。如果列 table 中不支持密码,则加密连接将不起作用。

为了获得最大的可移植性,密码列 table 应该是一个或多个密码名称的列 table,并用冒号分隔。 OpenSSL 和 yaSSL 都可以理解这种格式。例子:

[mysqld]
ssl_cipher="AES128-SHA"
ssl_cipher="DHE-RSA-AES128-GCM-SHA256:AES128-SHA"

OpenSSL 支持更灵活的语法来指定密码,如 OpenSSL 文档https://www.openssl.org/docs/manmaster/man1/ciphers.html中所述。 yaSSL 不会,因此对于使用 yaSSL 编译的 MySQL 发行版,尝试使用扩展语法失败。

有关 MySQL 支持的加密密码的信息,请参见第 6.3.2 节“加密的连接 TLS 协议和密码”

PropertyValue
Command-Line Format--ssl-crl=file_name
System Variablessl_crl
ScopeGlobal
DynamicNo
TypeFile name
Default ValueNULL

包含 PEM 格式的证书吊销列 table 的文件的路径名。对吊销列 table 功能的支持取决于用于编译 MySQL 的 SSL 库。参见第 6.3.4 节“依赖于 SSL 库的功能”

PropertyValue
Command-Line Format--ssl-crlpath=dir_name
System Variablessl_crlpath
ScopeGlobal
DynamicNo
TypeDirectory name
Default ValueNULL

包含 PEM 格式的证书吊销列 table 文件的目录路径。对吊销列 table 功能的支持取决于用于编译 MySQL 的 SSL 库。参见第 6.3.4 节“依赖于 SSL 库的功能”

PropertyValue
Command-Line Format--ssl-key=file_name
System Variablessl_key
ScopeGlobal
DynamicNo
TypeFile name
Default ValueNULL

PEM 格式的服务器 SSL 私钥文件的路径名。为了提高安全性,请使用 RSA 密钥大小至少为 2048 位的证书。

如果密钥文件受密码保护,则服务器会提示用户 Importing 密码。密码必须以交互方式提供;它不能存储在文件中。如果密码不正确,程序将 continue 运行,好像无法读取密钥。

PropertyValue
Command-Line Format--stored-program-cache=#
System Variablestored_program_cache
ScopeGlobal
DynamicYes
TypeInteger
Default Value256
Minimum Value16
Maximum Value524288

设置每个连接的缓存存储例程数的软上限。该变量的值是根据 MySQL 服务器为存储过程和存储函数分别维护的两个缓存中的每个缓存中保存的例程数指定的。

每当执行存储例程时,都会在解析例程中的第一条或顶层语句之前检查此缓存的大小;如果相同类型的例程(存储过程或存储函数正在执行的存储函数)的数量超出此变量指定的限制,则将刷新相应的缓存,并释放先前分配给缓存对象的内存。这样,即使存储的例程之间存在依赖关系,也可以安全地刷新缓存。

PropertyValue
Command-Line Format--super-read-only[={OFF|ON}]
System Variablesuper_read_only
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

如果启用了read_only系统变量,则服务器仅允许具有SUPER特权的用户进行 Client 端更新。如果还启用了super_read_only系统变量,则服务器甚至禁止具有SUPER的用户进行 Client 端更新。有关只读模式的说明以及有关read_onlysuper_read_only如何交互的信息,请参见read_only系统变量的说明。

启用super_read_only时阻止的 Client 端更新包括不一定是更新的操作,例如CREATE FUNCTION(用于安装 UDF)和INSTALL PLUGIN。禁止这些操作,因为它们涉及对mysql系统数据库中的 table 的更改。

主服务器上对super_read_only的更改不会复制到从属服务器。可以在从属服务器上设置该值,而与主服务器上的设置无关。

PropertyValue
Command-Line Format--sync-frm[={OFF|ON}]
DeprecatedYes
System Variablesync_frm
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueON

如果将此变量设置为 1,则在创建任何非临时 table 时,其.frm文件将同步到磁盘(使用fdatasync())。如果发生崩溃,这会更慢,但更安全。预设值为 1.

该变量在 MySQL 5.7 中已弃用,并将在 MySQL 的 Future 版本中删除(当.frm文件已过时)。

PropertyValue
System Variablesystem_time_zone
ScopeGlobal
DynamicNo
TypeString

服务器系统时区。服务器开始执行时,它将从计算机默认值继承一个时区设置,该设置可能会被用于运行服务器的帐户环境或启动脚本修改。该值用于设置system_time_zone。通常,时区由TZ环境变量指定。也可以使用mysqld_safe脚本的--timezone选项指定它。

system_time_zone变量不同于time_zone。尽管它们可能具有相同的值,但是后一个变量用于为每个连接的 Client 端初始化时区。参见第 5.1.13 节“ MySQL 服务器时区支持”

PropertyValue
Command-Line Format--table-definition-cache=#
System Variabletable_definition_cache
ScopeGlobal
DynamicYes
TypeInteger
Default Value-1(table 示自动调整大小;请勿分配此 Literals 值)
Minimum Value400
Maximum Value524288

可以存储在定义高速缓存中的 table 定义数(来自.frm个文件)。如果使用大量 table,则可以创建大 table 定义缓存以加快 table 的打开速度。与普通 table 缓存不同,table 定义缓存占用的空间更少,并且不使用文件 Descriptors。最小值为 400.默认值基于以下公式,上限为 2000:

400 + (table_open_cache / 2)

对于InnoDBtable_definition_cache充当InnoDB数据字典高速缓存中打开 table 实例的数量的软限制。如果打开的 table 实例的数量超过table_definition_cache设置,则 LRU 机制将开始标记 table 实例以将其逐出,并最终将其从数据字典缓存中删除。该限制有助于解决以下情况:大量内存将用于缓存很少使用的 table 实例,直到下次服务器重新启动。具有缓存的元数据的 table 实例的数量可能会高于table_definition_cache定义的限制,因为InnoDB系统 table 实例以及具有外键关系的父 table 和子 table 实例不会放在 LRU 列 table 上,也不会从内存中逐出。

此外,table_definition_cache定义了可以一次打开的InnoDB每 table 文件 table 空间数量的软限制,该限制也由innodb_open_files控制。如果同时设置了table_definition_cacheinnodb_open_files,则使用最高设置。如果未设置任何变量,则使用具有较高默认值的table_definition_cache。如果打开的 table 空间文件句柄的数量超过table_definition_cacheinnodb_open_files定义的限制,则 LRU 机制将在 table 空间文件 LRU 列 table 中搜索已完全刷新且当前未扩展的文件。每次打开新 table 空间时都执行此过程。如果没有“非活动”table 空间,则不会关闭任何 table 空间文件。

PropertyValue
Command-Line Format--table-open-cache=#
System Variabletable_open_cache
ScopeGlobal
DynamicYes
TypeInteger
Default Value2000
Minimum Value1
Maximum Value524288

所有线程的打开 table 数。增大此值将增加mysqld所需的文件 Descriptors 的数量。您可以通过检查Opened_tables status 变量来检查是否需要增加 table 缓存。参见第 5.1.9 节“服务器状态变量”。如果Opened_tables的值很大,并且您不经常使用FLUSH TABLES(这只会强制关闭并重新打开所有 table),则应增加table_open_cache变量的值。有关 table 缓存的更多信息,请参见第 8.4.3.1 节“ MySQL 如何打开和关闭 table”

PropertyValue
Command-Line Format--table-open-cache-instances=#
System Variabletable_open_cache_instances
ScopeGlobal
DynamicNo
TypeInteger
Default Value16
Minimum Value1
Maximum Value64

打开 table 缓存实例的数量。为了通过减少会话之间的争用来提高可伸缩性,可以将打开的 table 缓存划分为几个较小的大小为table_open_cache/table_open_cache_instances的缓存实例。会话只需要锁定一个实例即可访问它以进行 DML 语句。这可在实例之间细分缓存访问,从而在有许多会话访问 table 时为使用缓存的操作提供更高的性能。 (DDL 语句仍然需要锁定整个缓存,但是这种语句的频率要比 DML 语句低得多.)

在通常使用 16 个或更多内核的系统上,建议将值设置为 8 或 16.

PropertyValue
Command-Line Format--thread-cache-size=#
System Variablethread_cache_size
ScopeGlobal
DynamicYes
TypeInteger
Default Value-1(table 示自动调整大小;请勿分配此 Literals 值)
Minimum Value0
Maximum Value16384

服务器应缓存多少线程以供重用。当 Client 端断开连接时,如果那里的线程少于thread_cache_size个,则将 Client 端的线程放入缓存中。通过尽可能地重用从缓存中获取的线程来满足线程请求,并且仅当缓存为空时才创建新线程。如果您有许多新连接,则可以增加此变量以提高性能。通常,如果您具有良好的线程实现,则这不会显着提高性能。但是,如果服务器每秒看到数百个连接,则通常应将thread_cache_size设置得足够高,以使大多数新连接使用高速缓存的线程。通过检查ConnectionsThreads_created状态变量之间的差异,您可以看到线程缓存的效率。有关详细信息,请参见第 5.1.9 节“服务器状态变量”

默认值基于以下公式,上限为 100:

8 + (max_connections / 100)

该变量对嵌入式服务器(libmysqld)无效,从 MySQL 5.7.2 开始,嵌入式服务器中不再可见该变量。

PropertyValue
Command-Line Format--thread-handling=name
System Variablethread_handling
ScopeGlobal
DynamicNo
TypeEnumeration
Default Valueone-thread-per-connection
Valid Valuesno-threads

one-thread-per-connection
loaded-dynamically

服务器用于连接线程的线程处理模型。允许的值为no-threads(服务器使用一个线程来处理一个连接)和one-thread-per-connection(服务器使用一个线程来处理每个 Client 端连接)。 no-threads对于在 Linux 下调试非常有用;参见第 28.5 节“调试和移植 MySQL”

该变量对嵌入式服务器(libmysqld)无效,从 MySQL 5.7.2 开始,嵌入式服务器中不再可见该变量。

PropertyValue
Command-Line Format--thread-pool-algorithm=#
System Variablethread_pool_algorithm
ScopeGlobal
DynamicNo
TypeInteger
Default Value0
Minimum Value0
Maximum Value1

此变量控制线程池插件使用哪种算法:

  • 值 0(默认值)使用保守的低并发算法,该算法经过了最充分的测试,并且已知会产生非常好的结果。

    • 值为 1 会增加并发性,并使用更具攻击性的算法,该算法有时在最佳线程数上的性能要好 5–10%,但是随着连接数的增加,性能会下降。它的使用应视为实验性的,不被支持。

仅当启用了线程池插件时,此变量才可用。见第 5.5.3 节“ MySQL 企业线程池”

PropertyValue
Command-Line Format--thread-pool-high-priority-connection=#
System Variablethread_pool_high_priority_connection
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value0
Minimum Value0
Maximum Value1

此变量影响执行前新语句的排队。如果值为 0(默认值为 false,则为假),语句队列同时使用低优先级队列和高优先级队列。如果值为 1(true),则排队的语句始终进入高优先级队列。

仅当启用了线程池插件时,此变量才可用。见第 5.5.3 节“ MySQL 企业线程池”

PropertyValue
Command-Line Format--thread-pool-max-unused-threads=#
System Variablethread_pool_max_unused_threads
ScopeGlobal
DynamicYes
TypeInteger
Default Value0
Minimum Value0
Maximum Value4096

线程池中允许的最大未使用线程数。该变量可以限制睡眠线程使用的内存量。

值 0(默认值)table 示休眠线程数没有限制。 * N 的值,其中 N 大于 0table 示 1 个使用者线程, N * -1 保留线程。在这种情况下,如果一个线程准备好进入睡眠状态,但是睡眠线程的数量已经达到最大值,则该线程退出而不是进入睡眠状态。

休眠线程正在作为使用者线程或保留线程休眠。线程池在休眠时允许一个线程成为使用者线程。如果线程进入睡眠状态,并且没有现有的使用者线程,它将作为使用者线程进入睡眠状态。当必须唤醒一个线程时,如果有一个 Consumer 线程,则选择该线程。仅当没有使用者线程要唤醒时才选择保留线程。

仅当启用了线程池插件时,此变量才可用。见第 5.5.3 节“ MySQL 企业线程池”

PropertyValue
Command-Line Format--thread-pool-prio-kickup-timer=#
System Variablethread_pool_prio_kickup_timer
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value1000
Minimum Value0
Maximum Value4294967294

此变量影响在低优先级队列中 await 执行的语句。该值是将 await 语句移至高优先级队列之前的毫秒数。默认值为 1000(1 秒)。值的范围是 0 到 232-2.

仅当启用了线程池插件时,此变量才可用。见第 5.5.3 节“ MySQL 企业线程池”

PropertyValue
Command-Line Format--thread-pool-size=#
System Variablethread_pool_size
ScopeGlobal
DynamicNo
TypeInteger
Default Value16
Minimum Value1
Maximum Value64

线程池中的线程组数。这是控制线程池性能的最重要参数。它影响可以同时执行的语句数。缺省值是 16,允许值的范围是 1 到 64.如果指定的值超出此范围,则不会加载线程池插件,并且服务器会将消息写入错误日志。

仅当启用了线程池插件时,此变量才可用。见第 5.5.3 节“ MySQL 企业线程池”

PropertyValue
Command-Line Format--thread-pool-stall-limit=#
System Variablethread_pool_stall_limit
ScopeGlobal
DynamicYes
TypeInteger
Default Value6
Minimum Value4
Maximum Value600

此变量影响执行语句。该值是一条语句在开始执行之后必须先完成的时间,然后才被定义为停止状态,此时线程池允许线程组开始执行另一条语句。该值以 10 毫秒为单位测量,因此值 6(默认值)table 示 60ms。值的范围是 4 到 600(40ms 到 6s)。较短的 await 值使线程可以更快地启动。较短的值也可以更好地避免死锁情况。长 await 值对于包含长时间运行的语句的工作负载很有用,以避免在当前语句执行时启动太多新语句。

仅当启用了线程池插件时,此变量才可用。见第 5.5.3 节“ MySQL 企业线程池”

PropertyValue
Command-Line Format--thread-stack=#
System Variablethread_stack
ScopeGlobal
DynamicNo
TypeInteger
默认值(64 位平台)262144
默认值(32 位平台)196608
Minimum Value131072
最大值(64 位平台)18446744073709551615
最大值(32 位平台)4294967295
Block Size1024

每个线程的堆栈大小。默认值足够大,可以正常运行。如果线程堆栈大小太小,则会限制服务器可以处理的 SQL 语句的复杂性,存储过程的递归深度以及其他消耗内存的操作。

此变量未使用。它已被弃用并在 MySQL 8.0 中删除。

PropertyValue
System Variabletime_zone
ScopeGlobal, Session
DynamicYes
TypeString
Default ValueSYSTEM
Minimum Value-12:59
Maximum Value+13:00

当前时区。此变量用于初始化每个连接的 Client 端的时区。默认情况下,此参数的初始值为'SYSTEM'(table 示“使用system_time_zone的值”)。可以在服务器启动时使用--default-time-zone选项显式指定该值。参见第 5.1.13 节“ MySQL 服务器时区支持”

Note

如果设置为SYSTEM,则每个需要时区计算的 MySQL 函数调用都会进行系统库调用,以确定当前系统时区。该调用可能受到全局互斥锁的保护,从而导致争用。

PropertyValue
System Variabletimestamp
ScopeSession
DynamicYes
TypeNumeric
Default ValueUNIX_TIMESTAMP()
Minimum Value1
Maximum Value2147483647

设置此 Client 端的时间。如果您使用二进制日志来还原行,则使用它来获取原始时间戳。 * timestamp_value *应该是 Unix 纪元时间戳(类似于UNIX_TIMESTAMP()返回的值,而不是'YYYY-MM-DD hh:mm:ss'格式的值)或DEFAULT

timestamp设置为恒定值会使它保留该值,直到再次更改它为止。将timestamp设置为DEFAULT会使其值成为访问日期时的当前日期和时间。最大值对应于'2038-01-19 03:14:07' UTC,与TIMESTAMP数据类型相同。

timestampDOUBLE而不是BIGINT,因为它的值包括微秒部分。

SET timestamp影响NOW()返回的值,但不影响SYSDATE()返回的值。这意味着二进制日志中的时间戳设置对SYSDATE()的调用没有影响。可以使用--sysdate-is-now选项启动服务器,以使SYSDATE()成为NOW()的同义词,在这种情况下SET timestamp影响这两个功能。

PropertyValue
Command-Line Format--tls-version=protocol_list
Introduced5.7.10
System Variabletls_version
ScopeGlobal
DynamicNo
TypeString
默认值(≥5.7.28)TLSv1,TLSv1.1,TLSv1.2
预设值(≤5.7.27)TLSv1,TLSv1.1,TLSv1.2(OpenSSL)

TLSv1,TLSv1.1(yaSSL)

服务器允许哪种协议进行加密连接。该值是一个逗号分隔的列 table,其中包含一个或多个协议版本。可以为该变量命名的协议取决于用于编译 MySQL 的 SSL 库。应该选择允许的协议,以免在列 table 中留下“漏洞”。有关详细信息,请参见第 6.3.2 节“加密的连接 TLS 协议和密码”

PropertyValue
Command-Line Format--tmp-table-size=#
System Variabletmp_table_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value16777216
Minimum Value1024
Maximum Value18446744073709551615

内部内存临时 table 的最大大小。此变量不适用于用户创建的MEMORYtable。

实际限制是tmp_table_sizemax_heap_table_size中的较小者。当内存中的临时 table 超过限制时,MySQL 会自动将其转换为磁盘上的临时 table。 internal_tmp_disk_storage_engine选项定义用于磁盘临时 table 的存储引擎。

如果您执行许多高级GROUP BY查询并且有很多内存,请增加tmp_table_size的值(如果需要,可以增加max_heap_table_size)。

您可以将创建的内部磁盘临时 table 的数量与通过比较Created_tmp_disk_tablesCreated_tmp_tables值创建的内部临时 table 的总数进行比较。

另请参见第 8.4.4 节“ MySQL 中的内部临时 table 使用”

PropertyValue
Command-Line Format--tmpdir=dir_name
System Variabletmpdir
ScopeGlobal
DynamicNo
TypeDirectory name

用于创建临时文件的目录的路径。如果默认的/tmp目录驻留在一个太小而无法容纳临时 table 的分区上,则可能会很有用。可以将此变量设置为以循环方式使用的多个路径的列 table。路径应在 Unix 上用冒号(:)和在 Windows 上用分号(;)分隔。

tmpdir可以是非永久位置,例如基于内存的文件系统上的目录或服务器主机重新启动时将清除的目录。如果 MySQL 服务器充当复制从属服务器,并且您为tmpdir使用了非永久位置,请考虑使用slave_load_tmpdir变量为从属服务器设置其他临时目录。对于复制从属服务器,用于复制LOAD DATA语句的临时文件存储在此目录中,因此具有永久位置,它们可以在计算机重新启动后幸存下来,尽管如果删除了临时文件,复制现在可以在重新启动后 continue。

有关临时文件的存储位置的更多信息,请参见第 B.4.3.5 节“ MySQL 在哪里存储临时文件”

PropertyValue
Command-Line Format--transaction-alloc-block-size=#
System Variabletransaction_alloc_block_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value8192
Minimum Value1024
Maximum Value131072
Block Size1024

增加需要事务的每个事务的内存池所用的字节数。请参阅transaction_prealloc_size的说明。

PropertyValue
Command-Line Format--transaction-isolation=name
系统变量(≥5.7.20)transaction_isolation
范围(≥5.7.20)Global, Session
动态(≥5.7.20)Yes
TypeEnumeration
Default ValueREPEATABLE-READ
Valid ValuesREAD-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;

如前所述,事务隔离级别除了全局作用域和会话作用域之外,还具有下一个事务作用域。为了能够设置 next-transaction 范围,用于分配会话系统变量值的SET语法具有transaction_isolation的非标准语义:

  • 要设置会话隔离级别,请使用以下任何语法:
SET @@SESSION.transaction_isolation = value;
SET SESSION transaction_isolation = value;
SET transaction_isolation = value;

对于这些语法中的每一种,这些语义都适用:

  • 为会话中执行的所有后续事务设置隔离级别。

    • 允许在事务内进行,但不影响当前正在进行的事务。

    • 如果在事务之间执行,则将覆盖设置下一个事务隔离级别的任何在前语句。

    • 对应于设置会话事务隔离级别(带有SESSION关键字)。

    • 要设置下一个事务隔离级别,请使用以下语法:

SET @@transaction_isolation = value;

对于该语法,这些语义适用:

  • 仅为会话中执行的下一个单个事务设置隔离级别。

有关SET TRANSACTION及其与transaction_isolation系统变量的关系的更多信息,请参见第 13.3.6 节“ SET TRANSACTION 语句”

Note

在 MySQL 5.7.20 中添加了transaction_isolation作为tx_isolation的同义词,现在已弃用并在 MySQL 8.0 中删除。应将应用程序调整为优先于tx_isolation使用transaction_isolation

PropertyValue
Command-Line Format--transaction-prealloc-size=#
System Variabletransaction_prealloc_size
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value4096
Minimum Value1024
Maximum Value131072
Block Size1024

每个事务都有一个内存池,各种与事务相关的分配都从该内存池获取内存。池的初始大小(以字节为单位)为transaction_prealloc_size。对于由于没有足够的可用内存而无法从池中满足的每个分配,池将增加transaction_alloc_block_size个字节。事务结束时,池将被截断为transaction_prealloc_size个字节。

通过使transaction_prealloc_size足够大以在单个事务中包含所有语句,可以避免许多malloc()调用。

PropertyValue
Command-Line Format--transaction-read-only[={OFF|ON}]
系统变量(≥5.7.20)transaction_read_only
范围(≥5.7.20)Global, Session
动态(≥5.7.20)Yes
TypeBoolean
Default ValueOFF

事务访问方式。该值可以是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;

如前所述,除了全局作用域和会话作用域之外,事务访问模式还具有下一个事务作用域。为了能够设置 next-transaction 范围,用于分配会话系统变量值的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及其与transaction_read_only系统变量的关系的更多信息,请参见第 13.3.6 节“ SET TRANSACTION 语句”

Note

在 MySQL 5.7.20 中添加了transaction_read_only作为tx_read_only的同义词,现在已弃用并在 MySQL 8.0 中删除。应将应用程序调整为优先于tx_read_only使用transaction_read_only

PropertyValue
Deprecated5.7.20
System Variabletx_isolation
ScopeGlobal, Session
DynamicYes
TypeEnumeration
Default ValueREPEATABLE-READ
Valid ValuesREAD-UNCOMMITTED

READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE

默认事务隔离级别。默认为REPEATABLE-READ

Note

在 MySQL 5.7.20 中添加了transaction_isolation作为tx_isolation的同义词,现在已弃用并在 MySQL 8.0 中删除。应将应用程序调整为优先于tx_isolation使用transaction_isolation。有关详细信息,请参见transaction_isolation的描述。

PropertyValue
Deprecated5.7.20
System Variabletx_read_only
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueOFF

默认事务访问模式。该值可以是OFF(读/写,默认)或ON(只读)。

Note

在 MySQL 5.7.20 中添加了transaction_read_only作为tx_read_only的同义词,现在已弃用并在 MySQL 8.0 中删除。应将应用程序调整为优先于tx_read_only使用transaction_read_only。有关详细信息,请参见transaction_read_only的描述。

PropertyValue
System Variableunique_checks
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default ValueON

如果设置为 1(默认值),则对InnoDBtable 中的辅助索引执行唯一性检查。如果设置为 0,则允许存储引擎假定 Importing 数据中不存在重复的键。如果您确定您的数据不包含唯一性违规,则可以将其设置为 0,以加快将大型 table 导入到InnoDB的速度。

将此变量设置为 0 并不需要存储引擎忽略重复的键。仍然允许引擎检查它们并在检测到它们时发出重复密钥错误。

PropertyValue
Command-Line Format--updatable-views-with-limit[={OFF|ON}]
System Variableupdatable_views_with_limit
ScopeGlobal, Session
DynamicYes
TypeBoolean
Default Value1

如果 update 语句包含LIMIT子句,则当视图不包含在基础 table 中定义的主键的所有列时,此变量控制是否可以对视图进行更新。 (此类更新通常由 GUI 工具生成.)更新是UPDATEDELETE语句。这里的主键 table 示PRIMARY KEYUNIQUE索引,其中任何列都不能包含NULL

该变量可以具有两个值:

  • 1YES:仅发出警告(而不是错误消息)。这是默认值。

    • 0NO:禁止更新。
  • validate_password_xxx

validate_password插件实现了一组名称形式为validate_password_xxx的系统变量。这些变量会影响该插件的密码测试;参见第 6.4.3.2 节“密码验证插件选项和变量”

PropertyValue
Command-Line Format--validate-user-plugins[={OFF|ON}]
System Variablevalidate_user_plugins
ScopeGlobal
DynamicNo
TypeBoolean
Default ValueON

如果启用了此变量(默认值),则服务器将检查每个用户帐户,并在发现导致该帐户不可用的条件时发出警告:

  • 该帐户需要未加载的身份验证插件。

    • 该帐户需要sha256_password身份验证插件,但是服务器未按照该插件的要求启用 SSL 或 RSA 的状态下启动。

启用validate_user_plugins会减慢服务器初始化速度,而FLUSH PRIVILEGES会减慢速度。如果不需要其他检查,则可以在启动时禁用此变量以避免性能下降。

服务器的版本号。该值可能还包含一个后缀,指示服务器的内部版本或配置信息。 -logtable 示已启用常规日志,慢速查询日志或二进制日志中的一个或多个。 -debugtable 示服务器是在启用调试支持的情况下构建的。

PropertyValue
System Variableversion_comment
ScopeGlobal
DynamicNo
TypeString

CMake 配置程序具有COMPILATION_COMMENT选项,该选项允许在构建 MySQL 时指定 Comments。此变量包含该 Comments 的值。参见第 2.9.7 节“ MySQL 源配置选项”

PropertyValue
System Variableversion_compile_machine
ScopeGlobal
DynamicNo
TypeString

服务器二进制文件的类型。

PropertyValue
System Variableversion_compile_os
ScopeGlobal
DynamicNo
TypeString

构建 MySQL 的作业系统类型。

PropertyValue
Command-Line Format--wait-timeout=#
System Variablewait_timeout
ScopeGlobal, Session
DynamicYes
TypeInteger
Default Value28800
Minimum Value1
最大值(其他)31536000
最大值(Windows)2147483

服务器在关闭非交互式连接之前 await 活动的秒数。

在线程启动时,会话wait_timeout值是根据全局wait_timeout值或全局interactive_timeout值初始化的,具体取决于 Client 端的类型(由mysql_real_connect()CLIENT_INTERACTIVE connect 选项定义)。另请参见interactive_timeout

最后一条生成消息的语句导致的错误,警告和 Comments 的数量。该变量是只读的。参见第 13.7.5.40 节“ SHOW 警告声明”