5.1.8服务器系统变量
文章目录
- 5.1.8服务器系统变量
- activate_all_roles_on_login
- admin_address
- admin_address
- admin_port
- admin_ssl_ca
- admin_ssl_capath
- admin_ssl_cert
- admin_ssl_cipher
- admin_ssl_crl
- admin_ssl_crlpath
- admin_ssl_key
- admin_tls_ciphersuites
- admin_tls_version
- authentication_windows_log_level
- authentication_windows_use_principal_name
- autocommit
- automatic_sp_privileges
- auto_generate_certs
- avoid_temporal_upgrade
- back_log
- basedir
- big_tables
- bind_address
- block_encryption_mode
- bulk_insert_buffer_size
- caching_sha2_password_digest_rounds
- caching_sha2_password_auto_generate_rsa_keys
- caching_sha2_password_private_key_path
- caching_sha2_password_public_key_path
- character_set_client
- character_set_connection
- character_set_database
- character_set_filesystem
- character_set_results
- character_set_server
- character_set_system
- character_sets_dir
- check_proxy_users
- collation_connection
- collation_database
- collation_server
- completion_type
- concurrent_insert
- connect_timeout
- core_file
- create_admin_listener_thread
- cte_max_recursion_depth
- datadir
- debug
- debug_sync
- default_authentication_plugin
- default_collation_for_utf8mb4
- default_storage_engine
- default_table_encryption
- default_tmp_storage_engine
- default_week_format
- delay_key_write
- delayed_insert_limit
- delayed_insert_timeout
- delayed_queue_size
- disabled_storage_engines
- disconnect_on_expired_password
- div_precision_increment
- dragnetlog_error_filter_rules
- end_markers_in_json
- eq_range_index_dive_limit
- error_count
- event_scheduler
- explicit_defaults_for_timestamp
- external_user
- flush
- flush_time
- foreign_key_checks
- ft_boolean_syntax
- ft_max_word_len
- ft_min_word_len
- ft_query_expansion_limit
- ft_stopword_file
- general_log
- general_log_file
- generated_random_password_length
- group_concat_max_len
- have_compress
- have_dynamic_loading
- have_geometry
- have_openssl
- have_profiling
- have_query_cache
- have_rtree_keys
- have_ssl
- have_statement_timeout
- have_symlink
- histogram_generation_max_mem_size
- host_cache_size
- hostname
- identity
- init_connect
- information_schema_stats_expiry
- init_file
- `innodb_xxx`
- insert_id
- interactive_timeout
- internal_tmp_disk_storage_engine
- internal_tmp_mem_storage_engine
- join_buffer_size
- keep_files_on_create
- key_buffer_size
- key_cache_age_threshold
- key_cache_block_size
- key_cache_division_limit
- large_files_support
- large_pages
- large_page_size
- last_insert_id
- lc_messages
- lc_messages_dir
- lc_time_names
- license
- local_infile
- lock_wait_timeout
- locked_in_memory
- log_error
- log_error_services
- log_error_suppression_list
- log_error_verbosity
- log_output
- log_queries_not_using_indexes
- log_raw
- log_slow_admin_statements
- log_slow_extra
- log_syslog
- log_syslog_facility
- log_syslog_include_pid
- log_syslog_tag
- log_timestamps
- log_throttle_queries_not_using_indexes
- long_query_time
- low_priority_updates
- lower_case_file_system
- lower_case_table_names
- mandatory_roles
- max_allowed_packet
- max_connect_errors
- max_connections
- max_delayed_threads
- max_digest_length
- max_error_count
- max_execution_time
- max_heap_table_size
- max_insert_delayed_threads
- max_join_size
- max_length_for_sort_data
- max_points_in_geometry
- max_prepared_stmt_count
- max_seeks_for_key
- max_sort_length
- max_sp_recursion_depth
- max_user_connections
- max_write_lock_count
- mecab_rc_file
- metadata_locks_cache_size
- metadata_locks_hash_instances
- min_examined_row_limit
- myisam_data_pointer_size
- myisam_max_sort_file_size
- myisam_mmap_size
- myisam_recover_options
- myisam_repair_threads
- myisam_sort_buffer_size
- myisam_stats_method
- myisam_use_mmap
- mysql_native_password_proxy_users
- named_pipe
- named_pipe_full_access_group
- net_buffer_length
- net_read_timeout
- net_retry_count
- net_write_timeout
- new
- ngram_token_size
- offline_mode
- old
- old_alter_table
- open_files_limit
- optimizer_prune_level
- optimizer_search_depth
- optimizer_switch
- optimizer_trace
- optimizer_trace_features
- optimizer_trace_limit
- optimizer_trace_max_mem_size
- optimizer_trace_offset
- parser_max_mem_size
- partial_revokes
- password_history
- password_require_current
- password_reuse_interval
- persisted_globals_load
- persist_only_admin_x509_subject
- pid_file
- plugin_dir
- port
- preload_buffer_size
- print_identified_with_as_hex
- profiling
- profiling_history_size
- protocol_compression_algorithms
- protocol_version
- proxy_user
- pseudo_slave_mode
- pseudo_thread_id
- query_alloc_block_size
- query_prealloc_size
- rand_seed1
- rand_seed2
- range_alloc_block_size
- range_optimizer_max_mem_size
- rbr_exec_mode
- read_buffer_size
- read_only
- read_rnd_buffer_size
- regexp_stack_limit
- regexp_time_limit
- require_row_format
- require_secure_transport
- resultset_metadata
- secondary_engine_cost_threshold
- schema_definition_cache
- secure_file_priv
- select_into_buffer_size
- select_into_disk_sync
- select_into_disk_sync_delay
- session_track_gtids
- session_track_schema
- session_track_state_change
- session_track_system_variables
- session_track_transaction_info
- sha256_password_auto_generate_rsa_keys
- sha256_password_private_key_path
- sha256_password_proxy_users
- sha256_password_public_key_path
- shared_memory
- shared_memory_base_name
- show_create_table_skip_secondary_engine
- show_create_table_verbosity
MySQL服务器维护着许多配置其操作的系统变量 . 每个系统变量都有一个默认值 . 系统变量可以在服务器启动时使用命令行或选项文件中的选项来设置 . 大多数系统变量可以在运行时使用SET语句动态改变 , 这使得你可以修改服务器的操作 , 而不需要停止和重启它 . 你也可以在表达式中使用系统变量值 .
设置全局系统变量的运行值通常需要 SYSTEM_VARIABLES_ADMIN 权限(或被废弃的SUPER权限) . 设置一个会话系统运行时变量值通常不需要特殊的权限 , 任何用户都可以完成 , 但也有例外 . 欲了解更多信息 , 请参见第5.1.9.1节 “系统变量权限”
有几种方法可以看到系统变量的名称和值 .
- 要查看一个服务器根据其编译的默认值和它所读取的任何选项文件所使用的值 , 请使用这个命令 .
mysqld --verbose --help
- 要查看一个服务器仅根据其编译的默认值使用的值 , 而忽略任何选项文件中的设置 , 请使用这个命令 .
mysqld --no-defaults --verbose --help
- 要查看正在运行的服务器所使用的当前值 , 可以使用
SHOW VARIABLES
语句或者Performance Schema系统变量表 . 参见第27.12.14节 , “性能模式系统变量表” .
本节对每个系统变量进行了描述 . 关于系统变量的汇总表 , 请参见章节5.1.5 “服务器系统变量参考” . 关于操纵系统变量的更多信息 , 请参见第5.1.9节 “使用系统变量” .
有关其他系统变量的信息 , 请参见这些章节 .
- 第5.1.9节 , “使用系统变量” , 讨论了设置和显示系统变量值的语法 .
- 第5.1.9.2节 , “动态系统变量” , 列出了可以在运行时设置的变量 .
- 关于调整系统变量的信息可以在第5.1.1节 "配置服务器 "中找到 .
- 第15.14节 , “InnoDB启动选项和系统变量” , 列出了InnoDB系统变量 .
- 第23.3.3.9.2节 , “NDB集群系统变量” , 列出了NDB集群特有的系统变量 .
- 关于复制特有的服务器系统变量的信息 , 请参见第17.1.6节 , “复制和二进制日志选项和变量” .
::: tip Note
下面的一些变量描述是指 "启用 "或 "禁用 "一个变量 . 这些变量可以通过SET语句设置为ON或1来启用 , 也可以通过设置为OFF或0来禁用 . 布尔变量可以在启动时设置为ON、TRUE、OFF和FALSE(不区分大小写) , 以及1和0 . 参见第4.2.2.4节 , “程序选项修改器” .
:::
一些系统变量控制着缓冲区或缓存的大小 . 对于一个给定的缓冲区 , 服务器可能需要分配内部数据结构 . 这些结构通常是从分配给缓冲区的总内存中分配的 , 所需空间的大小可能与平台有关 . 这意味着 , 当你给控制缓冲区大小的系统变量赋值时 , 实际可用的空间量可能与赋值不同 . 在某些情况下 , 该数量可能小于分配的值 . 也有可能服务器会向上调整一个值 . 例如 , 如果你给一个最小值为1024的变量分配了一个0的值 , 服务器会把这个值设置为1024 .
除非另有说明 , 否则缓冲区大小、长度和堆栈大小的值都是以字节为单位的 .
一些系统变量采用文件名值 . 除非另有规定 , 如果数值是相对路径名 , 默认的文件位置是数据目录 . 要明确指定位置 , 请使用绝对路径名 . 假设数据目录是/var/mysql/data
. 如果一个文件值变量被赋予相对路径名 , 那么它就位于/var/mysql/data
下 . 如果该值是一个绝对路径名 , 那么它的位置就像路径名所给的那样 .
activate_all_roles_on_login
命令行格式 | --activate-all-roles-on-login[={OFF|ON}] |
---|---|
系统变量 | activate_all_roles_on_login |
范围 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
当用户登录到服务器时 , 是否启用自动激活所有授予的角色 .
-
如果启用了 activation_all_roles_on_login , 服务器将在登录时激活授予每个帐户的所有角色 . 这比用SET DEFAULT ROLE指定的默认角色要优先 .
-
如果在登录时激活所有角色被禁用 , 服务器会在登录时激活用SET DEFAULT ROLE指定的默认角色(如果有) .
activate_all_roles_on_login 只适用于登录时 , 以及在定义器上下文中执行的存储程序和视图的执行开始时 . 要在一个会话中改变活动角色 , 请使用 SET ROLE . 要改变一个存储程序的活动角色 , 程序主体应该执行SET ROLE .
admin_address
命令行格式 | --activate-all-roles-on-login[={OFF|ON}] |
---|---|
系统变量 | activate_all_roles_on_login |
范围 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
admin_address
命令行格式 | --admin-address=addr |
---|---|
引进 | 8.0.14 |
系统变量 | admin_address |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
在管理网络接口上监听TCP/IP连接的IP地址(见5.1.12.1节 , “连接接口”) .
没有默认的admin_address值 . 如果在启动时没有指定这个变量 , 服务器就不会维护管理接口 . 服务器还有一个 bind_address
系统变量 , 用于配置常规(非管理)客户端的TCP/IP连接 . 参见第5.1.12.1节 “连接接口” .
如果指定了admin_address , 则其值必须满足以下要求:
- 该值必须是单个IPv4地址、IPv6地址或主机名 .
- 该值不能指定通配符地址格式(
*
,0.0.0.0
, 或::
) . - 从MySQL 8.0.22开始 , 该值可以包括一个网络命名空间指定符 .
IP地址可以被指定为一个IPv4或IPv6地址 . 如果该值是一个主机名 , 服务器会将该名称解析为一个IP地址并绑定到该地址 . 如果一个主机名被解析为多个IP地址 , 如果有的话 , 服务器会使用第一个IPv4地址 , 否则就使用第一个IPv6地址 .
服务器对不同类型的地址处理如下 .
-
如果该地址是一个IPv4映射的地址 , 服务器接受该地址的TCP/IP连接 , 可以是IPv4或IPv6格式 . 例如 , 如果服务器被绑定到
::fff:127.0.0.1
, 客户可以使用--host=127.0.0.1
或--host=::fff:127.0.0.1
连接 . -
如果该地址是一个 "常规 "的IPv4或IPv6地址(如
127.0.0.1
或::1
) , 服务器只接受该IPv4或IPv6地址的TCP/IP连接 .
这些规则适用于为一个地址指定网络命名空间 .
- 网络命名空间可以为IP地址或主机名指定 .
- 不能为通配符IP地址指定网络名称空间 .
- 对于一个给定的地址 , 网络命名空间是可选的 . 如果给定 , 它必须作为
/*
ns*
后缀紧跟在地址后面指定 . - 没有
/*
ns*
后缀的地址使用主机系统全局命名空间 . 因此 , 全局命名空间是默认的 . - 一个带有
/*
ns*
后缀的地址使用名为ns
的命名空间 . - 主机系统必须支持网络命名空间 , 并且每个命名的命名空间之前必须已经设置好了 . 命名一个不存在的名字空间会产生一个错误 .
有关网络名称空间的更多信息 , 请参见第5.1.14节“网络名称空间支持” .
如果与地址绑定失败 , 服务器会产生一个错误 , 不会启动 .
admin_address 系统变量类似于 bind_address 系统变量 , 该系统变量将服务器绑定到普通客户端连接的地址 , 但具有以下区别:
- bind_address允许多个地址 . admin_address允许一个地址 .
- bind_address允许通配符地址 , admin_address不允许 .
admin_port
命令行格式 | --admin-port=port_num |
---|---|
引进 | 8.0.14 |
系统变量 | admin_port |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 33062 |
最小值 | 0 |
最大值 | 65535 |
用于管理网络接口连接的TCP/IP端口号(见第5.1.12.1节 , “连接接口”) . 将此变量设置为0会导致使用默认值 .
如果没有指定admin_address , 设置admin_port没有效果 , 因为在这种情况下 , 服务器没有维护管理网络接口 .
admin_ssl_ca
命令行格式 | --admin-ssl-ca=file_name |
---|---|
引进 | 8.0.21 |
系统变量 | admin_ssl_ca |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | File name |
默认值 | NULL |
admin_ssl_ca 系统变量与 ssl_ca 类似 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_ssl_capath
命令行格式 | --admin-ssl-capath=dir_name |
---|---|
引进 | 8.0.21 |
系统变量 | admin_ssl_capath |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Directory name |
默认值 | NULL |
admin_ssl_capath 系统变量类似于 ssl_capath , 不同之处在于它适用于管理连接接口而不是主连接接口 . 有关为管理接口配置加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_ssl_cert
命令行格式 | --admin-ssl-cert=file_name |
---|---|
引进 | 8.0.21 |
系统变量 | admin_ssl_cert |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | File name |
默认值 | NULL |
admin_ssl_cert系统变量与ssl_cert类似 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_ssl_cipher
命令行格式 | --admin-ssl-cipher=name |
---|---|
引进 | 8.0.21 |
系统变量 | admin_ssl_cipher |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | NULL |
admin_ssl_cipher系统变量与ssl_cipher类似 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_ssl_crl
命令行格式 | --admin-ssl-crl=file_name |
---|---|
引进 | 8.0.21 |
系统变量 | admin_ssl_crl |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | File name |
默认值 | NULL |
admin_ssl_crl系统变量与ssl_crl类似 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_ssl_crlpath
命令行格式 | --admin-ssl-crlpath=dir_name |
---|---|
引进 | 8.0.21 |
系统变量 | admin_ssl_crlpath |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Directory name |
默认值 | NULL |
admin_ssl_crlpath系统变量和ssl_crlpath一样 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_ssl_key
命令行格式 | --admin-ssl-key=file_name |
---|---|
引进 | 8.0.21 |
系统变量 | admin_ssl_key |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | File name |
默认值 | NULL |
admin_ssl_key系统变量与ssl_key类似 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_tls_ciphersuites
命令行格式 | --admin-tls-ciphersuites=ciphersuite_list |
---|---|
引进 | 8.0.21 |
系统变量 | admin_tls_ciphersuites |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | NULL |
admin_tls_ciphersuites系统变量与tls_ciphersuites类似 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
admin_tls_version
命令行格式 | --admin-tls-version=protocol_list |
---|---|
引进 | 8.0.21 |
系统变量 | admin_tls_version |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 (OpenSSL 1.1.1 and higher)TLSv1,TLSv1.1,TLSv1.2 (otherwise) |
admin_tls_version系统变量和tls_version一样 , 只是它适用于管理连接界面而不是主连接界面 . 关于配置管理界面的加密支持的信息 , 请看管理界面对加密连接的支持 .
:: tip Note
从MySQL 8.0.26开始 , TLSv1和TLSv1.1连接协议已被废弃 , 对它们的支持将在未来的MySQL版本中取消 . See Deprecated TLS Protocols.
:::
authentication_windows_log_level
命令行格式 | --authentication-windows-log-level=# |
---|---|
系统变量 | authentication_windows_log_level |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 2 |
最小值 | 0 |
最大值 | 4 |
这个变量只有在启用了authentication_windows Windows认证插件并启用了调试代码时才可用 . 参见第6.4.1.6节 , “Windows可插拔认证” .
这个变量设置Windows认证插件的日志记录级别 . 下表显示了允许的值 .
Value | Description |
---|---|
0 | No logging |
1 | Log only error messages |
2 | Log level 1 messages and warning messages |
3 | Log level 2 messages and information notes |
4 | Log level 3 messages and debug messages |
authentication_windows_use_principal_name
命令行格式 | --authentication-windows-use-principal-name[={OFF|ON}] |
---|---|
系统变量 | authentication_windows_use_principal_name |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
这个变量只有在启用了authentication_windows Windows认证插件的情况下才可用 . 参见第6.4.1.6节 , “Windows可插拔认证” .
使用 InitSecurityContext()
函数进行验证的客户端应提供一个字符串 , 以识别它所连接的服务(targetName) . MySQL使用运行服务器的账户的主名称(UPN) . UPN的形式是 user_id@computer_name
, 不需要在任何地方注册就可以使用 . 这个UPN是由服务器在认证握手开始时发送的 .
这个变量控制服务器是否在初始询问中发送UPN . 默认情况下 , 该变量是启用的 . 出于安全考虑 , 可以禁用该变量以避免将服务器的账户名作为明文发送给客户端 . 如果该变量被禁用 , 服务器总是在第一个询问中发送一个 0x00
字节 , 客户端不指定targetName , 因此 , 使用NTLM认证 .
如果服务器未能获得其UPN(这主要发生在不支持Kerberos认证的环境中) , 服务器就不会发送UPN , 而使用NTLM认证 .
autocommit
命令行格式 | --autocommit[={OFF|ON}] |
---|---|
系统变量 | autocommit |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
自动提交模式 . 如果设置为1 , 对一个表的所有改变都会立即生效 . 如果设置为0 , 你必须使用COMMIT来接受一个事务 , 或者使用ROLLBACK来取消它 . 如果自动提交是0 , 而你把它改为1 , MySQL会对任何打开的事务执行自动COMMIT . 另一种开始事务的方法是使用 START TRANSACTION
或 BEGIN
语句 . 见第13.3.1节 , “开始交易、COMMIT和ROLLBACK语句” .
默认情况下 , 客户端连接开始时的自动提交设置为1 . 要使客户端开始时的默认值为0 , 可以用 --autocommit=0
选项启动服务器 , 设置全局自动提交值 . 要使用选项文件来设置这个变量 , 请包括这些行 .
[mysqld]
autocommit=0
automatic_sp_privileges
命令行格式 | --automatic-sp-privileges[={OFF|ON}] |
---|---|
系统变量 | automatic_sp_privileges |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
当这个变量的值为1(默认值)时 , 如果用户不能执行和改变或放弃一个存储例程 , 服务器会自动授予该例程的创建者 EXECUTE
和 ALTER ROUTINE
权限 . ALTER ROUTINE
权限是用来删除例程的 . )当例程被删除时 , 服务器也会自动放弃创建者的这些权限 . 如果 automatic_sp_privileges
为0 , 服务器不会自动添加或删除这些权限 .
例程的创建者是用来执行 CREATE
语句的账户 . 这可能与例程定义中命名为 DEFINER
的账户不一样 .
如果你用 --skip-new
启动 mysqld , automatic_sp_privileges 被设置为OFF .
另见第25.2.2节,“存储的例程和MySQL权限” .
auto_generate_certs
命令行格式 | --auto-generate-certs[={OFF|ON}] |
---|---|
系统变量 | auto_generate_certs |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
这个变量控制服务器是否在数据目录中自动生成SSL密钥和证书文件,如果它们还不存在的话 .
在启动时,如果启用了 auto_generate_certs
系统变量,没有指定除 --ssl
以外的SSL选项,并且数据目录中缺少服务器端SSL文件,则服务器会在数据目录中自动生成服务器端和客户端的SSL证书和密钥文件 . 这些文件能够使用SSL实现安全的客户端连接;见第6.3.1节,“配置MySQL使用加密连接” .
关于SSL文件自动生成的更多信息,包括文件名称和特征,见第6.3.3.1节 “使用MySQL创建SSL和RSA证书和密钥”
sha256_password_auto_generate_rsa_keys
和 caching_sha2_password_auto_generate_rsa_keys
这两个系统变量是相关的,但它们控制的是自动生成RSA密钥对文件,这是通过未加密连接使用RSA进行安全密码交换所需的 .
avoid_temporal_upgrade
命令行格式 | --avoid-temporal-upgrade[={OFF|ON}] |
---|---|
不推荐使用 | Yes |
系统变量 | avoid_temporal_upgrade |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
这个变量控制 ALTER TABLE
是否隐含地升级被发现为5.6.4之前格式的时间列(不支持小数秒精度的TIME、DATETIME和TIMESTAMP列)。升级这样的列需要重建表,这就阻止了任何可能适用于要执行的操作的快速修改的使用。
这个变量默认是禁用的。启用它可以使ALTER TABLE不重建时间性的列,从而能够利用可能的快速改变。
这个变量已被废弃;预计它将在未来的MySQL版本中被删除。
back_log
命令行格式 | --back-log=# |
---|---|
系统变量 | back_log |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | -1 (表示自动调整大小;不要分配此文字值) |
最小值 | 1 |
最大值 | 65535 |
MySQL可以拥有的未处理连接请求的数量。当MySQL主线程在很短的时间内得到非常多的连接请求时,这就发挥作用了。然后,主线程需要一些时间(尽管非常少)来检查连接并启动一个新线程。back_log值表示在这个短时间内可以堆积多少请求,然后MySQL才会暂时停止响应新的请求。只有当你预期在短时间内有大量的连接时,你才需要增加这个值。
换句话说,这个值是传入的TCP/IP连接的监听队列的大小。你的操作系统对这个队列的大小有自己的限制。Unix listen()
系统调用的手册页应该有更多细节。检查你的操作系统文档,了解这个变量的最大值。 back_log 的设置不能高于你的操作系统限制。
默认值是 max_connections
的值,它使允许的积压调整到最大允许的连接数。
basedir
命令行格式 | --basedir=dir_name |
---|---|
系统变量 | basedir |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Directory name |
默认值 | mysqld安装目录的父目录 |
MySQL安装基础目录的路径。
big_tables
命令行格式 | --big-tables[={OFF|ON}] |
---|---|
系统变量 | big_tables |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果启用,服务器会将所有临时表存储在磁盘上而不是内存中。这可以防止在需要大型临时表的 SELECT 操作中出现表 tbl_name 已满的错误,但也会减慢查询速度,因为在内存中的表已经足够了。
新连接的默认值是关闭(使用内存中的临时表)。通常情况下,应该永远没有必要启用这个变量。当内存中的内部临时表由 TempTable 存储引擎管理时(默认),并且超过了 TempTable 存储引擎所能占用的最大内存量,TempTable 存储引擎开始将数据存储到磁盘上的临时文件。当内存中的临时表由 MEMORY 存储引擎管理时,内存中的表会根据需要自动转换为基于磁盘的表。欲了解更多信息,请参见第8.4.4节 “MySQL中的内部临时表使用”。
bind_address
命令行格式 | --bind-address=addr |
---|---|
系统变量 | bind_address |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
默认值 | * |
MySQL服务器在一个或多个网络套接字上监听TCP/IP连接。每个套接字被绑定到一个地址,但一个地址有可能映射到多个网络接口。要指定服务器应如何监听 TCP/IP 连接,可在服务器启动时设置 bind_address 系统变量。服务器还有一个 admin_address 系统变量,可以在一个专用接口上实现管理连接。参见第5.1.12.1节,“连接接口”。
如果指定bind_address,其值必须满足这些要求。
- 在MySQL 8.0.13之前,bind_address接受一个地址值,它可以指定一个非通配符的IP地址或主机名,或允许监听多个网络接口的通配符地址格式之一(
*
,0.0.0.0
,或::
)。 - 从MySQL 8.0.13开始,bind_address可以接受刚才描述的单个值,或者是一个用逗号分隔的值的列表。当变量命名为多个值的列表时,每个值必须指定一个非通配符IP地址(IPv4或IPv6)或一个主机名。通配符地址格式(
*
,0.0.0.0
,或::
)在数值列表中是不允许的。 - 从MySQL 8.0.22开始,地址可以包括一个网络命名空间指定器。
IP地址可以被指定为IPv4或IPv6地址。对于任何一个主机名的值,服务器会将该名称解析为一个IP地址,并与该地址绑定。如果一个主机名被解析为多个IP地址,如果有的话,服务器会使用第一个IPv4地址,否则就使用第一个IPv6地址。
服务器按以下方式处理不同类型的地址:
- 如果该地址为
*
,服务器接受所有服务器主机IPv4接口上的TCP/IP连接,如果服务器主机支持IPv6,则接受所有IPv6接口上的连接。使用这个地址可以允许所有服务器接口上的IPv4和IPv6连接。此值为默认值。如果该变量指定了多个值的列表,则不允许使用此值。 - 如果地址是
0.0.0.0
,服务器接受所有服务器主机IPv4接口的TCP/IP连接。如果该变量指定的是多个值的列表,则不允许使用该值。 - 如果地址是
::
,服务器接受所有服务器主机IPv4和IPv6接口的TCP/IP连接。如果该变量指定的是多个值的列表,则不允许使用此值。 - 如果该地址是一个IPv4映射的地址,服务器接受该地址的TCP/IP连接,可以是IPv4或IPv6格式。例如,如果服务器被绑定到
::fff:127.0.0.1
,客户可以使用--host=127.0.0.1
或--host=::fff:127.0.0.1
连接。 - 如果该地址是一个 "常规 "的IPv4或IPv6地址(如
127.0.0.1
或::1
),服务器只接受该IPv4或IPv6地址的TCP/IP连接。
这些规则适用于为一个地址指定网络命名空间。
- 可以为一个IP地址或一个主机名指定一个网络名称空间。
- 不能为通配符IP地址指定一个网络命名空间。
- 对于一个给定的地址,网络命名空间是可选的。如果给定,它必须作为
/ns
后缀紧随地址指定。 - 没有/ns后缀的地址使用主机系统全局命名空间。因此,全局命名空间是默认的。
- 带/ ns后缀的地址使用名为ns的名称空间。
- 主机系统必须支持网络命名空间,而且每个命名的命名空间之前必须已经设置好了。命名一个不存在的命名空间会产生一个错误。
- 如果变量值指定了多个地址,它可以包括全局命名空间、命名空间或混合的地址。
关于网络命名空间的其他信息,见第5.1.14节 “网络命名空间支持”。
如果与任何地址绑定失败,服务器会产生一个错误,并且不会启动。
Examples:
-
bind_address=*
服务器监听所有IPv4或IPv6地址,如*
通配符所指定。 -
bind_address=198.51.100.20
服务器只监听198.51.100.20
这个IPv4地址。 -
bind_address=198.51.100.20,2001:db8:0:f101::1
服务器监听198.51.100.20
IPv4地址和2001:db8:0:f101::1
IPv6地址。 -
bind_address=198.51.100.20,*
这产生了一个错误,因为当 bind_address 命名一个多值的列表时,不允许使用通配符地址。 -
bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50
服务器监听红色命名空间的198.51.100.20
IPv4地址,蓝色命名空间的2001:db8:0:f101::1
IPv6地址,以及全局命名空间的192.0.2.50
IPv4地址。
当 bind_address 命名一个单一的值(通配符或非通配符)时,服务器在一个套接字上监听,对于通配符地址,它可能被绑定到多个网络接口。当 bind_address 命名为多个值的列表时,服务器在每个值上监听一个套接字,每个套接字绑定到一个网络接口。套接字的数量与指定值的数量成线性关系。根据操作系统的连接接受效率,长的值列表在接受 TCP/IP 连接时可能会产生性能损失。
因为文件描述符是为监听套接字和网络命名空间文件分配的,可能有必要增加 open_files_limit 系统变量。
如果你打算将服务器绑定到一个特定的地址,请确保mysql.user系统表包含一个具有管理权限的账户,你可以用它来连接到该地址。否则,你不能关闭服务器。例如,如果你将服务器绑定到*
,你可以使用所有现有的账户连接到它。但如果你把服务器绑定到::1,它只接受该地址的连接。在这种情况下,首先确保'root'@'::1'
账户在 mysql.user
表中存在,这样你仍然可以连接到服务器来关闭它。
block_encryption_mode
命令行格式 | --block-encryption-mode=# |
---|---|
系统变量 | block_encryption_mode |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | aes-128-ecb |
这个变量控制基于块的算法(如AES)的块加密模式。它影响到 AES_ENCRYPT() 和 AES_DECRYPT() 的加密。
block_encryption_mode 接收一个 aes-keylen-mode 格式的值,其中 keylen 是密钥长度(比特),mode 是加密模式。该值不区分大小写。允许的keylen值是128、192和256。允许的模式值是ECB、CBC、CFB1、CFB8、CFB128和OFB。
例如,该语句使AES加密功能使用256比特的密钥长度和CBC模式。
SET block_encryption_mode = 'aes-256-cbc';
如果试图将 block_encryption_mode 设置为一个包含不支持的密钥长度或SSL库不支持的模式的值,则会发生错误。
bulk_insert_buffer_size
命令行格式 | --bulk-insert-buffer-size=# |
---|---|
系统变量 | bulk_insert_buffer_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 8388608 |
最小值 | 0 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
MyISAM 使用一个特殊的树状缓存来使 INSERT ... SELECT
, INSERT ... VALUES (...), (...), ...
, 和LOAD DATA
的批量插入在向非空表添加数据时更快。这个变量限制了每个线程的缓存树的大小,单位是字节。将其设置为0将禁用这种优化。默认值是8MB。
从 MySQL 8.0.14 开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
caching_sha2_password_digest_rounds
命令行格式 | --caching-sha2-password-digest-rounds=# |
---|---|
引进 | 8.0.24 |
系统变量 | caching_sha2_password_digest_rounds |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 5000 |
最小值 | 5000 |
最大值 | 4095000 |
caching_sha2_password
认证插件用于密码存储的哈希轮数。
增加散列轮数超过默认值,会产生一个与增加量相关的性能惩罚。
- 创建一个使用
caching_sha2_password
插件的账户对创建该账户的客户会话没有影响,但服务器必须执行散列轮次以完成操作。 - 对于使用账户的客户连接,服务器必须执行哈希运算,并将结果保存在缓存中。其结果是第一个客户端连接的登录时间较长,但随后的连接则不会。这种行为发生在每次服务器重启之后。
caching_sha2_password_auto_generate_rsa_keys
命令行格式 | --caching-sha2-password-auto-generate-rsa-keys[={OFF|ON}] |
---|---|
系统变量 | caching_sha2_password_auto_generate_rsa_keys |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
服务器使用这个变量来决定是否在数据目录中自动生成 RSA私钥/公钥对 文件,如果它们还不存在的话。
在启动时,如果所有这些条件为真,服务器会在数据目录中自动生成 RSA私钥/公钥对 文件:sha256_password_auto_generate_rsa_keys 或 caching_sha2_password_auto_generate_rsa_keys 系统变量已启用;没有指定RSA选项;数据目录中缺少RSA文件。这些密钥对文件使通过 sha256_password 或 caching_sha2_password 插件认证的账户在未加密的连接上使用RSA进行安全的密码交换;见6.4.1.3节 "SHA-256可插拔认证 "和6.4.1.2节 “缓存SHA-2可插拔认证”。
关于RSA文件自动生成的更多信息,包括文件名称和特征,见第6.3.3.1节,“使用MySQL创建SSL和RSA证书和密钥”
auto_generate_certs 系统变量是相关的,但它控制了使用SSL安全连接所需的SSL证书和密钥文件的自动生成。
caching_sha2_password_private_key_path
命令行格式 | --caching-sha2-password-private-key-path=file_name |
---|---|
系统变量 | caching_sha2_password_private_key_path |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
默认值 | private_key.pem |
这个变量为 caching_sha2_password 认证插件指定RSA私钥文件的路径名称。如果该文件被命名为相对路径,它将被解释为相对于服务器数据目录。该文件必须是PEM格式。
::: tip Important
因为这个文件存储了一个私钥,它的访问模式应该受到限制,以便只有MySQL服务器可以读取它。
:::
关于caching_sha2_password的信息,请参见6.4.1.2节 “缓存SHA-2可插拔认证”。
caching_sha2_password_public_key_path
命令行格式 | --caching-sha2-password-public-key-path=file_name |
---|---|
系统变量 | caching_sha2_password_public_key_path |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
默认值 | public_key.pem |
这个变量为 caching_sha2_password 认证插件指定RSA公钥文件的路径名称。如果该文件被命名为相对路径,它将被解释为相对于服务器数据目录。该文件必须是PEM格式。
关于caching_sha2_password的信息,包括客户如何请求RSA公钥的信息,见第6.4.1.2节,“缓存SHA-2可插拔认证”。
character_set_client
系统变量 | character_set_client |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | utf8mb4 |
从客户端请求语句的字符集。这个变量的会话值是使用客户机连接到服务器时要求的字符集来设置的。许多客户端支持一个 --default-character-set
选项,以便明确指定这个字符集。参见第10.4节,“连接字符集和排序”. 该变量的全局值用于在客户端请求的值未知或不可用,或者服务器被配置为忽略客户端请求的情况下设置会话值。
-
客户端请求一个服务器不知道的字符集。例如,一个支持日语的客户端在连接到一个没有配置sjis支持的服务器时请求sjis。
-
客户端来自比MySQL 4.1更早的MySQL版本,因此没有请求字符集。
-
mysqld是用 --skip-character-set-client-handshake 选项启动的,这导致它忽略客户端字符集配置。这再现了MySQL 4.0的行为,如果你希望在不升级所有客户端的情况下升级服务器,这很有用。
有些字符集不能作为客户端字符集使用。试图使用它们作为 character_set_client
值会产生一个错误。参见不允许的客户端字符集。
character_set_connection
系统变量 | character_set_connection |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | utf8mb4 |
用于没有字符集引入器的字词指定的字符集,以及数字到字符串的转换。关于引入器的信息,请参见第10.3.8节 “字符集引入器”。
character_set_database
系统变量 | character_set_database |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | utf8mb4 |
Footnote | This option is dynamic , but should be set only by server. You should not set this variable manually. |
默认数据库所使用的字符集。每当默认数据库改变时,服务器就会设置这个变量。如果没有默认数据库,该变量的值与 character_set_server 相同。
从MySQL 8.0.14开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
全局的 character_set_database 和 collation_database 系统变量已被废弃;预计它们将在MySQL的未来版本中被删除。
给 session character_set_database 和 collation_database 系统变量赋值已被废弃,赋值会产生警告。预计在未来的MySQL版本中,会话变量将成为只读变量(对它们的赋值将产生错误),在该版本中,仍然可以访问会话变量以确定默认数据库的数据库字符集和排序。
character_set_filesystem
命令行格式 | --character-set-filesystem=name |
---|---|
系统变量 | character_set_filesystem |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | binary |
文件系统字符集。这个变量用于解释指代文件名的字符串字面,例如在 LOAD DATA 和 SELECT … INTO OUTFILE 语句以及 LOAD_FILE() 函数中。这样的文件名在文件打开尝试发生之前,会从 character_set_client 转换为 character_set_filesystem 。默认值是二进制,这意味着不发生转换。对于允许多字节文件名的系统,不同的值可能更合适。例如,如果系统使用UTF-8表示文件名,将 character_set_filesystem 设置为’utf8mb4’。
从MySQL 8.0.14开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
character_set_results
系统变量 | character_set_results |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | utf8mb4 |
用于向客户返回查询结果的字符集。这包括结果数据,如列值,结果元数据,如列名,以及错误信息。
character_set_server
命令行格式 | --character-set-server=name |
---|---|
系统变量 | character_set_server |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | utf8mb4 |
服务器的默认字符集。参见第10.15节,“字符集配置”。如果你设置了这个变量,你还应该设置collation_server来指定字符集的整理方式。
character_set_system
系统变量 | character_set_system |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
默认值 | utf8 |
服务器用于存储标识符的字符集。该值总是utf8。
character_sets_dir
命令行格式 | --character-sets-dir=dir_name |
---|---|
系统变量 | character_sets_dir |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Directory name |
安装字符集的目录。见第10.15节,“字符集配置”。
check_proxy_users
命令行格式 | --check-proxy-users[={OFF|ON}] |
---|---|
系统变量 | check_proxy_users |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
一些认证插件为自己实现了代理用户映射(例如,PAM和Windows认证插件)。其他认证插件默认不支持代理用户。其中,有些可以要求MySQL服务器本身根据授予的代理权限来映射代理用户:mysql_native_password、sha256_password。
如果check_proxy_users系统变量被启用,服务器会对任何提出此类请求的认证插件执行代理用户映射。然而,也可能需要启用特定插件的系统变量来利用服务器代理用户映射支持。
- 对于mysql_native_password插件,启用mysql_native_password_proxy_users。
- 对于 sha256_password 插件,启用 sha256_password_proxy_users。
关于用户代理的信息,见第6.2.18节,“代理用户”。
collation_connection
系统变量 | collation_connection |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
连接字符集的排序。 collation_connection对于字面字符串的比较很重要。对于带有列值的字符串的比较,collation_connection并不重要,因为列有自己的排序,它有更高的排序优先级(见第10.8.4节,“表达式中的排序可操作性”)。
collation_database
系统变量 | collation_database |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | utf8mb4_0900_ai_ci |
Footnote | This option is dynamic , but should be set only by server. You should not set this variable manually. |
默认数据库使用的整理方式。每当默认数据库改变时,服务器就会设置这个变量。如果没有默认数据库,该变量的值与collation_server相同。
As of MySQL 8.0.18 , setting the session value of this system variable is no longer a restricted operation.
从MySQL 8.0.18开始,设置这个系统变量的会话值不再是一个限制性操作。
全局的 character_set_database 和 collation_database 系统变量已被废弃;预计它们将在MySQL的未来版本中被删除。
为session character_set_database和collation_database系统变量赋值已被废弃,赋值会产生一个警告。预计在未来的MySQL版本中,会话变量将成为只读变量(而赋值将产生错误),在该版本中,仍然可以访问会话变量以确定默认数据库的数据库字符集和排序。
collation_server
命令行格式 | --collation-server=name |
---|---|
系统变量 | collation_server |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | utf8mb4_0900_ai_ci |
服务器的默认整理方式。见第10.15节,“字符集配置”。
completion_type
命令行格式 | --completion-type=# |
---|---|
系统变量 | completion_type |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | NO_CHAIN |
Valid Values | NO_CHAIN CHAIN RELEASE 0 1 2 |
交易完成类型。这个变量可以采取下表中所示的数值。该变量可以使用名称值或相应的整数值进行分配。
Value | Description |
---|---|
NO_CHAIN (or 0) | COMMIT和ROLLBACK不受影响。这是默认值。 |
CHAIN (or 1) | COMMIT和ROLLBACK分别等同于COMMIT AND CHAIN和ROLLBACK AND CHAIN。一个新的事务立即开始,其隔离级别与刚刚结束的事务相同)。 |
RELEASE (or 2) | COMMIT和ROLLBACK分别等同于COMMIT RELEASE和ROLLBACK RELEASE。终止事务后,服务器会断开连接)。 |
completion_type 影响以 START TRANSACTION 或 BEGIN开始,以COMMIT或ROLLBACK结束的事务。它不适用于因执行第13.3.3节 "导致隐式提交的语句 "中列出的语句而产生的隐式提交。它也不适用于 XA COMMIT
、XA ROLLBACK
或 autocommit=1.
时。
concurrent_insert
命令行格式 | --concurrent-insert[=value] |
---|---|
系统变量 | concurrent_insert |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | AUTO |
Valid Values | NEVER AUTO ALWAYS 0 1 2 |
如果是AUTO(默认),MySQL允许INSERT和SELECT语句同时运行,用于数据文件中间没有空闲块的MyISAM表。
这个变量可以采取下表中所示的数值。该变量可以使用名称值或相应的整数值进行分配。
Value | Description |
---|---|
NEVER (or 0) | 禁用并发插入 |
AUTO (or 1) | (默认)为没有孔的MyISAM表启用并发插入 |
ALWAYS (or 2) | 启用所有MyISAM表的并发插入,甚至那些有洞的表。对于有洞的表,如果该表被另一个线程使用,则在该表的末端插入新行。否则,MySQL获得一个正常的写锁,并将行插入到洞中。 |
如果你用–skip-new启动mysqld,concurrent_insert被设置为NEVER。
另请参见第8.11.3节“并发插入”。
connect_timeout
命令行格式 | --connect-timeout=# |
---|---|
系统变量 | connect_timeout |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 10 |
最小值 | 2 |
最大值 | 31536000 |
mysqld 服务器在响应 Bad handshake 之前等待 connect 数据包的秒数。默认值是10秒。
如果客户经常遇到形式为失去与MySQL服务器的连接在 'XXX', system error: errno
,增加 connect_timeout 值可能会有帮助。
core_file
系统变量 | core_file |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果服务器意外退出,是否要写一个核心文件。这个变量由 --core-file 选项设置。
create_admin_listener_thread
命令行格式 | --create-admin-listener-thread[={OFF|ON}] |
---|---|
引进 | 8.0.14 |
系统变量 | create_admin_listener_thread |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
是否为管理网络接口的客户连接使用专门的监听线程(见第5.1.12.1节 “连接接口”)。默认情况是关闭;也就是说,主界面上的普通连接的管理线程也处理管理界面的连接。
根据平台类型和工作负荷等因素,你可能会发现这个变量的一个设置比另一个设置产生更好的性能。
如果没有指定admin_address,设置create_admin_listener_thread就没有效果,因为在这种情况下,服务器没有维护管理网络接口。
cte_max_recursion_depth
命令行格式 | --cte-max-recursion-depth=# |
---|---|
系统变量 | cte_max_recursion_depth |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 1000 |
最小值 | 0 |
最大值 | 4294967295 |
公共表表达式(CTE)的最大递归深度。服务器会终止执行任何递归程度超过该变量值的CTE。更多信息,请参阅限制公共表表达式递归。
datadir
命令行格式 | --datadir=dir_name |
---|---|
系统变量 | datadir |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Directory name |
到MySQL服务器数据目录的路径。相对路径是相对于当前目录而言的。如果你希望服务器自动启动(也就是说,在你不能事先知道当前目录的情况下),最好将datadir值指定为绝对路径。
debug
命令行格式 | --debug[=debug_options] |
---|---|
系统变量 | debug |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 (Unix) | d:t:i:o,/tmp/mysqld.trace |
默认值 (Windows) | d:t:i:O,\mysqld.trace |
这个变量表示当前的调试设置。它只适用于有调试支持的服务器。初始值来自于服务器启动时给出的-debug选项的实例值。全局和会话的值可以在运行时设置。
设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置限制性会话变量。参见第5.1.9.1节 “系统变量的权限”。
指定一个以 "+“或”-"开头的值,会使该值与当前值相加或相减。
mysql> SET debug = 'T';
mysql> SELECT @@debug;
+---------+
| @@debug |
+---------+
| T |
+---------+
mysql> SET debug = '+P';
mysql> SELECT @@debug;
+---------+
| @@debug |
+---------+
| P:T |
+---------+
mysql> SET debug = '-P';
mysql> SELECT @@debug;
+---------+
| @@debug |
+---------+
| T |
+---------+
更多信息请见第5.9.4节 “DBUG包”。
debug_sync
系统变量 | debug_sync |
---|---|
作用域 | Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
这个变量是Debug Sync设施的用户接口。使用Debug Sync需要用-DENABLE_DEBUG_SYNC=1 CMake选项配置MySQL(见2.9.7节,“MySQL源配置选项”)。如果Debug Sync没有被编译进去,这个系统变量就不可用。
这个全局变量的值是只读的,表示该设施是否被启用。默认情况下,Debug Sync被禁用,debug_sync的值为OFF。如果服务器以–debug-sync-timeout=N启动,其中N是一个大于0的超时值,则Debug Sync被启用,debug_sync的值为ON–当前信号后面是信号名称。同时,N成为单个同步点的默认超时值。
会话值可以被任何用户读取,其值与全局变量相同。会话值可以被设置为控制同步点。
设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置限制性会话变量。参见第5.1.9.1节 “系统变量的权限”。
关于Debug Sync设施的描述以及如何使用同步点,见MySQL内部。测试同步。
default_authentication_plugin
命令行格式 | --default-authentication-plugin=plugin_name |
---|---|
系统变量 | default_authentication_plugin |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Enumeration |
默认值 | caching_sha2_password |
Valid Values | mysql_native_password``sha256_password``caching_sha2_password |
默认的认证插件。这些值是允许的
- mysql_native_password:使用MySQL本地密码;见6.4.1.1节 “本地可插拔认证”。
- sha256_password: 使用SHA-256密码;见6.4.1.3节 “SHA-256可插拔认证”。
- caching_sha2_password: 使用SHA-256密码;见6.4.1.2节 “缓存SHA-2可插拔认证”。
::: tip Note
在MySQL 8.0中,caching_sha2_password是默认认证插件,而不是mysql_native_password。有关这一变化对服务器操作以及服务器与客户端和连接器的兼容性的影响,请参见caching_sha2_password作为首选认证插件。
:::
default_authentication_plugin 的值会影响服务器操作的这些方面。
- 它决定了服务器为CREATE USER和GRANT语句创建的新账户分配哪个认证插件,这些语句没有明确指定一个认证插件。
- 对于用以下语句创建的账户,服务器将该账户与默认的认证插件相关联,并给该账户分配给定的密码,并按照该插件的要求进行散列。
CREATE USER ... IDENTIFIED BY 'cleartext password';
default_collation_for_utf8mb4
系统变量 | default_collation_for_utf8mb4 |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
Valid Values | utf8mb4_0900_ai_ci utf8mb4_general_ci |
用于复制的内部使用。这个系统变量被设置为utf8mb4字符集的默认排序。该变量的值从源服务器复制到副本,以便副本能够正确处理来自具有不同utf8mb4默认排序的源的数据。该变量主要用于支持从MySQL 5.7或更早的复制源服务器到MySQL 8.0复制服务器的复制,或与MySQL 5.7主节点和一个或多个MySQL 8.0副节点的分组复制。在MySQL 5.7中,utf8mb4的默认排序是utf8mb4_general_ci,但在MySQL 8.0中,utf8mb4_0900_ai_ci。该变量不存在于早于MySQL 8.0的版本中,所以如果副本没有收到该变量的值,它就会假定源是来自较早的版本,并将该值设置为以前的默认排序 utf8mb4_general_ci。
从MySQL 8.0.18开始,设置这个系统变量的会话值不再是一个限制性操作。
在以下语句中使用了默认的utf8mb4整理方式。
-
SHOW COLLATION 和 SHOW CHARACTER SET。
-
CREATE TABLE 和 ALTER TABLE 有一个 CHARACTER SET utf8mb4 子句,但没有 COLLATION 子句,无论是对表的字符集还是对列的字符集。
-
CREATE DATABASE 和 ALTER DATABASE 有一个 CHARACTER SET utf8mb4 子句,没有 COLLATION 子句。
-
任何包含形式为
_utf8mb4'some text'
的字符串字面的语句,没有COLLATE子句。 -
default_password_lifetime
命令行格式 | --default-password-lifetime=# |
---|---|
系统变量 | default_password_lifetime |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值 | 65535 |
这个变量定义了全局自动密码过期策略。default_password_lifetime的默认值是0,它禁止自动密码过期。如果default_password_lifetime的值是一个正整数N,它表示允许的密码寿命;密码必须每N天更换一次。
全局的密码过期策略可以根据需要使用CREATE USER和ALTER USER语句中的密码过期选项来覆盖单个账户。参见第6.2.15节,“密码管理”。
default_storage_engine
命令行格式 | --default-storage-engine=name |
---|---|
系统变量 | default_storage_engine |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | InnoDB |
表的默认存储引擎。参见第16章,替代存储引擎。这个变量只为永久表设置存储引擎。要设置TEMPORARY表的存储引擎,请设置default_tmp_storage_engine系统变量。
要查看哪些存储引擎是可用的和启用的,使用 SHOW ENGINES 语句或查询 INFORMATION_SCHEMA ENGINES 表。
如果你在服务器启动时禁用了默认的存储引擎,你必须将永久表和TEMPORARY表的默认引擎设置为一个不同的引擎,否则服务器就无法启动。
default_table_encryption
命令行格式 | --default-table-encryption[={OFF|ON}] |
---|---|
引进 | 8.0.16 |
系统变量 | default_table_encryption |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Boolean |
默认值 | OFF |
定义了在创建模式和一般表空间时,在没有指定ENCRYPTION子句的情况下,应用于模式和一般表空间的默认加密设置。
default_table_encryption变量只适用于用户创建的模式和一般表空间。它不管理mysql系统表空间的加密。
设置default_table_encryption的运行时值需要SYSTEM_VARIABLES_ADMIN和TABLE_ENCRYPTION_ADMIN权限,或者被废弃的SUPER权限。
default_table_encryption支持SET PERSIST和SET PERSIST_ONLY语法。参见第5.1.9.3节,“持久的系统变量”。
For more information , see Defining an Encryption Default for Schemas and General Tablespaces.
default_tmp_storage_engine
命令行格式 | --default-tmp-storage-engine=name |
---|---|
系统变量 | default_tmp_storage_engine |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Enumeration |
默认值 | InnoDB |
TEMPORARY表(用CREATE TEMPORARY TABLE创建)的默认存储引擎。要设置永久表的存储引擎,请设置default_storage_engine系统变量。也请看关于该变量的可能值的讨论。
如果你在服务器启动时禁用了默认的存储引擎,你必须将永久表和TEMPORARY表的默认引擎设置为一个不同的引擎,否则服务器就无法启动。
default_week_format
命令行格式 | --default-week-format=# |
---|---|
系统变量 | default_week_format |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值 | 7 |
WEEK()函数要使用的默认模式值。参见第12.7节,“日期和时间函数”。
delay_key_write
命令行格式 | --delay-key-write[={OFF|ON|ALL}] |
---|---|
系统变量 | delay_key_write |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | ON |
Valid Values | ON OFF ALL |
这个变量指定了如何使用延迟的键写入。它只适用于MyISAM表。延迟键写入会导致键缓冲区在写入之间不被刷新。参见第16.2.1节,“MyISAM启动选项”。
这个变量可以有以下值之一,以影响对DELAY_KEY_WRITE表选项的处理,可以在CREATE TABLE语句中使用。
Option | Description |
---|---|
OFF | DELAY_KEY_WRITE is ignored. |
ON | MySQL尊重在CREATE TABLE语句中指定的任何DELAY_KEY_WRITE选项。这是默认值。 |
ALL | 所有新打开的表都被当作是在启用DELAY_KEY_WRITE选项的情况下创建的。 |
::: tip Note
如果你把这个变量设置为ALL,当MyISAM表被使用时,你不应该从另一个程序(如另一个MySQL服务器或myisamchk)中使用这些表。这样做会导致索引损坏。
:::
如果为一个表启用了DELAY_KEY_WRITE,那么在每次索引更新时都不会为该表刷新密钥缓冲区,而只是在关闭该表时才刷新。这大大加快了键的写入速度,但是如果你使用这个功能,你应该通过设置myisam_recover_options系统变量来启动服务器,增加对所有MyISAM表的自动检查(例如,myisam_recover_options=‘BACKUP,FORCE’)。参见第5.1.8节 “服务器系统变量”,以及第16.2.1节 “MyISAM启动选项”。
如果你用 --skip-new 启动mysqld,delay_key_write被设置为OFF。
::: tip Warning
如果你用 --external-locking
来启用外部锁定,那么对于使用延迟键写入的表来说,就没有防止索引损坏的保护。
:::
delayed_insert_limit
命令行格式 | --delayed-insert-limit=# |
---|---|
不推荐使用 | Yes |
系统变量 | delayed_insert_limit |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 100 |
最小值 | 1 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
这个系统变量已被废弃(因为不支持DELAYED插入),你应该期待它在未来的版本中被移除。
delayed_insert_timeout
命令行格式 | --delayed-insert-timeout=# |
---|---|
不推荐使用 | Yes |
系统变量 | delayed_insert_timeout |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 300 |
这个系统变量已被废弃(因为不支持DELAYED插入),你应该期待它在未来的版本中被移除。
delayed_queue_size
命令行格式 | --delayed-queue-size=# |
---|---|
不推荐使用 | Yes |
系统变量 | delayed_queue_size |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 1000 |
最小值 | 1 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
这个系统变量已被废弃(因为不支持DELAYED插入),你应该期待它在未来的版本中被移除。
disabled_storage_engines
命令行格式 | --disabled-storage-engines=engine[,engine]... |
---|---|
系统变量 | disabled_storage_engines |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
默认值 | empty string |
这个变量表示哪些存储引擎不能用来创建表或表空间。例如,为了防止创建新的MyISAM或FEDERATED表,在服务器选项文件中用这些行启动服务器。
[mysqld]
disabled_storage_engines="MyISAM,FEDERATED"
默认情况下,disabled_storage_engines是空的(没有引擎被禁用),但是它可以被设置为一个以逗号分隔的列表,包含一个或多个引擎(不区分大小写)。在该值中命名的任何引擎都不能用于用CREATE TABLE或CREATE TABLESPACE创建表或表空间,也不能用于ALTER TABLE … ENGINE或ALTER TABLESPACE … ENGINE来改变现有表或表空间的存储引擎。试图这样做会导致ER_DISABLED_STORAGE_ENGINE错误。
disabled_storage_engine并不限制现有表的其他DDL语句,例如CREATE INDEX, TRUNCATE TABLE, ANALYZE TABLE, DROP TABLE, 或 DROP TABLESPACE。这允许一个平稳的过渡,因此使用禁用引擎的现有表或表空间可以通过ALTER TABLE …等手段迁移到一个允许的引擎。ENGINE permitted_engine。
允许将default_storage_engine或default_tmp_storage_engine系统变量设置为一个被禁用的存储引擎。这可能会导致应用程序行为失常或失败,尽管这在开发环境中可能是一种有用的技术,可以识别使用禁用引擎的应用程序,从而可以修改它们。
disabled_storage_engines 是禁用的,如果服务器在启动时使用了这些选项中的任何一个,则没有效果。–initialize, --initialize-insecure, --skip-grant-tables。
::: tip Note
设置disabled_storage_engines可能导致mysql_upgrade的问题。详见4.4.5节 “mysql_upgrade–检查和升级MySQL表”。
:::
disconnect_on_expired_password
命令行格式 | --disconnect-on-expired-password[={OFF|ON}] |
---|---|
系统变量 | disconnect_on_expired_password |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
这个变量控制服务器如何处理密码过期的客户。
- 如果客户端表示它可以处理过期的密码,那么disconnect_on_expired_password的值就不重要了。服务器允许客户端连接,但将其置于沙盒模式。
- 如果客户端没有表明它可以处理过期的密码,服务器会根据disconnect_on_expired_password的值来处理客户端。
- 如果disconnect_on_expired_password:被启用,服务器会断开客户端的连接。
- 如果disconnect_on_expired_password:被禁用,服务器允许客户端连接,但将其置于沙箱模式。
关于客户端和服务器设置与过期密码处理相关的互动的更多信息,请参阅第6.2.16节,“服务器对过期密码的处理”。
div_precision_increment
命令行格式 | --div-precision-increment=# |
---|---|
系统变量 | div_precision_increment |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 4 |
最小值 | 0 |
最大值 | 30 |
这个变量表示用/运算符进行的除法运算结果的刻度增加的位数。默认值为4,最小值和最大值分别为0和30。下面的例子说明了增加默认值的效果。
mysql> SELECT 1/7;
+--------+
| 1/7 |
+--------+
| 0.1429 |
+--------+
mysql> SET div_precision_increment = 12;
mysql> SELECT 1/7;
+----------------+
| 1/7 |
+----------------+
| 0.142857142857 |
+----------------+
dragnetlog_error_filter_rules
命令行格式 | --dragnet.log-error-filter-rules=value |
---|---|
系统变量 | dragnet.log_error_filter_rules |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | IF prio>=INFORMATION THEN drop. IF EXISTS source_line THEN unset source_line. |
控制 log_filter_dragnet 错误日志过滤组件的操作的过滤规则。如果没有安装 log_filter_dragnet,dragnet.log_error_filter_rules 就不可用。如果 log_filter_dragnet 已安装但未启用,对 dragnet.log_error_filter_rules 的更改没有影响。
默认值的效果类似于log_sink_internal过滤器在设置为log_error_verbosity=2的情况下进行的过滤。
从MySQL 8.0.12开始,可以查询dragnet.Status状态变量以确定对dragnet.log_error_filter_rules的最近一次分配的结果。
在MySQL 8.0.12之前,在运行时对dragnet.log_error_filter_rules的成功赋值会产生一个确认新值的说明。
mysql> SET GLOBAL dragnet.log_error_filter_rules = 'IF prio <> 0 THEN unset prio.';
Query OK , 0 rows affected , 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Note
Code: 4569
Message: filter configuration accepted:
SET @@GLOBAL.dragnet.log_error_filter_rules=
'IF prio!=ERROR THEN unset prio.';
SHOW WARNINGS 显示的值表示规则集被成功解析并编译为内部形式后的 "反编译 "规范表示。从语义上讲,这种典型形式与分配给 dragnet.log_error_filter_rules 的值相同,但分配值和典型值之间可能存在一些差异,如前面的例子所示。
<>
运算符更改为!=
- 0的数字优先级被改为相应的优先级符号ERROR。
- 可选空格被删除。
有关其他信息,请参见第5.4.2.4节 “错误日志过滤的类型”,以及第5.5.3节 “错误日志组件”。
end_markers_in_json
命令行格式 | --end-markers-in-json[={OFF|ON}] |
---|---|
系统变量 | end_markers_in_json |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Boolean |
默认值 | OFF |
优化器的JSON输出是否应添加结束标记。见MySQL内部。end_markers_in_json 系统变量。
eq_range_index_dive_limit
命令行格式 | --eq-range-index-dive-limit=# |
---|---|
系统变量 | eq_range_index_dive_limit |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 200 |
最小值 | 0 |
最大值 | 4294967295 |
这个变量表示在平等比较条件中,当优化器在估计合格行的数量时,应该从使用索引潜入到索引统计中切换到平等范围。它适用于对具有这两种等价形式的表达式的评估,其中优化器使用非唯一索引来查找col_name值。
col_name IN(val1 , ... , valN)
col_name = val1 OR ... OR col_name = valN
在这两种情况下,表达式都包含N个平等范围。优化器可以使用索引潜入或索引统计进行行估计。如果eq_range_index_dive_limit大于0,如果有eq_range_index_dive_limit或更多的相等范围,优化器就会使用现有的索引统计,而不是索引潜入。因此,为了允许对多达N个相等范围使用索引挖掘,将eq_range_index_dive_limit设置为N+1。如果要禁止使用索引统计,并且不管N的多少,总是使用索引潜入,请将eq_range_index_dive_limit设为0。
更多信息,请参见多值比较的等值范围优化。
要更新表的索引统计以获得最佳估计,请使用ANALYZE TABLE。
error_count
最后一条产生信息的语句所导致的错误数量。这个变量是只读的。参见第13.7.7.17节,“SHOW ERRORS语句”。
event_scheduler
命令行格式 | --event-scheduler[=value] |
---|---|
系统变量 | event_scheduler |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | ON |
Valid Values | ON``OFF``DISABLED |
该变量用于启用或禁用、启动或停止事件调度器。可能的状态值是ON、OFF和DISABLED,默认是OFF。关闭事件调度器并不等同于禁用事件调度器,后者需要将状态设置为DISABLED。这个变量及其对事件调度器操作的影响将在第25.4.2节 "事件调度器配置 "中详细讨论。
explicit_defaults_for_timestamp
命令行格式 | --explicit-defaults-for-timestamp[={OFF|ON}] |
---|---|
不推荐使用 | Yes |
系统变量 | explicit_defaults_for_timestamp |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
这个系统变量决定了服务器是否为TIMESTAMP列的默认值和NULL值处理启用某些非标准的行为。默认情况下,explicit_defaults_for_timestamp是启用的,这将禁用这些非标准行为。禁用 explicit_defaults_for_timestamp会导致一个警告。
从MySQL 8.0.18开始,设置这个系统变量的会话值不再是一个限制性操作。
如果explicit_defaults_for_timestamp被禁用,服务器将启用非标准行为,并按如下方式处理TIMESTAMP列。
-
没有明确用NULL属性声明的TIMESTAMP列会自动用NOT NULL属性声明。给这样的列分配一个NULL的值是允许的,并将该列设置为当前的时间戳。例外。从MySQL 8.0.22开始,试图将NULL插入到一个声明为TIMESTAMP NOT NULL的生成列中,会被拒绝,并出现错误。
-
表中的第一个TIMESTAMP列,如果没有明确地用NULL属性或明确的DEFAULT或ON UPDATE属性声明,就会自动用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性声明。
-
在第一个列之后的TIMESTAMP列,如果没有明确地用NULL属性或明确的DEFAULT属性来声明,就会自动声明为DEFAULT ‘0000-00-00 00:00:00’ ("零 "时间戳)。对于插入的行,如果没有为这样的列指定明确的值,那么该列将被分配为’0000-00-00 00:00:00’,并且不会发生警告。
取决于是否启用了严格的SQL模式或NO_ZERO_DATE SQL模式,默认值’0000-00-00 00:00:00’可能是无效的。请注意,TRADITIONAL SQL模式包括严格模式和NO_ZERO_DATE。参见章节5.1.11, “服务器SQL模式”。
刚刚描述的非标准行为已被废弃;预计它们将在未来的MySQL版本中被移除。
如果 explicit_defaults_for_timestamp 被启用,服务器将禁用非标准行为,并按如下方式处理TIMESTAMP列。
-
不可能给TIMESTAMP列分配一个NULL的值来将其设置为当前的时间戳。要分配当前的时间戳,请将该列设置为CURRENT_TIMESTAMP或一个同义词,如NOW()。
-
没有明确地用NOT NULL属性声明的TIMESTAMP列会自动用NULL属性声明,并允许NULL值。给这样的列分配一个NULL的值,会把它设置为NULL,而不是当前的时间戳。
-
用NOT NULL属性声明的TIMESTAMP列不允许NULL值。对于为这样的列指定NULL的插入,如果启用严格的SQL模式,其结果是单行插入的错误,或者在禁用严格的SQL模式的情况下,多行插入的结果是’0000-00-00 00:00:00’ 。在任何情况下,给该列分配一个NULL的值都不会将其设置为当前的时间戳。
-
用NOT NULL属性明确声明的TIMESTAMP列,如果没有明确的DEFAULT属性,将被视为没有默认值。对于插入的行,如果没有为这样的列指定明确的值,其结果取决于SQL模式。如果启用了严格的SQL模式,会发生错误。如果没有启用严格的SQL模式,该列被声明为隐含默认值 “0000-00-00 00:00:00”,并发生警告。这与MySQL处理其他时间类型(如DATETIME)的方式类似。
-
没有TIMESTAMP列被自动声明为带有DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性。这些属性必须被明确指定。
-
一个表中的第一个TIMESTAMP列与后面的TIMESTAMP列的处理方式并无不同。
如果explicit_defaults_for_timestamp在服务器启动时被禁用,这个警告会出现在错误日志中。
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
Please use --explicit_defaults_for_timestamp server option (see
documentation for more details).
正如警告所指出的,要禁用被废弃的非标准行为,在服务器启动时启用 explicit_defaults_for_timestamp 系统变量。
::: tip Note
explicit_defaults_for_timestamp本身已经废弃,因为它的唯一目的是允许控制废弃的TIMESTAMP行为,这些行为将在未来的MySQL版本中被删除。当这些行为被删除时,预计 explicit_defaults_for_timestamp也会被删除。
:::
有关其他信息,请参见第11.2.5节,“TIMESTAMP和DATETIME的自动初始化和更新”。
external_user
系统变量 | external_user |
---|---|
作用域 | Session |
动态 | No |
SET_VAR | No |
类型 | String |
认证过程中使用的外部用户名,由用于认证客户的插件设置。在本地(内置)MySQL认证中,或者如果插件没有设置该值,该变量为NULL。见第6.2.18节,“代理用户”。
flush
命令行格式 | --flush[={OFF|ON}] |
---|---|
系统变量 | flush |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果打开,服务器会在每个SQL语句之后将所有更改冲刷(同步)到磁盘。通常,MySQL仅在每个SQL语句之后将所有更改写入磁盘,并让操作系统处理同步到磁盘的工作。见B.3.3.3节,“如果MySQL不断崩溃该怎么办”。如果你用-flush选项启动mysqld,这个变量被设置为ON。
::: tip Note
如果冲洗被启用,flush_time的值并不重要,对flush_time的改变对冲洗行为没有影响。
:::
flush_time
命令行格式 | --flush-time=# |
---|---|
系统变量 | flush_time |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
如果这个选项被设置为非零值,那么每隔几秒钟就会关闭所有的表,以释放资源并将未刷新的数据同步到磁盘。这个选项最好只在资源最少的系统上使用。
::: tip Note
如果冲洗被启用,flush_time的值并不重要,对flush_time的改变对冲洗行为没有影响。
:::
foreign_key_checks
系统变量 | foreign_key_checks |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Boolean |
默认值 | ON |
如果设置为1(默认),外键约束会被检查。如果设置为0,外键约束被忽略,但有几个例外。当重新创建一个被丢弃的表时,如果表的定义不符合引用该表的外键约束,会返回一个错误。同样地,如果外键定义的形式不正确,ALTER TABLE操作会返回一个错误。更多信息请参见章节13.1.20.5, “外键约束”。
设置这个变量对NDB表的影响与对InnoDB表的影响相同。通常情况下,在正常的操作中,你会让这个设置处于启用状态,以强制执行参考完整性。禁用外键检查对于以不同于父/子关系所要求的顺序重新加载InnoDB表很有用。参见章节13.1.20.5, “FOREIGN KEY约束”。
将外键检查设置为0也会影响到数据定义语句。DROP SCHEMA会删除一个模式,即使它包含有被模式外的表引用的外键的表,而DROP TABLE会删除有被其他表引用的外键的表。
::: tip Note
将外键检查设置为1并不触发对现有表数据的扫描。因此,当外键检查=0时,添加到表中的行不会被验证是否一致。
即使在外键检查=0的情况下,也不允许丢弃外键约束所要求的索引。 在丢弃索引之前必须删除外键约束。
:::
ft_boolean_syntax
命令行格式 | --ft-boolean-syntax=name |
---|---|
系统变量 | ft_boolean_syntax |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | + -><()~*:""&| |
使用IN BOOLEAN模式进行的布尔型全文搜索所支持的运算符列表。参见第12.10.2节,“布尔型全文搜索”。
默认的变量值是 '+ -><()~*:""&|'
。改变该值的规则如下。
- 操作员的功能是由字符串中的位置决定的。
- 替换值必须是14个字符。
- 每个字符必须是ASCII非字母数字字符。
- 第一个或第二个字符必须为空格。
- 除了位置11和12的短语引号运算符外,不允许有任何重复。这两个字符并不要求相同,但它们是唯一可能相同的两个。
- 第10、13和14位(默认设置为:
、
&
和|
)是为将来的扩展保留的。
ft_max_word_len
命令行格式 | --ft-max-word-len=# |
---|---|
系统变量 | ft_max_word_len |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
最小值 | 10 |
在MyISAM FULLTEXT索引中要包括的最大字长。
::: tip Note
在改变这个变量之后,MyISAM表的FULLTEXT索引必须被重建。使用 REPAIR TABLE tbl_name QUICK。
:::
ft_min_word_len
命令行格式 | --ft-min-word-len=# |
---|---|
系统变量 | ft_min_word_len |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 4 |
最小值 | 1 |
包含在MyISAM FULLTEXT索引中的字的最小长度。
::: tip Note
在改变这个变量之后,MyISAM表的FULLTEXT索引必须被重建。使用 REPAIR TABLE tbl_name QUICK。
:::
ft_query_expansion_limit
命令行格式 | --ft-query-expansion-limit=# |
---|---|
系统变量 | ft_query_expansion_limit |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 20 |
最小值 | 0 |
最大值 | 1000 |
使用WITH QUERY EXPANSION进行全文搜索时要使用的顶级匹配数量。
ft_stopword_file
命令行格式 | --ft-stopword-file=file_name |
---|---|
系统变量 | ft_stopword_file |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
在MyISAM表上进行全文搜索时,要从该文件中读取停顿词列表。服务器会在数据目录中寻找这个文件,除非给出一个绝对路径名来指定一个不同的目录。文件中的所有词都会被使用,而注释则不被考虑。默认情况下,使用一个内置的停止词列表(在storage/myisam/ft_static.c文件中定义)。将这个变量设置为空字符串(’’),可以禁用止损词过滤。参见第12.10.4节,“全文停止词”。
::: tip Note
在改变这个变量或停止字文件的内容后,必须重建MyISAM表的全文字索引。使用 REPAIR TABLE tbl_name QUICK。
:::
general_log
命令行格式 | --general-log[={OFF|ON}] |
---|---|
系统变量 | general_log |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
是否启用了一般查询日志。这个值可以是0(或OFF)来禁用日志,或者是1(或ON)来启用日志。日志输出的目的地由log_output系统变量控制;如果该值为NONE,即使启用了日志,也不会写入日志条目。
general_log_file
命令行格式 | --general-log-file=file_name |
---|---|
系统变量 | general_log_file |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | File name |
默认值 | host_name.log |
一般查询日志文件的名称。默认值是host_name.log,但可以用–general_log_file选项改变初始值。
generated_random_password_length
命令行格式 | --generated-random-password-length=# |
---|---|
引进 | 8.0.18 |
系统变量 | generated_random_password_length |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 20 |
最小值 | 5 |
最大值 | 255 |
为CREATE USER、ALTER USER和SET PASSWORD语句生成的随机密码中允许的最大字符数。欲了解更多信息,请参见随机密码生成。
group_concat_max_len
命令行格式 | --group-concat-max-len=# |
---|---|
系统变量 | group_concat_max_len |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 1024 |
最小值 | 4 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
GROUP_CONCAT()函数允许的最大结果长度(字节)。默认为1024。
have_compress
如果服务器上有zlib压缩库,则为YES,如果没有则为NO。如果没有,COMPRESS()和UNCOMPRESS()函数不能使用。
have_dynamic_loading
如果mysqld支持动态加载插件,则为YES,不支持则为NO。如果该值为NO,则不能使用选项,如–plugin-load在服务器启动时加载插件,或使用INSTALL PLUGIN语句在运行时加载插件。
have_geometry
如果服务器支持空间数据类型,则为YES,如果不支持,则为NO。
have_openssl
此变量是have_ssl的同义词。
从MySQL 8.0.26开始,have_openssl已被废弃,并将在未来的MySQL版本中被移除。关于MySQL连接接口的TLS属性信息,请使用tls_channel_status表。
have_profiling
如果存在语句分析功能,则为YES,否则为NO。分析系统变量(如果存在)控制启用还是禁用此功能。请参见第13.7.7.31节“ SHOW PROFILES语句”。
这个变量已被废弃,你应该期待它在未来的MySQL版本中被删除。
have_query_cache
查询缓存在MySQL 8.0.3中被移除。have_query_cache已被废弃,其值始终为NO,并且你应该期待它在未来的MySQL版本中被移除。
have_rtree_keys
如果RTREE索引可用,则为YES,如果没有,则为NO。这些是用于MyISAM表中的空间索引)。
have_ssl
不推荐使用 | 8.0.26 |
---|---|
系统变量 | have_ssl |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
Valid Values | YES (SSL support available)DISABLED (SSL support was compiled into server , but server was not started with necessary options to enable it) |
如果mysqld支持SSL连接,则为YES;如果服务器在编译时支持SSL,但在启动时没有使用适当的连接加密选项,则为DISABLED。更多信息,见2.9.6节 “配置SSL库支持”。
从MySQL 8.0.26开始,have_ssl已被废弃,并将在未来的MySQL版本中移除。关于MySQL连接接口的TLS属性信息,请使用tls_channel_status表。
have_statement_timeout
系统变量 | have_statement_timeout |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
语句执行超时功能是否可用(见语句执行时间优化器提示)。如果该功能使用的后台线程不能被初始化,该值可以是NO。
have_symlink
如果启用了符号链接支持,则为 “是”;如果没有,则为 “否”。这在Unix中是必需的,因为它支持DATA DIRECTORY和INDEX DIRECTORY表选项。如果服务器在启动时使用了 --skip-symbolic-links 选项,该值为DISABLED。
在Windows上,此变量没有任何意义。
::: tip Note
符号链接支持,以及控制它的-符号-链接选项,已被废弃;预计这些将在MySQL的未来版本中被移除。此外,该选项在默认情况下是禁用的。相关的have_symlink系统变量也被废弃了,你应该期待它在未来的MySQL版本中被删除。
:::
histogram_generation_max_mem_size
命令行格式 | --histogram-generation-max-mem-size=# |
---|---|
系统变量 | histogram_generation_max_mem_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 20000000 |
最小值 | 1000000 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
可用于生成直方图统计的最大内存量。参见第8.9.6节 "优化器统计 "和第13.7.3.1节 “ANALYZE TABLE语句”。
设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置限制性会话变量。参见第5.1.9.1节 “系统变量的权限”。
host_cache_size
命令行格式 | --host-cache-size=# |
---|---|
系统变量 | host_cache_size |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | -1 (signifies autosizing; do not assign this literal value) |
最小值 | 0 |
最大值 | 65536 |
MySQL服务器维护一个内存中的主机缓存,其中包含客户主机名称和IP地址信息,用于避免域名系统(DNS)查询;见5.1.12.3节,“DNS查询和主机缓存”。
host_cache_size变量控制主机缓存的大小,以及暴露缓存内容的Performance Schema host_cache表的大小。设置host_cache_size有这些作用。
- 将大小设置为0可以禁用主机缓存。在禁用缓存的情况下,服务器在每次客户端连接时都会执行一次DNS查询。
- 在运行时改变大小会导致一个隐含的主机缓存刷新操作,清除主机缓存,截断host_cache表,并解除任何阻塞的主机。
默认值为128,max_connections的值不超过500时加1,max_connections的值超过500时每递增20加1,上限为2000。
使用 --skip-host-cache 选项类似于将 host_cache_size 系统变量设置为 0,但是 host_cache_size 更加灵活,因为它也可以在运行时用来调整主机缓存的大小、启用和禁用,而不仅仅是在服务器启动时。用 --skip-host-cache 启动服务器并不能阻止运行时对 host_cache_size 值的改变,但是这样的改变没有效果,即使 host_cache_size 被设置得大于0,缓存也不会被重新启用。
hostname
系统变量 | hostname |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
服务器在启动时将此变量设置为服务器主机名。根据RFC 1034,从MySQL 8.0.17开始,最大长度为255个字符,在此之前为60个字符。
identity
这个变量是last_insert_id变量的一个同义词。它的存在是为了与其他数据库系统兼容。你可以用 SELECT @@identity
来读取它的值,并且用 SET identity
来设置它。
init_connect
命令行格式 | --init-connect=name |
---|---|
系统变量 | init_connect |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
一个将由服务器为每个连接的客户执行的字符串。该字符串由一个或多个SQL语句组成,用分号字符分隔。
对于拥有CONNECTION_ADMIN权限(或已废弃的SUPER权限)的用户,init_connect的内容不会被执行。这样做是为了使init_connect的错误值不会阻止所有客户端的连接。例如,该值可能包含一个有语法错误的语句,从而导致客户端连接失败。对于拥有CONNECTION_ADMIN或SUPER权限的用户来说,不执行init_connect可以使他们打开一个连接并修复init_connect值。
对于任何有过期密码的客户端用户,init_connect的执行都会被跳过。这样做是因为这样的用户不能执行任意语句,因此init_connect执行失败,导致客户端无法连接。跳过init_connect的执行,用户就可以连接并更改密码。
服务器丢弃init_connect值中的语句所产生的任何结果集。
information_schema_stats_expiry
命令行格式 | --information-schema-stats-expiry=# |
---|---|
系统变量 | information_schema_stats_expiry |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 86400 |
最小值 | 0 |
最大值 | 31536000 |
一些 INFORMATION_SCHEMA 表包含提供表统计信息的列。
STATISTICS.CARDINALITY
TABLES.AUTO_INCREMENT
TABLES.AVG_ROW_LENGTH
TABLES.CHECKSUM
TABLES.CHECK_TIME
TABLES.CREATE_TIME
TABLES.DATA_FREE
TABLES.DATA_LENGTH
TABLES.INDEX_LENGTH
TABLES.MAX_DATA_LENGTH
TABLES.TABLE_ROWS
TABLES.UPDATE_TIME
这些列代表了动态表元数据;也就是说,随着表内容的变化而变化的信息。
默认情况下,当查询这些列时,MySQL从mysql.index_stats和mysql.table_stats字典表检索这些列的缓存值,这比直接从存储引擎检索统计数据更有效率。如果缓存的统计数据不可用或已经过期,MySQL从存储引擎检索最新的统计数据,并将其缓存在mysql.index_stats和mysql.table_stats字典表中。随后的查询会检索缓存的统计数据,直到缓存的统计数据过期。
information_schema_stats_expiry会话变量定义了缓存的统计数据过期前的时间段。默认是86400秒(24小时),但时间段可以延长到一年。
要在任何时候更新某个表的缓存值,请使用ANALYZE TABLE。
要想总是直接从存储引擎检索最新的统计数据,并绕过缓存值,请将 information_schema_stats_expiry 设置为 0。
在这些情况下,查询统计列不会存储或更新mysql.index_stats和mysql.table_stats字典表中的统计数据。
- 缓存的统计信息尚未过期时。
- 当information_schema_stats_expiry被设置为0时。
- 当服务器以只读、超级只读、事务只读或innodb_read_only模式启动时。
- 当查询还获取性能架构数据时。
在一个多语句事务中,统计缓存可能会在已知事务是否提交之前被更新。因此,缓存可能包含与已知提交状态不一致的信息。这种情况可能发生在自动提交=0或者START TRANSACTION之后。
information_schema_stats_expiry 是一个会话变量,每个客户会话可以定义自己的过期值。从存储引擎检索并由一个会话缓存的统计数据对其他会话是可用的。
相关信息请参见第8.2.3节 “优化INFORMATION_SCHEMA查询”。
init_file
命令行格式 | --init-file=file_name |
---|---|
系统变量 | init_file |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
如果指定,这个变量命名一个包含在启动过程中要读取和执行的SQL语句的文件。在MySQL 8.0.18之前,每条语句必须是单行的,并且不应包括注释。从MySQL 8.0.18开始,文件中语句的可接受格式被扩展到支持这些结构。
delimiter ;
, 将语句分隔符设置为;特点。delimiter $$
, 将语句定界符设置为$$字符序列。- 同一行上的多个语句,由当前定界符分隔。
- 多行语句。
- 从
#
字符到行尾的注释。 - 从
--
序列到行尾的注释。 - 从一个
/*
序列到下面的*/
序列的C风格注释,包括多行的注释。 - 用单引号(’)或双引号(")字符括起来的多行字符串字数。
如果服务器是用-initialize或-initialize-insecure选项启动的,它将在bootstap模式下运行,一些限制文件中允许的语句的功能不可用。这些包括与账户管理(如CREATE USER或GRANT)、复制和全局事务标识符有关的语句。参见第17.1.3节,“用全局事务标识符进行复制”。
从MySQL 8.0.17开始,在服务器启动期间创建的线程被用于创建数据字典、运行升级程序和创建系统表等任务。为了确保稳定和可预测的环境,这些线程在执行时对一些系统变量采用了服务器内置的默认值,如sql_mode、character_set_server、collation_server、complement_type、explicit_defaults_for_timestamp和default_table_encryption。
这些线程也被用来执行启动服务器时用init_file指定的任何文件中的语句,因此这类语句是以服务器对这些系统变量的内置默认值执行的。
innodb_xxx
InnoDB系统变量在15.14节 "InnoDB启动选项和系统变量 "中列出。这些变量控制着InnoDB表的存储、内存使用和I/O模式的许多方面,而且现在InnoDB是默认的存储引擎,所以这些变量尤其重要。
insert_id
在插入AUTO_INCREMENT值时,下面的INSERT或ALTER TABLE语句要使用的值。这主要是与二进制日志一起使用。
interactive_timeout
命令行格式 | --interactive-timeout=# |
---|---|
系统变量 | interactive_timeout |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 28800 |
最小值 | 1 |
服务器在关闭一个交互式连接之前等待活动的秒数。交互式客户端被定义为使用mysql_real_connect()的CLIENT_INTERACTIVE选项的客户端。另见wait_timeout。
internal_tmp_disk_storage_engine
命令行格式 | --internal-tmp-disk-storage-engine=# |
---|---|
Removed | 8.0.16 |
系统变量 | internal_tmp_disk_storage_engine |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | INNODB |
Valid Values | MYISAM INNODB |
::: tip Important
在MySQL 8.0.16及以后的版本中,磁盘上的内部临时表总是使用InnoDB存储引擎;从MySQL 8.0.16开始,这个变量已经被移除,因此不再被支持。
:::
在MySQL 8.0.16之前,这个变量决定了用于磁盘上内部临时表的存储引擎(见磁盘上内部临时表的存储引擎)。允许的值是MYISAM和INNODB(默认)。
internal_tmp_mem_storage_engine
命令行格式 | --internal-tmp-mem-storage-engine=# |
---|---|
系统变量 | internal_tmp_mem_storage_engine |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Enumeration |
默认值 | TempTable |
Valid Values | TempTable MEMORY |
内存中内部临时表的存储引擎(见第8.4.4节,“MySQL中的内部临时表使用”)。允许的值是TempTable(默认)和MEMORY。
优化器使用由internal_tmp_mem_storage_engine定义的存储引擎用于内存内部临时表。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
join_buffer_size
命令行格式 | --join-buffer-size=# |
---|---|
系统变量 | join_buffer_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 262144 |
最小值 | 128 |
Maximum Value (Windows) | 4294967295 |
Maximum Value (Other , 64-bit platforms) | 18446744073709547520 |
Maximum Value (Other , 32-bit platforms) | 4294967295 |
Block Size | 128 |
用于普通索引扫描、范围索引扫描和不使用索引从而执行全表扫描的连接的缓冲区的最小尺寸。通常情况下,获得快速连接的最好方法是添加索引。在不可能添加索引的情况下,增加 join_buffer_size 的值来获得更快的全连接。为两个表之间的每个完全连接分配一个连接缓冲区。对于不使用索引的几个表之间的复杂连接,可能需要多个连接缓冲区。
除非使用块嵌套循环或分批密钥访问算法,否则将缓冲区设置为大于容纳每条匹配行所需的大小并没有什么好处,所有的连接都至少分配了最小的大小,所以在将这个变量设置为大值时要谨慎。最好是保持全局设置较小,只在进行大型连接的会话中把会话设置改为较大的值,或者通过使用SET_VAR优化器提示(见第8.9.3节,“优化器提示”)在每个查询的基础上改变设置。如果全局大小大于大多数使用它的查询所需要的大小,那么内存分配时间会导致性能大幅下降。
当使用Block Nested-Loop时,更大的连接缓冲区可能是有益的,直到第一个表中所有行的所有需要的列都存储在连接缓冲区中。这取决于查询;最佳的大小可能比保存第一张表中的所有行要小。
当使用分批键访问时,join_buffer_size的值定义了每次向存储引擎请求的键的批次有多大。缓冲区越大,对连接操作的右侧表进行的顺序访问就越多,这可以大大改善性能。
默认是256KB。join_buffer_size的最大允许设置是4GB-1。64位平台允许更大的值(64位Windows除外,大值会被截断为4GB-1,并发出警告)。
关于连接缓冲的其他信息,见第8.2.1.7节,“嵌套环路连接算法”。关于分批密钥访问的信息,请参见第8.2.1.12节 “块状嵌套环路和分批密钥访问连接”。
keep_files_on_create
命令行格式 | --keep-files-on-create[={OFF|ON}] |
---|---|
系统变量 | keep_files_on_create |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果在创建MyISAM表时没有DATA DIRECTORY选项,那么.MYD文件将在数据库目录下创建。默认情况下,如果MyISAM在这种情况下发现一个现有的.MYD文件,它会覆盖它。这同样适用于在没有INDEX DIRECTORY选项下创建的表的.MYI文件。要抑制这种行为,请将keep_files_on_create变量设置为ON (1),在这种情况下,MyISAM不会覆盖现有文件,而是返回一个错误。默认值是OFF(0)。
如果使用DATA DIRECTORY或INDEX DIRECTORY选项创建了MyISAM表,并且找到了现有的.MYD或.MYI文件,则MyISAM总是返回错误。它不会覆盖指定目录中的文件。
key_buffer_size
命令行格式 | --key-buffer-size=# |
---|---|
系统变量 | key_buffer_size |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 8388608 |
最小值 | 8 |
最大值(64位 平台) | OS_PER_PROCESS_LIMIT |
最大值(32位 平台) | 4294967295 |
MyISAM表的索引块是有缓冲区的,并由所有线程共享。 key_buffer_size是用于索引块的缓冲区的大小。密钥缓冲区也被称为密钥缓存。
在32位平台上,key_buffer_size的最大允许设置是4GB-1。64位平台允许更大的值。有效的最大尺寸可能更小,这取决于你的可用物理内存和你的操作系统或硬件平台对每个进程的内存限制。这个变量的值表示请求的内存量。在内部,服务器会尽可能多地分配内存,但实际分配的数量可能更少。
你可以增加这个值,以获得对所有读取和多次写入的更好的索引处理;在一个主要功能是使用MyISAM存储引擎运行MySQL的系统上,机器总内存的25%是这个变量的一个可接受值。然而,你应该知道,如果你使这个值过大(例如,超过机器总内存的50%),你的系统可能开始分页,变得极其缓慢。这是因为MySQL依靠操作系统对数据的读取进行文件系统缓存,所以你必须为文件系统缓存留下一些空间。你还应该考虑除了MyISAM之外,你可能使用的任何其他存储引擎的内存要求。
当同时写入许多行时,为了提高速度,可以使用LOCK TABLES。参见第8.2.5.1节,“优化INSERT语句”。
你可以通过发出SHOW STATUS语句并检查Key_read_requests、Key_reads、Key_write_requests和Key_writes状态变量来检查密钥缓冲区的性能。参见第13.7.7节,“SHOW语句”)Key_reads/Key_read_requests比率通常应该小于0.01。如果你主要使用更新和删除,Key_writes/Key_write_requests比率通常接近1,但是如果你倾向于做同时影响很多行的更新,或者你使用DELAY_KEY_WRITE表选项,那么这个比率可能会小很多。
使用key_buffer_size与key_blocks_unused状态变量和缓冲区块大小(可从key_cache_block_size系统变量中获得)相结合,可以确定正在使用的钥匙缓冲区的部分。
1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)
这个值是一个近似值,因为密钥缓冲区的一些空间被内部分配给管理结构。影响这些结构的开销的因素包括块大小和指针大小。随着区块大小的增加,密钥缓冲区中损失的开销百分比趋于减少。较大的区块会导致较少的读取操作(因为每次读取会获得更多的钥匙),但反过来,会增加对未检查的钥匙的读取(如果一个区块中不是所有的钥匙都与查询有关)。
可以创建多个MyISAM密钥缓存。4GB的大小限制适用于每个缓存,而不是作为一个组。参见第8.10.2节,“MyISAM密钥缓存”。
key_cache_age_threshold
命令行格式 | --key-cache-age-threshold=# |
---|---|
系统变量 | key_cache_age_threshold |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 300 |
最小值 | 100 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
Block Size | 100 |
这个值控制缓冲区从关键缓存的热子列表降级到暖子列表。较低的值会使降级发生得更快。最小值是100。默认值是300。参见第8.10.2节 “MyISAM密钥缓存”。
key_cache_block_size
命令行格式 | --key-cache-block-size=# |
---|---|
系统变量 | key_cache_block_size |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 1024 |
最小值 | 512 |
最大值 | 16384 |
Block Size | 512 |
密钥缓存中块的大小,以字节为单位。默认值是1024。参见第8.10.2节,“MyISAM密钥缓存”。
key_cache_division_limit
命令行格式 | --key-cache-division-limit=# |
---|---|
系统变量 | key_cache_division_limit |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 100 |
最小值 | 1 |
最大值 | 100 |
关键缓存缓冲区列表的热子列表和暖子列表的分界点。该值是缓冲区列表中用于温暖子列表的百分比。允许的值范围是1到100。默认值是100。参见第8.10.2节,“MyISAM密钥缓存”。
large_files_support
系统变量 | large_files_support |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
mysqld在编译时是否有大文件支持的选项。
large_pages
命令行格式 | --large-pages[={OFF|ON}] |
---|---|
系统变量 | large_pages |
作用域 | Global |
动态 | No |
SET_VAR | No |
Platform Specific | Linux |
类型 | Boolean |
默认值 | OFF |
是否启用了大页面支持(通过–大页面选项)。见第8.12.3.2节,“启用大页面支持”。
large_page_size
系统变量 | large_page_size |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
如果启用了大页面支持,这将显示内存页面的大小。只有在Linux上支持大内存页;在其他平台上,这个变量的值总是为0。参见第8.12.3.2节,“启用大页面支持”。
last_insert_id
从LAST_INSERT_ID()返回的值。当你在更新表的语句中使用LAST_INSERT_ID()时,这将存储在二进制日志中。设置这个变量并不更新mysql_insert_id()C API函数所返回的值。
lc_messages
命令行格式 | --lc-messages=name |
---|---|
系统变量 | lc_messages |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | en_US |
错误信息所使用的语言环境。默认是en_US。服务器将该参数转换为语言名称,并与lc_messages_dir的值相结合,产生错误信息文件的位置。参见第10.12节,“设置错误信息语言”。
lc_messages_dir
命令行格式 | --lc-messages-dir=dir_name |
---|---|
系统变量 | lc_messages_dir |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Directory name |
错误信息所在的目录。服务器使用该值和lc_messages的值来产生错误信息文件的位置。参见第10.12节,“设置错误信息语言”。
lc_time_names
命令行格式 | --lc-time-names=value |
---|---|
系统变量 | lc_time_names |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
这个变量指定了控制用于显示日和月的名称和缩写的语言的locale。这个变量会影响DATE_FORMAT(), DAYNAME()和MONTHNAME()函数的输出。地区名称是POSIX风格的值,如’ja_JP’或’pt_BR’。默认值是’en_US’,与你的系统的locale设置无关。更多信息,请参见第10.16节 “MySQL服务器地域支持”。
license
系统变量 | license |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
默认值 | GPL |
服务器拥有的许可证类型。
local_infile
命令行格式 | --local-infile[={OFF|ON}] |
---|---|
系统变量 | local_infile |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
这个变量控制服务器端对LOAD DATA语句的LOCAL能力。根据local_infile的设置,服务器会拒绝或允许在客户端启用LOCAL的客户端加载本地数据。
要明确地使服务器拒绝或允许LOAD DATA LOCAL语句(不管客户程序和库在构建时或运行时是如何配置的),启动mysqld时分别禁用或启用local_infile。 local_infile也可以在运行时设置。更多信息,见第6.1.6节,“LOAD DATA LOCAL的安全考虑”。
lock_wait_timeout
命令行格式 | --lock-wait-timeout=# |
---|---|
系统变量 | lock_wait_timeout |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 31536000 |
最小值 | 1 |
最大值 | 31536000 |
这个变量指定了尝试获取元数据锁的超时时间,单位是秒。允许的值范围是1到31536000(1年)。默认值是31536000。
这个超时适用于所有使用元数据锁的语句。这些包括对表、视图、存储过程和存储函数的DML和DDL操作,以及LOCK TABLES、FLUSH TABLES WITH READ LOCK,和HANDLER语句。
该超时不适用于对mysql数据库中的系统表的隐式访问,例如由GRANT或REVOKE语句或表记录语句修改的授予表。超时确实适用于直接访问系统表,例如用SELECT或UPDATE。
该超时值分别适用于每个元数据锁尝试。一个给定的语句可能需要一个以上的锁,所以在报告超时错误之前,语句阻塞的时间有可能超过lock_wait_timeout值。当锁超时发生时,会报告ER_LOCK_WAIT_TIMEOUT。
lock_wait_timeout也定义了LOCK INSTANCE FOR BACKUP语句在放弃之前等待一个锁的时间量。
locked_in_memory
系统变量 | locked_in_memory |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
mysqld是否通过–memlock锁定在内存中。
log_error
命令行格式 | --log-error[=file_name] |
---|---|
系统变量 | log_error |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
默认的错误日志目的地。如果目的地是控制台,其值是stderr。否则,目的地是一个文件,log_error值是文件名。参见第5.4.2节,“错误日志”。
log_error_services
命令行格式 | --log-error-services=value |
---|---|
系统变量 | log_error_services |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | log_filter_internal; log_sink_internal |
启用错误记录的组件。该变量可以包含一个有0、1或许多元素的列表。在后一种情况下,元素可以用分号或(从MySQL 8.0.12开始)逗号来分隔,后面可选择用空格。一个给定的设置不能同时使用分号和逗号分隔符。组件的顺序很重要,因为服务器按照列出的顺序执行组件。任何在log_error_services值中命名的可加载(非内置)的组件必须首先用INSTALL COMPONENT安装。更多信息,请参阅第5.4.2.1节,“错误日志配置”。
log_error_suppression_list
命令行格式 | --log-error-suppression-list=value |
---|---|
引进 | 8.0.13 |
系统变量 | log_error_suppression_list |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | empty string |
log_error_suppression_list系统变量适用于用于错误日志的事件,并指定哪些事件在发生时优先级为WARNING或INFORMATION时要被抑制。例如,如果一个特定类型的警告被认为是错误日志中不受欢迎的 “噪音”,因为它经常发生但不感兴趣,它可以被抑制。这个变量影响由log_filter_internal错误日志过滤组件执行的过滤,该组件默认是启用的(见5.5.3节,“错误日志组件”)。如果log_filter_internal被禁用,log_error_suppression_list就没有作用。
log_error_suppression_list值可以是空字符串,表示没有抑制,或者是一个或多个逗号分隔的值的列表,表示要抑制的错误代码。错误代码可以以符号或数字形式指定。数字代码可以用或不用MY-前缀来指定。数字部分的前导零并不重要。允许的代码格式的例子。
ER_SERVER_SHUTDOWN_COMPLETE
MY-000031
000031
MY-31
31
为了可读性和可移植性,符号值比数字值更可取。关于允许的错误符号和数字的信息,见MySQL 8.0错误信息参考。
log_error_suppression_list的效果与log_error_verbosity的效果相结合。有关其他信息,请参见第5.4.2.5节,“基于优先级的错误日志过滤(log_filter_internal)”。
log_error_verbosity
命令行格式 | --log-error-verbosity=# |
---|---|
系统变量 | log_error_verbosity |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 2 |
最小值 | 1 |
最大值 | 3 |
log_error_verbosity系统变量指定了处理用于错误日志的事件的粗略程度。这个变量影响由log_filter_internal错误日志过滤组件执行的过滤,该组件默认是启用的(见第5.5.3节,“错误日志组件”)。如果log_filter_internal被禁用,log_error_verbosity没有影响。
拟用于错误日志的事件的优先级为ERROR、WARNING或INFORMATION。 log_error_verbosity根据写入日志的消息的优先级来控制粗略程度,如下表所示。
log_error_verbosity Value | Permitted Message Priorities |
---|---|
1 | ERROR |
2 | ERROR , WARNING |
3 | ERROR , WARNING , INFORMATION |
还有一个优先级是SYSTEM。无论log_error_verbosity值如何,关于非错误情况的系统消息都会被打印到错误日志中。这些信息包括启动和关机信息,以及一些对设置的重大改变。
log_error_verbosity的效果与log_error_suppression_list的效果相结合。有关其他信息,请参见第5.4.2.5节,“基于优先级的错误日志过滤(log_filter_internal)”。
log_output
命令行格式 | --log-output=name |
---|---|
系统变量 | log_output |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Set |
默认值 | FILE |
Valid Values | TABLE FILE NONE |
一般查询日志和慢速查询日志输出的目的地。该值是一个列表,从TABLE、FILE和NONE中选择一个或多个逗号分隔的词。TABLE选择记录到mysql系统模式中的 general_log 和 slow_log表。FILE选择对日志文件的日志记录。NONE禁用日志记录。如果NONE出现在值中,它优先于任何其他出现的词。TABLE和FILE可以同时给出,以选择两个日志输出目的地。
这个变量选择了日志输出的目的地,但并没有启用日志输出。要做到这一点,请启用 general_log 和 slow_query_log 系统变量。对于FILE日志, general_log_file 和 slow_query_log_file 系统变量决定了日志文件的位置。更多信息,请参阅第5.4.1节,“选择一般查询日志和慢速查询日志的输出目的地”。
log_queries_not_using_indexes
命令行格式 | --log-queries-not-using-indexes[={OFF|ON}] |
---|---|
系统变量 | log_queries_not_using_indexes |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果你在启用慢速查询日志的情况下启用这个变量,那么会记录那些预计会检索到所有行的查询。参见章节5.4.5, “慢速查询日志”。这个选项并不一定意味着不使用索引。例如,一个使用全索引扫描的查询使用了一个索引,但是会被记录下来,因为索引不会限制行的数量。
log_raw
命令行格式 | --log-raw[={OFF|ON}] |
---|---|
系统变量(≥ 8.0.19) | log_raw |
作用域(≥ 8.0.19) | Global |
动态(≥ 8.0.19) | Yes |
SET_VAR (≥ 8.0.19) | No |
类型 | Boolean |
默认值 | OFF |
log_raw系统变量最初被设置为–log-raw选项的值。更多信息请参见该选项的描述。该系统变量也可以在运行时设置,以改变密码屏蔽行为。
log_slow_admin_statements
命令行格式 | --log-slow-admin-statements[={OFF|ON}] |
---|---|
系统变量 | log_slow_admin_statements |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
在写到慢速查询日志的语句中包括慢速管理语句。管理语句包括ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, 和 REPAIR TABLE。
log_slow_extra
命令行格式 | --log-slow-extra[={OFF|ON}] |
---|---|
引进 | 8.0.14 |
系统变量 | log_slow_extra |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果启用了慢速查询日志,并且输出目标包括FILE,服务器会在日志文件行中写入额外的字段,提供关于慢速语句的信息。参见章节5.4.5, “慢速查询日志”。TABLE输出不受影响。
log_syslog
命令行格式 | --log-syslog[={OFF|ON}] |
---|---|
不推荐使用 | Yes (removed in 8.0.13) |
系统变量 | log_syslog |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | ON (when error logging to system log is enabled) |
在MySQL 8.0之前,这个变量控制是否向系统日志(Windows上的Event Log,Unix和类Unix系统上的syslog)执行错误记录。
在MySQL 8.0中,log_sink_syseventlog日志组件实现了对系统日志的错误记录(见第5.4.2.8节,“对系统日志的错误记录”),因此可以通过将该组件添加到log_error_services系统变量来启用这种类型的日志记录。 log_syslog被删除。(在MySQL 8.0.13之前,log_syslog存在,但已被废弃,没有作用)。
log_syslog_facility
命令行格式 | --log-syslog-facility=value |
---|---|
Removed | 8.0.13 |
系统变量 | log_syslog_facility |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | daemon |
这个变量在MySQL 8.0.13中被删除,由syseventlog.facility取代。
log_syslog_include_pid
命令行格式 | --log-syslog-include-pid[={OFF|ON}] |
---|---|
Removed | 8.0.13 |
系统变量 | log_syslog_include_pid |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
这个变量在MySQL 8.0.13中被删除,由syseventlog.include_pid取代。
log_syslog_tag
命令行格式 | --log-syslog-tag=tag |
---|---|
Removed | 8.0.13 |
系统变量 | log_syslog_tag |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | empty string |
这个变量在MySQL 8.0.13中被删除,由syseventlog.tag取代。
log_timestamps
命令行格式 | --log-timestamps=# |
---|---|
系统变量 | log_timestamps |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | UTC |
Valid Values | UTC``SYSTEM |
这个变量控制写入错误日志的消息中的时间戳,以及写入文件的一般查询日志和慢速查询日志消息的时区。它不影响写入表(mysql.general_log, mysql.slow_log)的一般查询日志和慢速查询日志消息的时区。从这些表中检索的行可以用CONVERT_TZ()或通过设置session time_zone系统变量从本地系统时区转换到任何需要的时区。
允许的log_timestamps值是UTC(默认)和SYSTEM(本地系统时区)。
时间戳使用ISO 8601 / RFC 3339格式书写。YYYY-MM-DDThh:mm:ss.uuuuu加上一个表示祖鲁时间(UTC)或±hh:mm(与UTC的偏移)的尾部值Z。
log_throttle_queries_not_using_indexes
命令行格式 | --log-throttle-queries-not-using-indexes=# |
---|---|
系统变量 | log_throttle_queries_not_using_indexes |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
如果log_queries_not_using_indexes被启用,log_throttle_queries_not_using_indexes变量会限制每分钟可以写入慢速查询日志的这类查询的数量。值为0(默认值)意味着 “无限制”。更多信息,请参见第5.4.5节,“慢速查询日志”。
long_query_time
命令行格式 | --long-query-time=# |
---|---|
系统变量 | long_query_time |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Numeric |
默认值 | 10 |
最小值 | 0 |
如果一个查询的时间超过了这个秒数,服务器会增加Slow_queries状态变量。如果慢速查询日志被启用,查询会被记录到慢速查询日志文件中。这个值是以实时测量的,而不是CPU时间,所以在轻度负载的系统上低于阈值的查询可能在重度负载的系统上高于阈值。long_query_time的最小值和默认值分别为0和10。该值可以被指定为微秒的分辨率。参见第5.4.5节,“慢速查询日志”。
这个变量的值越小,就会有更多的语句被认为是长期运行的,结果就是慢速查询日志需要更多空间。对于非常小的值(小于一秒),日志可能会在很短的时间内变得相当大。增加被认为是长期运行的语句数量也可能导致MySQL企业监控器中 "长期运行进程数量过多 "警报的误报,特别是在启用组复制的情况下。由于这些原因,应该只在测试环境中使用非常小的值,或者,在生产环境中,只在短时间内使用。
low_priority_updates
命令行格式 | --low-priority-updates[={OFF|ON}] |
---|---|
系统变量 | low_priority_updates |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果设置为1,所有的INSERT、UPDATE、DELETE和LOCK TABLE WRITE语句都会等待,直到受影响的表上没有未决的SELECT或LOCK TABLE READ。使用{INSERT | REPLACE | DELETE | UPDATE}也可以获得同样的效果。LOW_PRIORITY … 来降低一个查询的优先级。这个变量只影响那些只使用表级锁的存储引擎(比如MyISAM、MEMORY和MERGE)。参见第8.11.2节 “表锁定问题”。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
lower_case_file_system
系统变量 | lower_case_file_system |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
这个变量描述了数据目录所在的文件系统上的文件名的大小写敏感性。OFF表示文件名对大小写敏感,ON表示文件名对大小写不敏感。这个变量是只读的,因为它反映了一个文件系统的属性,设置它对文件系统没有影响。
lower_case_table_names
命令行格式 | --lower-case-table-names[=#] |
---|---|
系统变量 | lower_case_table_names |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值 | 2 |
如果设置为0,表名将按照指定的方式存储,并且比较是区分大小写的。如果设置为1,表名在磁盘上以小写存储,比较不区分大小写。如果设置为2,表名将按照给定的方式存储,但是用小写字母进行比较。这个选项也适用于数据库名称和表的别名。有关其他细节,请参见第9.2.3节,“标识符的大小写敏感性”。
在Windows上,默认值是1;在macOS上,默认值是2;在Linux上,不支持2的值;服务器会强制将该值改为0。
如果你在数据目录驻留在不区分大小写的文件系统(如Windows或macOS)上运行MySQL,你不应该将 lower_case_table_names设为0。这是一个不支持的组合,在运行INSERT INTO … 时可能会导致挂起的情况。SELECT … FROM tbl_name操作时,如果tbl_name字母大小写错误,就会导致挂起。在MyISAM中,使用不同的字母大小写访问表名可能导致索引损坏。
如果你试图在不区分大小写的文件系统上以–lower_case_table_names=0启动服务器,将打印出一条错误信息并退出服务器。
如果你使用InnoDB表,你应该在所有平台上将这个变量设置为1,以强制将名字转换为小写。
这个变量的设置会影响复制过滤选项在大小写敏感性方面的行为。更多信息,请参阅第17.2.5节,“服务器如何评估复制过滤规则”。
禁止以不同于服务器初始化时的设置的 lower_case_table_names 设置来启动服务器。这个限制是必要的,因为各种数据字典表字段使用的排序是由服务器初始化时定义的设置决定的,用不同的设置重启服务器会在标识符的排序和比较方面引入不一致的问题。
因此,有必要在初始化服务器之前将 lower_case_table_names 配置为所需的设置。在大多数情况下,这需要在第一次启动MySQL服务器之前,在MySQL选项文件中配置 lower_case_table_names。然而,对于 Debian 和 Ubuntu 上的 APT 安装,服务器是为你初始化的,没有机会事先在选项文件中配置这个设置。因此,你必须在使用 APT 安装 MySQL 之前使用 debconf-set-selection 工具来启用 lower_case_table_names。要做到这一点,请在使用APT安装MySQL之前运行这个命令。
shell> sudo debconf-set-selections <<< "mysql-server mysql-server/lowercase-table-names select Enabled
::: tip Note
在MySQL 8.0.17中增加了使用debconf-set-selections启用lower_case_table_names的能力。启用 lower_case_table_names 会将该值设为 1。
:::
mandatory_roles
命令行格式 | --mandatory-roles=value |
---|---|
系统变量 | mandatory_roles |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | empty string |
服务器应将其视为强制性的角色。实际上,这些角色会自动授予每个用户,尽管设置mandatory_roles实际上并不改变任何用户账户,而且授予的角色在mysql.role_edges系统表中不可见。
变量值是一个以逗号分隔的角色名称列表。例子。
SET PERSIST mandatory_roles = '`role1`@`%`,`role2`,role3,role4@localhost';
设置 mandatory_roles 的运行值需要 ROLE_ADMIN 权限,此外,设置全局系统变量运行值通常需要 SYSTEM_VARIABLES_ADMIN 权限(或已废弃的 SUPER 权限)。
mandatory_roles值是一个字符串,所以用户名和主机名,如果有引号,必须以允许引号的方式写在引号字符串内。
角色名称由用户部分和主机部分组成,格式为user_name@host_name。如果省略了主机部分,则默认为%。有关其他信息,请参见第6.2.5节,“指定角色名称”。
mandatory_roles值中命名的角色不能用REVOKE撤销,也不能用DROP ROLE或DROP USER删除。
为了防止会话被默认为系统会话,拥有SYSTEM_USER权限的角色不能被列在mandatory_roles系统变量的值中。
- 如果mandatory_roles在启动时被分配了一个具有SYSTEM_USER权限的角色,服务器会向错误日志写一条信息并退出。
- 如果 mandatory_roles 在运行时被分配了一个具有 SYSTEM_USER 权限的角色,会发生错误,并且 mandatory_roles 的值保持不变。
强制性角色,像明确授予的角色一样,在激活之前不会生效(参见激活角色)。在登录时,如果启用了 activate_all_roles_on_login 系统变量,角色激活将发生在所有被授予的角色上;否则,将发生在被设置为默认角色的角色上。在运行时,SET ROLE会激活角色。
在分配给mandatory_roles时不存在但后来创建的角色可能需要特殊处理才能被认为是强制性的。详情请见定义强制性角色。
根据第13.7.7.21节 "SHOW GRANTS语句 "中描述的规则,SHOW GRANTS显示强制性角色。
max_allowed_packet
命令行格式 | --max-allowed-packet=# |
---|---|
系统变量 | max_allowed_packet |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 67108864 |
最小值 | 1024 |
最大值 | 1073741824 |
Block Size | 1024 |
一个数据包或任何生成的/中间的字符串,或由mysql_stmt_send_long_data() C API函数发送的任何参数的最大尺寸。默认为64MB。
数据包信息缓冲区被初始化为net_buffer_length字节,但在需要时可以增长到max_allowed_packet字节。这个值默认是小的,以捕捉大的(可能是不正确的)数据包。
如果你使用大型BLOB列或长字符串,你必须增加这个值。它应该和你想使用的最大BLOB一样大。max_allowed_packet的协议限制是1GB。这个值应该是1024的倍数;非倍数会被四舍五入到最近的倍数。
当你通过改变max_allowed_packet变量的值来改变消息缓冲区的大小时,如果你的客户端程序允许,你也应该改变客户端的缓冲区大小。客户端库内置的默认max_allowed_packet值是1GB,但个别客户端程序可能会覆盖这个值。例如,mysql和mysqldump的默认值分别为16MB和24MB。它们也使你能够通过在命令行或选项文件中设置max_allowed_packet来改变客户端的值。
这个变量的会话值是只读的。客户端最多可以接收与会话值一样多的字节。然而,服务器不会向客户端发送超过当前全局最大允许包值的字节数。如果全局值在客户端连接后被改变,全局值可能小于会话值)。
max_connect_errors
命令行格式 | --max-connect-errors=# |
---|---|
系统变量 | max_connect_errors |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 100 |
最小值 | 1 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
在max_connect_errors之后,来自一个主机的连续连接请求被中断而没有成功连接,服务器会阻止该主机的进一步连接。如果在之前的连接被中断后,在少于max_connect_errors的尝试中成功建立了一个来自主机的连接,那么该主机的错误计数将被清除为零。要解除对主机的封锁,请刷新主机缓存;见刷新主机缓存。
max_connections
命令行格式 | --max-connections=# |
---|---|
系统变量 | max_connections |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 151 |
最小值 | 1 |
最大值 | 100000 |
允许同时进行的客户连接的最大数量。更多信息,见第5.1.12.1节 “连接接口”。
max_delayed_threads
命令行格式 | --max-delayed-threads=# |
---|---|
不推荐使用 | Yes |
系统变量 | max_delayed_threads |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 20 |
最小值 | 0 |
最大值 | 16384 |
这个系统变量已被废弃(因为不支持DELAYED插入),并将在未来的MySQL版本中删除。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
max_digest_length
命令行格式 | --max-digest-length=# |
---|---|
系统变量 | max_digest_length |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 1024 |
最小值 | 0 |
最大值 | 1048576 |
每个会话为计算规范化语句摘要保留的最大内存字节数。一旦在文摘计算过程中使用了这一数量的空间,就会发生截断:不再从解析的语句中收集或计算其文摘值。仅仅在解析了这么多字节的标记之后,不同的语句会产生相同的规范化语句摘要,如果进行比较或汇总摘要统计,会被认为是相同的。
::: tip Warning
将max_digest_length设置为零会禁用摘要生产,这也会禁用需要摘要的服务器功能,如MySQL企业防火墙。
:::
减少max_digest_length的值可以减少内存的使用,但是会导致更多语句的摘要值变得无法区分,如果它们只在结尾处不同的话。增加该值可以区分更长的语句,但会增加内存的使用,特别是对于涉及大量同步会话的工作负载(服务器为每个会话分配max_digest_length字节)。
解析器使用这个系统变量作为它所计算的规范化语句摘要的最大长度限制。Performance Schema如果跟踪语句摘要,会使用performance_schema_max_digest_length.系统变量作为它所存储的摘要最大长度的限制,制作一份摘要值的副本。因此,如果performance_schema_max_digest_length小于max_digest_length,存储在Performance Schema中的摘要值会相对于原始摘要值进行截断。
关于语句摘要的更多信息,请参见第27.10节,“性能模式语句摘要和取样”。
max_error_count
命令行格式 | --max-error-count=# |
---|---|
系统变量 | max_error_count |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 1024 |
最小值 | 0 |
最大值 | 65535 |
要存储的错误、警告和信息的最大数量,以便由SHOW ERRORS和SHOW WARNINGS语句显示。这与诊断区的条件区数量相同,因此也是可以通过GET DIAGNOSTICS检查的条件数量。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
max_execution_time
命令行格式 | --max-execution-time=# |
---|---|
系统变量 | max_execution_time |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 0 |
SELECT语句的执行超时,单位是毫秒。如果该值为0,则不启用超时。
max_execution_time适用于以下情况:
- 全局的max_execution_time值为新连接的会话值提供默认值。会话值适用于在会话中执行的SELECT执行,其中不包括MAX_EXECUTION_TIME(N)优化器提示或N为0。
- max_execution_time适用于只读SELECT语句。非只读的语句是那些调用存储函数修改数据的副作用的语句。
- 对于存储程序中的SELECT语句,max_execution_time被忽略。
max_heap_table_size
命令行格式 | --max-heap-table-size=# |
---|---|
系统变量 | max_heap_table_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 16777216 |
最小值 | 16384 |
最大值(64位 平台) | 18446744073709547520 |
最大值(32位 平台) | 4294967295 |
Block Size | 1024 |
这个变量设置了允许用户创建的MEMORY表增长的最大尺寸。这个变量的值被用来计算MEMORY表的MAX_ROWS值。设置这个变量对任何现有的MEMORY表没有影响,除非用CREATE TABLE这样的语句重新创建表,或者用ALTER TABLE或TRUNCATE TABLE改变表。服务器重启也会将现有MEMORY表的最大尺寸设置为全局的max_heap_table_size值。
这个变量也与tmp_table_size一起使用,以限制内部内存表的大小。见第8.4.4节,“MySQL中的内部临时表的使用”。
max_heap_table_size没有被复制。更多信息请参见第17.5.1.21节 “复制和MEMORY表”,以及第17.5.1.39节 “复制和变量”。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
max_insert_delayed_threads
不推荐使用 | Yes |
---|---|
系统变量 | max_insert_delayed_threads |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
这个变量是max_delayed_threads的一个同义词。与max_delayed_threads一样,它已被废弃(因为不支持DELAYED插入),并将在未来的MySQL版本中被删除。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
max_join_size
命令行格式 | --max-join-size=# |
---|---|
系统变量 | max_join_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 18446744073709551615 |
最小值 | 1 |
最大值 | 18446744073709551615 |
不允许那些可能需要检查超过max_join_size行(对于单表语句)或行组合(对于多表语句)的语句,或者可能会做超过max_join_size磁盘搜索的语句。通过设置这个值,你可以捕捉到键没有被正确使用的语句,这可能会花费很长的时间。如果你的用户倾向于执行缺乏WHERE子句的连接,需要很长的时间,或者返回数以百万计的行,那么就设置这个值。更多信息,请参阅使用安全更新模式(-saf-updates)。
将这个变量设置为DEFAULT以外的值,会将sql_big_selects的值重置为0。如果你再次设置sql_big_selects的值,那么max_join_size变量将被忽略。
max_length_for_sort_data
命令行格式 | --max-length-for-sort-data=# |
---|---|
不推荐使用 | 8.0.20 |
系统变量 | max_length_for_sort_data |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 4096 |
最小值 | 4 |
最大值 | 8388608 |
从MySQL 8.0.20开始,这个变量已被废弃,因为优化器的变化使它变得过时,没有任何作用。以前,它作为索引值大小的截止点,决定使用哪种文件排序算法。见第8.2.1.16节,“ORDER BY优化”。
max_points_in_geometry
命令行格式 | --max-points-in-geometry=# |
---|---|
系统变量 | max_points_in_geometry |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 65536 |
最小值 | 3 |
最大值 | 1048576 |
ST_Buffer_Strategy()函数的point_per_circle参数的最大值。
max_prepared_stmt_count
命令行格式 | --max-prepared-stmt-count=# |
---|---|
系统变量 | max_prepared_stmt_count |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 16382 |
最小值 | 0 |
Maximum Value (≥ 8.0.18) | 4194304 |
Maximum Value (≤ 8.0.17) | 1048576 |
这个变量限制了服务器中准备好的语句的总数。它可以用在有可能发生拒绝服务攻击的环境中,这种攻击是通过准备大量的语句使服务器的内存耗尽。如果该值被设置为低于当前准备好的语句数量,现有的语句不受影响,可以被使用,但是在当前数量下降到限制值以下之前,不能准备新的语句。将该值设置为0,可以禁用准备好的语句。
max_seeks_for_key
命令行格式 | --max-seeks-for-key=# |
---|---|
系统变量 | max_seeks_for_key |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 (Windows) | 4294967295 |
默认值 (Other , 64-bit platforms) | 18446744073709551615 |
默认值 (Other , 32-bit platforms) | 4294967295 |
最小值 | 1 |
Maximum Value (Windows) | 4294967295 |
Maximum Value (Other , 64-bit platforms) | 18446744073709551615 |
Maximum Value (Other , 32-bit platforms) | 4294967295 |
在根据一个键查找记录时,限制假定的最大查找次数。MySQL优化器假定,在通过扫描索引搜索表中的匹配行时,无论索引的实际大小,都不需要超过这个数量的键寻求(见第13.7.7.22节,“SHOW INDEX语句”)。通过将其设置为一个低值(例如,100),你可以迫使MySQL倾向于索引而不是表扫描。
max_sort_length
命令行格式 | --max-sort-length=# |
---|---|
系统变量 | max_sort_length |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 1024 |
最小值 | 4 |
最大值 | 8388608 |
在对数据值进行排序时要使用的字节数。服务器只使用每个值的第一个max_sort_length字节,而忽略其他字节。因此,在GROUP BY、ORDER BY和DISTINCT操作中,仅在第一个max_sort_length字节之后不同的值被比较为相等。
增加max_sort_length的值可能需要同时增加sort_buffer_size的值。详见第8.2.1.16节,“ORDER BY优化”。
max_sp_recursion_depth
命令行格式 | --max-sp-recursion-depth[=#] |
---|---|
系统变量 | max_sp_recursion_depth |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最大值 | 255 |
任何给定的存储过程可以被递归调用的次数。这个选项的默认值是0,它完全禁止存储过程的递归。最大值是255。
存储过程递归增加了对线程栈空间的需求。如果你增加了max_sp_recursion_depth的值,可能有必要在服务器启动时通过增加thread_stack的值来增加线程栈的大小。
max_user_connections
命令行格式 | --max-user-connections=# |
---|---|
系统变量 | max_user_connections |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值 | 4294967295 |
允许任何给定的MySQL用户账户同时连接的最大数量。值为0(默认)意味着 “无限制”。
这个变量有一个全局值,可以在服务器启动或运行时设置。它还有一个只读的会话值,表示适用于与当前会话相关的帐户的有效同时连接限制。会话值的初始化过程如下。
- 如果用户账户有一个非零的MAX_USER_CONNECTIONS资源限制,那么会话的max_user_connections值将被设置为该限制。
- 否则,会话的max_user_connections值被设置为全局值。
帐户资源限制是使用CREATE USER或ALTER USER语句指定的。参见第6.2.20节,“设置账户资源限制”。
max_write_lock_count
命令行格式 | --max-write-lock-count=# |
---|---|
系统变量 | max_write_lock_count |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 (Windows) | 4294967295 |
默认值 (Other , 64-bit platforms) | 18446744073709551615 |
默认值 (Other , 32-bit platforms) | 4294967295 |
最小值 | 1 |
Maximum Value (Windows) | 4294967295 |
Maximum Value (Other , 64-bit platforms) | 18446744073709551615 |
Maximum Value (Other , 32-bit platforms) | 4294967295 |
在这么多的写锁之后,允许在这之间处理一些待处理的读锁请求。写锁请求比读锁请求有更高的优先权。然而,如果max_write_lock_count被设置为某个低值(例如,10),如果读锁请求已经被传递给10个写锁请求,那么读锁请求可能会优先于待处理的写锁请求。通常这种行为不会发生,因为max_write_lock_count默认有一个非常大的值。
mecab_rc_file
命令行格式 | --mecab-rc-file=file_name |
---|---|
系统变量 | mecab_rc_file |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
mecab_rc_file选项在设置MeCab全文解析器时使用。
mecab_rc_file选项定义了mecabrc配置文件的路径,该文件是MeCab的配置文件。该选项是只读的,只能在启动时设置。在初始化MeCab时需要mecabrc配置文件。
关于MeCab全文解析器的信息,请参见第12.10.9节,“MeCab全文解析器插件”。
关于可以在MeCab mecabrc配置文件中指定的选项的信息,请参考谷歌开发者网站上的MeCab文档。
metadata_locks_cache_size
命令行格式 | --metadata-locks-cache-size=# |
---|---|
不推荐使用 | Yes (removed in 8.0.13) |
系统变量 | metadata_locks_cache_size |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 1024 |
最小值 | 1 |
最大值 | 1048576 |
该系统变量已在MySQL 8.0.13中删除。
metadata_locks_hash_instances
命令行格式 | --metadata-locks-hash-instances=# |
---|---|
不推荐使用 | Yes (removed in 8.0.13) |
系统变量 | metadata_locks_hash_instances |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 8 |
最小值 | 1 |
最大值 | 1024 |
该系统变量已在MySQL 8.0.13中删除。
min_examined_row_limit
命令行格式 | --min-examined-row-limit=# |
---|---|
系统变量 | min_examined_row_limit |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
检查少于这个行数的查询不会被记录到慢速查询日志。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
myisam_data_pointer_size
命令行格式 | --myisam-data-pointer-size=# |
---|---|
系统变量 | myisam_data_pointer_size |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 6 |
最小值 | 2 |
最大值 | 7 |
默认的指针大小,以字节为单位,当没有指定MAX_ROWS选项时,CREATE TABLE将用于MyISAM表的指针。这个变量不能小于2,也不能大于7,默认值是6。 参见B.3.2.10节,“表已满”。
myisam_max_sort_file_size
命令行格式 | --myisam-max-sort-file-size=# |
---|---|
系统变量 | myisam_max_sort_file_size |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 (Windows) | 2146435072 |
默认值 (Other , 64-bit platforms) | 9223372036853727232 |
默认值 (Other , 32-bit platforms) | 2147483648 |
Maximum Value (Windows) | 2146435072 |
Maximum Value (Other , 64-bit platforms) | 9223372036853727232 |
Maximum Value (Other , 32-bit platforms) | 2147483648 |
在重新创建MyISAM索引时(在REPAIR TABLE、ALTER TABLE或LOAD DATA期间),允许MySQL使用的临时文件的最大尺寸。如果文件大小大于这个值,则使用键缓存来创建索引,这样会比较慢。这个值是以字节为单位的。
如果MyISAM索引文件超过这个大小,并且磁盘空间是可用的,增加这个值可能有助于性能。该空间必须在包含原始索引文件所在目录的文件系统中可用。
myisam_mmap_size
命令行格式 | --myisam-mmap-size=# |
---|---|
系统变量 | myisam_mmap_size |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 (64-bit platforms) | 18446744073709551615 |
默认值 (32-bit platforms) | 4294967295 |
最小值 | 7 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
用于内存映射的压缩MyISAM文件的最大内存量。如果使用了许多压缩的MyISAM表,该值可以减少,以减少内存交换问题的可能性。
myisam_recover_options
命令行格式 | --myisam-recover-options[=list] |
---|---|
系统变量 | myisam_recover_options |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Enumeration |
默认值 | OFF |
Valid Values | OFF``DEFAULT``BACKUP``FORCE``QUICK |
设置MyISAM存储引擎的恢复模式。变量值是OFF、DEFAULT、BACKUP、FORCE或QUICK等值的任意组合。如果你指定了多个值,请用逗号将它们分开。在服务器启动时指定没有值的变量与指定DEFAULT是一样的,指定一个明确的值""可以禁用恢复(与OFF的值一样)。如果启用了恢复功能,每次mysqld打开MyISAM表时,都会检查该表是否被标记为崩溃或没有被正确关闭。(最后一个选项只有在你运行时禁用了外部锁定时才有效)。如果是这种情况,mysqld在表上运行一个检查。如果表被破坏了,mysqld会尝试修复它。
以下选项会影响修复的工作方式。
Option | Description |
---|---|
OFF | No recovery. |
DEFAULT | Recovery without backup , forcing , or quick checking. |
BACKUP | If the data file was changed during recovery , save a backup of the * tbl_name*.MYD file as * tbl_name-datetime*.BAK . |
FORCE | Run recovery even if we would lose more than one row from the .MYD file. |
QUICK | Do not check the rows in the table if there are not any delete blocks. |
在服务器自动修复一个表之前,它会在错误日志中写一个关于修复的说明。如果你希望能够在没有用户干预的情况下从大多数问题中恢复,你应该使用选项BACKUP,FORCE。这将强制修复一个表,即使有些行会被删除,但它会保留旧的数据文件作为备份,以便你以后可以检查发生了什么。
See Section 16.2.1 , “MyISAM Startup Options”.
myisam_repair_threads
命令行格式 | --myisam-repair-threads=# |
---|---|
系统变量 | myisam_repair_threads |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 1 |
最小值 | 1 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
如果这个值大于1,MyISAM表的索引会在排序修复过程中并行创建(每个索引在自己的线程中)。默认值是1。
::: tip Note
多线程修复仍然是beta质量的代码。
:::
myisam_sort_buffer_size
命令行格式 | --myisam-sort-buffer-size=# |
---|---|
系统变量 | myisam_sort_buffer_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 8388608 |
最小值 | 4096 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
在REPAIR TABLE期间对MyISAM索引进行排序时,或者用CREATE INDEX或ALTER TABLE创建索引时,分配的缓冲区的大小。
myisam_stats_method
命令行格式 | --myisam-stats-method=name |
---|---|
系统变量 | myisam_stats_method |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | nulls_unequal |
Valid Values | nulls_equal nulls_unequal nulls_ignored |
在收集关于MyISAM表的索引值分布的统计数据时,服务器如何处理NULL值。这个变量有三个可能的值,nulls_equal,nulls_unequal,和nulls_ignored。对于nulls_equal,所有的NULL索引值被认为是相等的,并形成一个单一的值组,其大小等于NULL值的数量。对于nulls_unequal,NULL值被认为是不平等的,并且每个NULL形成一个大小为1的独立值组。对于nulls_ignored,NULL值被忽略。
用于生成表统计信息的方法会影响到优化器如何选择用于查询执行的索引,如第8.3.8节 "InnoDB和MyISAM索引统计信息收集 "中所述。
myisam_use_mmap
命令行格式 | --myisam-use-mmap[={OFF|ON}] |
---|---|
系统变量 | myisam_use_mmap |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
使用内存映射来读取和写入MyISAM表。
mysql_native_password_proxy_users
命令行格式 | --mysql-native-password-proxy-users[={OFF|ON}] |
---|---|
系统变量 | mysql_native_password_proxy_users |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
这个变量控制mysql_native_password内置认证插件是否支持代理用户。除非启用check_proxy_users系统变量,否则它没有作用。关于用户代理的信息,见第6.2.18节 “代理用户”。
named_pipe
命令行格式 | --named-pipe[={OFF|ON}] |
---|---|
系统变量 | named_pipe |
作用域 | Global |
动态 | No |
SET_VAR | No |
Platform Specific | Windows |
类型 | Boolean |
默认值 | OFF |
(仅Windows。)指示服务器是否支持通过命名管道的连接。
named_pipe_full_access_group
命令行格式 | --named-pipe-full-access-group=value |
---|---|
引进 | 8.0.14 |
系统变量 | named_pipe_full_access_group |
作用域 | Global |
动态 | No |
SET_VAR | No |
Platform Specific | Windows |
类型 | String |
默认值 | empty string |
Valid Values | empty string valid Windows local group name *everyone* |
仅限Windows。)当启用named_pipe系统变量以支持命名管道连接时,授予MySQL服务器创建的命名管道上的客户端的访问控制被设置为成功通信所需的最小值。较新的MySQL客户端软件可以打开命名管道连接,而不需要任何额外的配置;但是,较老的客户端软件可能仍然需要完全的访问权限来打开命名管道连接。
这个变量设置了一个Windows本地组的名称,其成员被MySQL服务器授予足够的访问权限,以使用旧的命名管道客户端。从MySQL 8.0.24开始,默认值被设置为一个空字符串,这意味着没有Windows用户被授予对命名管道的完全访问权。
net_buffer_length
命令行格式 | --net-buffer-length=# |
---|---|
系统变量 | net_buffer_length |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 16384 |
最小值 | 1024 |
最大值 | 1048576 |
Block Size | 1024 |
每个客户线程都与一个连接缓冲区和结果缓冲区有关。这两个缓冲区的大小从net_buffer_length开始,但会根据需要动态地扩大到max_allowed_packet字节。在每个SQL语句之后,结果缓冲区会收缩到net_buffer_length。
这个变量通常不应改变,但如果你的内存非常少,你可以把它设置为客户端发送的语句的预期长度。如果语句超过这个长度,连接缓冲区会自动扩大。net_buffer_length可以设置的最大值是1MB。
这个变量的会话值是只读的。
net_read_timeout
命令行格式 | --net-read-timeout=# |
---|---|
系统变量 | net_read_timeout |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 30 |
最小值 | 1 |
在中止读取之前,从一个连接中等待更多数据的秒数。当服务器从客户端读取数据时,net_read_timeout是控制何时终止的超时值。当服务器在向客户端写数据时,net_write_timeout是控制何时中止的超时值。请参阅slave_net_timeout。
net_retry_count
命令行格式 | --net-retry-count=# |
---|---|
系统变量 | net_retry_count |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 10 |
最小值 | 1 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
如果在通信端口上的读或写被中断,在放弃之前要重试多次。在FreeBSD上这个值应该设置得很高,因为内部中断会被发送到所有线程。
net_write_timeout
命令行格式 | --net-write-timeout=# |
---|---|
系统变量 | net_write_timeout |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 60 |
最小值 | 1 |
在中止写入之前,等待一个块被写入连接的秒数。参见net_read_timeout。
new
命令行格式 | --new[={OFF|ON}] |
---|---|
系统变量 | new |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
Disabled by | skip-new |
类型 | Boolean |
默认值 | OFF |
这个变量在MySQL 4.0中用来打开一些4.1的行为,为了向后兼容而保留。它的值总是关闭。
在NDB Cluster中,将这个变量设置为 “ON”,可以在NDB表中使用KEY或LINEAR KEY以外的分区类型。这个功能只是试验性的,在生产中不支持。有关其他信息,请参见用户定义的分区和NDB存储引擎(NDB Cluster)。
ngram_token_size
命令行格式 | --ngram-token-size=# |
---|---|
系统变量 | ngram_token_size |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 2 |
最小值 | 1 |
最大值 | 10 |
定义n-gram全文解析器的n-gram标记大小。ngram_token_size选项是只读的,只能在启动时修改。默认值是2(bigram)。最大值为10。
关于如何配置这个变量的更多信息,请参见第12.10.8节,“ngram全文分析器”。
offline_mode
命令行格式 | --offline-mode[={OFF|ON}] |
---|---|
系统变量 | offline_mode |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
服务器是否处于 “离线模式”,它有这些特征。
- 没有CONNECTION_ADMIN权限(或已废弃的SUPER权限)的已连接客户用户在下一次请求时被断开连接,并出现适当的错误。断开连接包括终止正在运行的语句和释放锁。这样的客户端也不能启动新的连接,并收到一个适当的错误。
- 拥有CONNECTION_ADMIN或SUPER权限的已连接的客户端用户不会被断开连接,并且可以发起新的连接来管理服务器。
- 复制线程被允许继续向服务器应用数据。
只有具有SYSTEM_VARIABLES_ADMIN或SUPER特权的用户才能控制脱机模式。要将服务器置于脱机模式,请将offline_mode系统变量的值从OFF更改为ON。要恢复正常操作,请将offline_mode从ON更改为OFF。在脱机模式下,被拒绝访问的客户端会收到ER_SERVER_OFFLINE_MODE错误。
old
命令行格式 | --old[={OFF|ON}] |
---|---|
系统变量 | old |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
old是一个兼容性变量。它在默认情况下是禁用的,但可以在启动时启用,使服务器恢复到旧版本中的行为。
当启用old时,它将索引提示的默认范围改为MySQL 5.1.17之前使用的范围。也就是说,没有FOR子句的索引提示只适用于如何将索引用于行检索,而不是解决ORDER BY或GROUP BY子句。见第8.9.4节,“索引提示”。)在复制设置中要注意启用这个。在基于语句的二进制日志中,对源和复制的不同模式可能导致复制错误。
old_alter_table
命令行格式 | --old-alter-table[={OFF|ON}] |
---|---|
系统变量 | old_alter_table |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
当这个变量被启用时,服务器不使用处理ALTER TABLE操作的优化方法。它恢复到使用一个临时表,复制数据,然后将临时表重命名为原始表,正如MySQL 5.0和更早使用的那样。关于ALTER TABLE操作的更多信息,见第13.1.9节,“ALTER TABLE语句”。
alter table … DROP PARTITION with old_alter_table=ON 重建分区表,并尝试将数据从被放弃的分区转移到另一个具有兼容的PARTITION … VALUES定义。不能移动到另一个分区的数据被删除。在早期版本中,ALTER TABLE … DROP PARTITION with old_alter_table=ON 会删除存储在分区中的数据,并删除该分区。
open_files_limit
命令行格式 | --open-files-limit=# |
---|---|
系统变量 | open_files_limit |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 5000 , with possible adjustment |
最小值 | 0 |
最大值 | platform dependent |
mysqld从操作系统获得的文件描述符的数量。
- 在启动时,mysqld用setrlimit()保留描述符,使用通过直接设置这个变量或通过使用mysqld_safe的–open-files-limit选项所要求的值。如果mysqld产生错误,太多打开的文件,尝试增加open_files_limit值。在内部,这个变量的最大值是最大的无符号整数值,但实际最大值与平台有关。
- 在运行时,open_files_limit的值表示操作系统实际允许给mysqld的文件描述符的数量,这可能与启动时请求的值不同。如果在启动期间请求的文件描述符的数量不能被分配,mysqld会向错误日志写一个警告。
有效的open_files_limit值是基于系统启动时指定的值(如果有的话)以及max_connections和table_open_cache的值,使用这些公式计算。
10 + max_connections + (table_open_cache * 2)
max_connections * 5
- MySQL 8.0.19及以上版本。操作系统的限制。
- 在MySQL 8.0.19之前:
- 操作系统的限制,如果该限制是正数,但不是无限大。
- 如果操作系统的限制是Infinity:如果在启动时指定open_files_limit值,则为5000,如果没有。
服务器试图使用这些值中的最大值来获取文件描述符的数量,上限为最大的无符号整数值。如果不能获得这么多描述符,服务器会尝试获得系统允许的尽可能多的描述符。
在MySQL不能改变开放文件数量的系统上,有效值为0。
在Unix上,该值不能被设置为大于ulimit -n命令所显示的值。
optimizer_prune_level
命令行格式 | --optimizer-prune-level=# |
---|---|
系统变量 | optimizer_prune_level |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 1 |
最小值 | 0 |
最大值 | 1 |
控制在查询优化过程中应用的启发式方法,以从优化器的搜索空间中修剪不太有希望的部分计划。值为0的时候,启发式方法被禁用,这样优化器就会执行穷举式搜索。值为1的时候,优化器会根据中间计划检索的行数来修剪计划。
optimizer_search_depth
命令行格式 | --optimizer-search-depth=# |
---|---|
系统变量 | optimizer_search_depth |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 62 |
最小值 | 0 |
最大值 | 62 |
由查询优化器执行的最大搜索深度。大于查询中的关系数的值会产生更好的查询计划,但需要更长的时间来生成一个查询的执行计划。小于查询中的关系数的值会更快地返回一个执行计划,但产生的计划可能远非最佳。如果设置为0,系统会自动选取一个合理的值。
optimizer_switch
命令行格式 | --optimizer-switch=value |
---|---|
系统变量 | optimizer_switch |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Set |
Valid Values (≥ 8.0.22) | batched_key_access={on|off}``block_nested_loop={on\|off}``condition_fanout_filter={on|off}``derived_condition_pushdown={on\|off}``derived_merge={on|off}``duplicateweedout={on\|off}``engine_condition_pushdown={on|off}``firstmatch={on\|off}``hash_join={on|off}``index_condition_pushdown={on\|off}``index_merge={on|off}``index_merge_intersection={on\|off}``index_merge_sort_union={on|off}``index_merge_union={on\|off}``loosescan={on|off}``materialization={on\|off}``mrr={on|off}``mrr_cost_based={on\|off}``prefer_ordering_index={on|off}``semijoin={on\|off}``skip_scan={on|off}``subquery_materialization_cost_based={on\|off}``use_index_extensions={on|off}``use_invisible_indexes={on\|off} |
Valid Values (≥ 8.0.21) | batched_key_access={on|off}``block_nested_loop={on\|off}``condition_fanout_filter={on|off}``derived_merge={on\|off}``duplicateweedout={on|off}``engine_condition_pushdown={on\|off}``firstmatch={on|off}``hash_join={on\|off}``index_condition_pushdown={on|off}``index_merge={on\|off}``index_merge_intersection={on|off}``index_merge_sort_union={on\|off}``index_merge_union={on|off}``loosescan={on\|off}``materialization={on|off}``mrr={on\|off}``mrr_cost_based={on|off}``prefer_ordering_index={on\|off}``semijoin={on|off}``skip_scan={on\|off}``subquery_materialization_cost_based={on|off}``use_index_extensions={on\|off}``use_invisible_indexes={on|off} |
Valid Values (≥ 8.0.18) | batched_key_access={on|off}``block_nested_loop={on\|off}``condition_fanout_filter={on|off}``derived_merge={on\|off}``duplicateweedout={on|off}``engine_condition_pushdown={on\|off}``firstmatch={on|off}``hash_join={on\|off}``index_condition_pushdown={on|off}``index_merge={on\|off}``index_merge_intersection={on|off}``index_merge_sort_union={on\|off}``index_merge_union={on|off}``loosescan={on\|off}``materialization={on|off}``mrr={on\|off}``mrr_cost_based={on|off}``semijoin={on\|off}``skip_scan={on|off}``subquery_materialization_cost_based={on\|off}``use_index_extensions={on|off}``use_invisible_indexes={on\|off} |
Valid Values (≥ 8.0.13) | batched_key_access={on|off}``block_nested_loop={on\|off}``condition_fanout_filter={on|off}``derived_merge={on\|off}``duplicateweedout={on|off}``engine_condition_pushdown={on\|off}``firstmatch={on|off}``index_condition_pushdown={on\|off}``index_merge={on|off}``index_merge_intersection={on\|off}``index_merge_sort_union={on|off}``index_merge_union={on\|off}``loosescan={on|off}``materialization={on\|off}``mrr={on|off}``mrr_cost_based={on\|off}``semijoin={on|off}``skip_scan={on\|off}``subquery_materialization_cost_based={on|off}``use_index_extensions={on\|off}``use_invisible_indexes={on|off} |
Valid Values (≤ 8.0.12) | batched_key_access={on|off}``block_nested_loop={on\|off}``condition_fanout_filter={on|off}``derived_merge={on\|off}``duplicateweedout={on|off}``engine_condition_pushdown={on\|off}``firstmatch={on|off}``index_condition_pushdown={on\|off}``index_merge={on|off}``index_merge_intersection={on\|off}``index_merge_sort_union={on|off}``index_merge_union={on\|off}``loosescan={on|off}``materialization={on\|off}``mrr={on|off}``mrr_cost_based={on\|off}``semijoin={on|off}``subquery_materialization_cost_based={on\|off}``use_index_extensions={on|off}``use_invisible_indexes={on\|off} |
optimizer_switch系统变量实现了对优化器行为的控制。这个变量的值是一组标志,每个标志的值都是开或关,表示相应的优化器行为是启用还是禁用。这个变量有全局和会话值,可以在运行时改变。全局默认值可以在服务器启动时设置。
要查看当前的优化器标志集,选择变量值。
mysql> SELECT @@optimizer_switch\G
*************************** 1. row ***************************
@@optimizer_switch: index_merge=on,index_merge_union=on,
index_merge_sort_union=on,index_merge_intersection=on,
engine_condition_pushdown=on,index_condition_pushdown=on,
mrr=on,mrr_cost_based=on,block_nested_loop=on,
batched_key_access=off,materialization=on,semijoin=on,
loosescan=on,firstmatch=on,duplicateweedout=on,
subquery_materialization_cost_based=on,
use_index_extensions=on,condition_fanout_filter=on,
derived_merge=on,use_invisible_indexes=off,skip_scan=on,
hash_join=on,subquery_to_derived=off,
prefer_ordering_index=on,hypergraph_optimizer=off,
derived_condition_pushdown=on
关于这个变量的语法和它所控制的优化器行为的更多信息,请参见第8.9.2节,“可转换优化”。
optimizer_trace
命令行格式 | --optimizer-trace=value |
---|---|
系统变量 | optimizer_trace |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
这个变量控制优化器的追踪。详情请见MySQL内部。追踪优化器。
optimizer_trace_features
命令行格式 | --optimizer-trace-features=value |
---|---|
系统变量 | optimizer_trace_features |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
这个变量可以启用或禁用选定的优化器跟踪功能。详情请见MySQL内部。追踪优化器。
optimizer_trace_limit
命令行格式 | --optimizer-trace-limit=# |
---|---|
系统变量 | optimizer_trace_limit |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 1 |
要显示的优化器跟踪的最大数量。详情请见MySQL内部。追踪优化器。
optimizer_trace_max_mem_size
命令行格式 | --optimizer-trace-max-mem-size=# |
---|---|
系统变量 | optimizer_trace_max_mem_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 1048576 |
存储的优化器痕迹的最大累积大小。详情请见MySQL内部。追踪优化器。
optimizer_trace_offset
命令行格式 | --optimizer-trace-offset=# |
---|---|
系统变量 | optimizer_trace_offset |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | -1 |
要显示的优化器痕迹的偏移量。详情请见MySQL内部。追踪优化器。
performance_schema_xxx
Performance Schema系统变量在第27.15节 "Performance Schema系统变量 "中列出。这些变量可以用来配置Performance Schema的操作。
parser_max_mem_size
命令行格式 | --parser-max-mem-size=# |
---|---|
系统变量 | parser_max_mem_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 (64-bit platforms) | 18446744073709551615 |
默认值 (32-bit platforms) | 4294967295 |
最小值 | 10000000 |
最大值(64位 平台) | 18446744073709551615 |
最大值(32位 平台) | 4294967295 |
解析器可用的最大内存量。默认值对可用内存没有限制。该值可以减少,以防止因解析长的或复杂的SQL语句而造成的内存不足的情况。
partial_revokes
命令行格式 | --partial-revokes[={OFF|ON}] |
---|---|
引进 | 8.0.16 |
系统变量 | partial_revokes |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF (if partial revokes do not exist)ON (if partial revokes exist) |
启用这个变量使得部分撤销权限成为可能。具体来说,对于拥有全局级别权限的用户来说,部分撤销可以使特定模式的权限被撤销,而对其他模式保留权限。例如,一个拥有全局UPDATE权限的用户可以被限制在mysql系统模式上行使这一权限。或者,以另一种方式说明,该用户被允许在所有模式上行使UPDATE权限,除了mysql模式)。在这个意义上,用户的全局UPDATE权限被部分撤销了。
一旦启用,如果任何账户有权限限制,就不能禁用部分引用。如果存在任何这样的账户,禁用部分引用就会失败。
- 对于试图在启动时禁用部分重启的行为,服务器会记录一条错误信息并启用部分重启。
- 对于试图在运行时禁用partial_revokes的行为,会发生错误,partial_revokes值保持不变。
要在这种情况下禁用部分撤销,首先要修改每个有部分撤销权限的账户,要么重新授予权限,要么删除该账户。
更多信息,包括删除部分撤销的说明,见第6.2.12节,“使用部分撤销的权限限制”。
password_history
命令行格式 | --password-history=# |
---|---|
系统变量 | password_history |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值 | 4294967295 |
这个变量定义了全局策略,用于控制基于所需的最小密码更改次数的先前密码的重复使用。对于以前使用过的账户密码,这个变量表示在密码被重新使用之前必须发生的后续账户密码修改次数。如果该值为0(默认值),则没有基于密码更改次数的重复使用限制。
对这个变量的修改立即适用于所有用PASSWORD HISTORY DEFAULT选项定义的账户。
全局性的密码重复使用次数政策可以根据需要通过CREATE USER和ALTER USER语句中的PASSWORD HISTORY选项来覆盖单个账户。见第6.2.15节,“密码管理”。
password_require_current
命令行格式 | --password-require-current[={OFF|ON}] |
---|---|
引进 | 8.0.13 |
系统变量 | password_require_current |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
这个变量定义了全局策略,用于控制改变账户密码的尝试是否必须指定要替换的当前密码。
对这个变量的修改立即适用于所有用PASSWORD REQUIRE CURRENT DEFAULT选项定义的账户。
全局验证要求的策略可以根据需要使用CREATE USER和ALTER USER语句中的PASSWORD REQUIRE选项对单个账户进行覆盖。见第6.2.15节,“密码管理”。
password_reuse_interval
命令行格式 | --password-reuse-interval=# |
---|---|
系统变量 | password_reuse_interval |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值 | 4294967295 |
这个变量定义了全局策略,用于根据时间的长短来控制以前密码的重复使用。对于以前使用过的账户密码,这个变量表示必须经过多少天才能重新使用该密码。如果数值为0(默认值),则没有基于时间推移的重复使用限制。
对这个变量的修改立即适用于所有用PASSWORD REUSE INTERVAL DEFAULT选项定义的账户。
全局时间间隔的密码重用策略可以根据需要使用CREATE USER和ALTER USER语句中的PASSWORD REUSE INTERVAL选项来覆盖单个账户。参见第6.2.15节,“密码管理”。
persisted_globals_load
命令行格式 | --persisted-globals-load[={OFF|ON}] |
---|---|
系统变量 | persisted_globals_load |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
是否从数据目录中的mysqld-auto.cnf文件加载持久化的配置设置。服务器在启动时通常在所有其他选项文件之后处理这个文件(见第4.2.2.2节,“使用选项文件”)。禁用 persisted_globals_load 导致服务器启动顺序跳过 mysqld-auto.cnf。
要修改mysqld-auto.cnf的内容,使用SET PERSIST、SET PERSIST_ONLY和RESET PERSIST语句。参见第5.1.9.3节,“持久的系统变量”。
persist_only_admin_x509_subject
命令行格式 | --persist-only-admin-x509-subject=string |
---|---|
引进 | 8.0.14 |
系统变量 | persist_only_admin_x509_subject |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
默认值 | empty string |
SET PERSIST和SET PERSIST_ONLY使系统变量持久化到数据目录中的mysqld-auto.cnf选项文件中(见第13.7.6.1节,“变量分配的SET语法”)。保存系统变量可以使运行时的配置变化影响到随后的服务器重启,这对于不需要直接访问MySQL服务器主机选项文件的远程管理很方便。然而,有些系统变量是不可持久的,或者只能在某些限制性条件下被持久化。
服务器写入其进程ID的文件的路径名称。服务器会在数据目录下创建该文件,除非给出绝对路径名以指定不同的目录。如果你指定这个变量,你必须指定一个值。如果你不指定这个变量,MySQL使用默认值host_name.pid,其中host_name是主机的名称。
进程ID文件被其他程序使用,如mysqld_safe,以确定服务器的进程ID。在Windows上,这个变量也影响到默认的错误日志文件名。参见第5.4.2节,“错误日志”。
pid_file
命令行格式 | --pid-file=file_name |
---|---|
系统变量 | pid_file |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
服务器写入其进程ID的文件的路径名称。服务器会在数据目录下创建该文件,除非给出绝对路径名以指定不同的目录。如果你指定这个变量,你必须指定一个值。如果你不指定这个变量,MySQL使用默认值host_name.pid,其中host_name是主机的名称。
进程ID文件被其他程序使用,如mysqld_safe,以确定服务器的进程ID。在Windows上,这个变量也影响到默认的错误日志文件名。参见第5.4.2节,“错误日志”。
plugin_dir
命令行格式 | --plugin-dir=dir_name |
---|---|
系统变量 | plugin_dir |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Directory name |
默认值 | BASEDIR/lib/plugin |
插件目录的路径名。
如果插件目录可以被服务器写入,那么用户就有可能使用SELECT … INTO DUMPFILE向目录中的文件写入可执行代码。这可以通过使plugin_dir对服务器只读或通过设置secure_file_priv到一个可以安全地进行SELECT写入的目录来防止。
port
命令行格式 | --port=port_num |
---|---|
系统变量 | port |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
默认值 | 3306 |
最小值 | 0 |
最大值 | 65535 |
服务器监听TCP/IP连接的端口号。这个变量可以用 --port 选项来设置。
preload_buffer_size
命令行格式 | --preload-buffer-size=# |
---|---|
系统变量 | preload_buffer_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 32768 |
最小值 | 1024 |
最大值 | 1073741824 |
预加载索引时分配的缓冲区的大小。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
print_identified_with_as_hex
命令行格式 | --print-identified-with-as-hex[={OFF|ON}] |
---|---|
引进 | 8.0.17 |
系统变量 | print_identified_with_as_hex |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
在SHOW CREATE USER输出的IDENTIFIED WITH子句中显示的密码哈希值可能包含不可打印的字符,对终端显示和其他环境有不利影响。启用print_identified_with_as_hex会使SHOW CREATE USER将此类哈希值显示为十六进制字符串,而不是普通的字符串字面。即使启用这个变量,不包含不可打印字符的哈希值仍然显示为普通的字符串字面。
profiling
如果设置为0或关闭(默认),语句分析被禁用。如果设置为1或ON,语句分析被启用,SHOW PROFILE和SHOW PROFILES语句提供对分析信息的访问。参见第13.7.7.31节,“SHOW PROFILES语句”。
这个变量已被废弃;预计它将在未来的MySQL版本中被删除。
profiling_history_size
如果启用了剖析功能,要保持剖析信息的语句数量。默认值是15。最大值是100。将该值设置为0可以有效地禁用剖析功能。参见第13.7.7.31节,“SHOW PROFILES语句”。
这个变量已被废弃;预计它将在未来的MySQL版本中被删除。
protocol_compression_algorithms
命令行格式 | --protocol-compression-algorithms=value |
---|---|
引进 | 8.0.18 |
系统变量 | protocol_compression_algorithms |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Set |
默认值 | zlib,zstd,uncompressed |
Valid Values | zlib zstd uncompressed |
服务器允许传入连接的压缩算法。这些包括由客户程序和参与源/副本复制或组复制的服务器的连接。压缩并不适用于FEDERATED表的连接。
protocol_compression_algorithms并不控制X协议的连接压缩。参见第20.5.5节,“用X插件进行连接压缩”,以了解其操作方法。
变量值是一个由一个或多个逗号分隔的压缩算法名称组成的列表,顺序不限,从以下项目中选择(不区分大小写)。
zlib
: 允许使用zlib压缩算法的连接。zstd
: 允许使用zstd压缩算法的连接(zstd 1.3)。uncompressed
: 允许未压缩的连接。如果这个算法名称不包括在protocol_compression_algorithms值中,服务器不允许非压缩连接。它只允许使用该值中指定的任何其他算法的压缩连接,并且没有回退到未压缩的连接。
zlib,zstd,uncompressed的默认值表示服务器允许所有的压缩算法。
有关更多信息,请参见第4.2.8节“连接压缩控制”。
protocol_version
系统变量 | protocol_version |
---|---|
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Integer |
MySQL服务器使用的客户端/服务器协议的版本。
proxy_user
系统变量 | proxy_user |
---|---|
作用域 | Session |
动态 | No |
SET_VAR | No |
类型 | String |
如果当前客户端是另一个用户的代理,这个变量是代理用户的账户名。否则,这个变量为NULL。参见第6.2.18节,“代理用户”。
pseudo_slave_mode
系统变量 | pseudo_slave_mode |
---|---|
作用域 | Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
这个系统变量供服务器内部使用。pseudo_slave_mode协助正确处理源于比当前处理的服务器更早或更新的服务器的事务。mysqlbinlog在执行任何SQL语句之前将pseudo_slave_mode的值设置为true。
设置这个系统变量的会话值是一个受限制的操作。会话用户必须拥有 REPLICATION_APPLIER 权限(见第 17.3.3 节 “复制权限检查”),或者拥有足以设置受限会话变量的权限(见第 5.1.9.1 节 “系统变量权限”)。然而,请注意,该变量不是供用户设置的;它是由复制基础设施自动设置的。
pseudo_slave_mode对处理准备好的XA事务有以下影响,这些事务可以附加到处理会话(默认是发出XA START的会话)或从处理会话中分离出来。
- 如果为真,并且处理会话已经执行了一个内部使用的BINLOG语句,那么一旦到XA PREPARE为止的交易的第一部分完成,XA事务就会自动从会话中分离出来,因此它们可以被任何具有XA_RECOVER_ADMIN权限的会话提交或回滚。
- 如果是假的,只要该会话还活着,XA事务就会一直附着在处理的会话上,在这期间没有其他会话可以提交该事务。只有当会话断开连接或服务器重新启动时,准备好的事务才会被分离。
pseudo_slave_mode 对 original_commit_timestamp 复制延迟时间戳和 original_server_version 系统变量有以下影响。
- 如果为真,没有明确设置original_commit_timestamp或original_server_version的事务将被假定为起源于另一个未知的服务器,所以值0,意思是未知,被分配给时间戳和系统变量。
- 如果是false,没有明确设置original_commit_timestamp或original_server_version的事务将被假定为起源于当前服务器,因此当前的时间戳和当前服务器的版本将被分配给时间戳和系统变量。
在MySQL 8.0.14及更高版本中,pseudo_slave_mode对处理设置一个或多个不支持(已删除或未知)SQL模式的语句有以下影响。
- 如果为真,服务器会忽略不支持的模式并发出警告。
- 如果是假的,服务器用ER_UNSUPPORTED_SQL_MODE拒绝该语句。
pseudo_thread_id
系统变量 | pseudo_thread_id |
---|---|
作用域 | Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
此变量供内部服务器使用。
::: tip Warning
改变pseudo_thread_id系统变量的会话值会改变CONNECTION_ID()函数的返回值。
:::
从MySQL 8.0.14开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
query_alloc_block_size
命令行格式 | --query-alloc-block-size=# |
---|---|
系统变量 | query_alloc_block_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 8192 |
最小值 | 1024 |
最大值 | 4294967295 |
Unit | bytes |
Block Size | 1024 |
在语句解析和执行过程中为创建的对象分配的内存块的分配大小,单位是字节。如果你有内存碎片的问题,增加这个参数可能有帮助。
query_prealloc_size
命令行格式 | --query-prealloc-size=# |
---|---|
系统变量 | query_prealloc_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 8192 |
最小值 | 8192 |
最大值(64位 平台) | 18446744073709547520 |
最大值(32位 平台) | 4294967295 |
Block Size | 1024 |
用于语句解析和执行的持久性缓冲区的大小(字节)。这个缓冲区在语句之间不会被释放。如果你正在运行复杂的查询,一个较大的query_prealloc_size值可能有助于提高性能,因为它可以减少服务器在查询执行操作中执行内存分配的需要。
rand_seed1
系统变量 | rand_seed1 |
---|---|
作用域 | Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
rand_seed1和rand_seed2变量只作为会话变量存在,可以设置但不能读取。这些变量–但不是它们的值–会显示在SHOW VARIABLES的输出中。
这些变量的目的是为了支持RAND()函数的复制。对于调用RAND()的语句,源程序将两个值传递给副本,在那里它们被用来作为随机数发生器的种子。复制体使用这些值来设置会话变量rand_seed1和rand_seed2,这样复制体上的RAND()就会产生与源体上相同的值。
rand_seed2
请参阅rand_seed1的描述。
range_alloc_block_size
命令行格式 | --range-alloc-block-size=# |
---|---|
系统变量 | range_alloc_block_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 4096 |
最小值 | 4096 |
最大值(64位 平台) | 18446744073709547520 |
最大值 | 4294967295 |
Block Size | 1024 |
做范围优化时分配的块的大小,以字节为单位。
range_optimizer_max_mem_size
命令行格式 | --range-optimizer-max-mem-size=# |
---|---|
系统变量 | range_optimizer_max_mem_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 8388608 |
最小值 | 0 |
最大值 | 18446744073709551615 |
对范围优化器的内存消耗的限制。值为0意味着 “无限制”。如果优化器考虑的执行计划使用范围访问方法,但优化器估计这种方法所需的内存量会超过限制,它就会放弃该计划并考虑其他计划。欲了解更多信息,请参见限制范围优化的内存使用。
rbr_exec_mode
系统变量 | rbr_exec_mode |
---|---|
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | STRICT |
Valid Values | IDEMPOTENT STRICT |
供mysqlbinlog内部使用。这个变量在IDEMPOTENT模式和STRICT模式之间切换服务器。IDEMPOTENT模式导致抑制由mysqlbinlog生成的BINLOG语句中的重复键和无键发现错误。当在服务器上重放基于行的二进制日志,导致与现有数据冲突时,这种模式很有用。当你指定–idempotent选项时,mysqlbinlog通过向输出写入以下内容来设置这种模式。
SET SESSION RBR_EXEC_MODE=IDEMPOTENT;
从MySQL 8.0.18开始,设置这个系统变量的会话值不再是一个限制性操作。
read_buffer_size
命令行格式 | --read-buffer-size=# |
---|---|
系统变量 | read_buffer_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 131072 |
最小值 | 8192 |
最大值 | 2147479552 |
Block Size | 4096 |
每个对MyISAM表进行顺序扫描的线程都会为它所扫描的每个表分配一个这个大小(字节)的缓冲区。如果你做了很多顺序扫描,你可能想增加这个值,它的默认值是131072。这个变量的值应该是4KB的倍数。如果它被设置为不是4KB的倍数,它的值将被四舍五入为最接近4KB的倍数。
该选项也在以下情况下用于所有存储引擎。
- 用于在临时文件(不是临时表)中缓存索引,当对行进行ORDER BY排序时。
- 对于批量插入分区。
- 用于缓存嵌套查询的结果。
read_buffer_size还被用于另外一种存储引擎特有的方式:确定MEMORY表的内存块大小。
从MySQL 8.0.22开始,在执行SELECT INTO DUMPFILE和SELECT INTO OUTFILE语句时,使用select_into_buffer_size的值来代替read_buffer_size的值。
关于不同操作期间内存使用的更多信息,见第8.12.3.1节 “MySQL如何使用内存”。
read_only
命令行格式 | --read-only[={OFF|ON}] |
---|---|
系统变量 | read_only |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
如果启用read_only系统变量,服务器不允许客户端更新,除非是来自拥有CONNECTION_ADMIN权限的用户(或被废弃的SUPER权限)。这个变量在默认情况下是禁用的。
服务器还支持一个super_read_only系统变量(默认情况下禁用),它有这些作用。
- 如果super_read_only被启用,服务器会禁止客户端的更新,即使是拥有CONNECTION_ADMIN或SUPER权限的用户。
- 将super_read_only设置为ON,隐含地迫使read_only为ON。
- 将read_only设置为OFF隐含地强制super_read_only为OFF。
当 "只读 "被启用和 "超级只读 "被启用时,服务器仍然允许这些操作。
- 如果服务器是一个副本,由复制线程执行的更新。在复制设置中,在复制服务器上启用 “只读”(read_only)可能很有用,以确保复制只接受来自复制源服务器的更新,而不是来自客户端。
- 写入系统表mysql.gtid_executed,该表存储已执行事务的GTID,这些事务不存在于当前的二进制日志文件中。
- 使用ANALYZE TABLE或OPTIMIZE TABLE语句。只读模式的目的是防止改变表的结构或内容。分析和优化并不符合这种改变的条件。这意味着,例如,对只读复制的一致性检查可以用mysqlcheck --all-databases --analyze进行。
- 在TEMPORARY表上的操作。
- 插入到日志表(mysql.general_log和mysql.slow_log);见5.4.1节 “选择一般查询日志和慢速查询日志输出目的地”。
- 对Performance Schema表的更新,如UPDATE或TRUNCATE TABLE操作。
复制源服务器上对read_only的更改不会复制到复制服务器。该值可以在复制服务器上设置,与源服务器上的设置无关。
以下条件适用于启用只读的尝试(包括因启用super_read_only而产生的隐式尝试)。
- 如果你有任何显性锁(用LOCK TABLES获得)或有一个待处理的事务,该尝试就会失败并发生错误。
- 当其他客户有任何正在进行的语句,活动的LOCK TABLES WRITE,或正在进行的提交时,该尝试会被阻断,直到锁被释放,语句和事务结束。当启用只读的尝试正在等待时,其他客户对表锁的请求或开始交易的请求也会被阻断,直到只读被设置。
- 如果存在持有元数据锁的活动事务,该尝试就会阻塞,直到这些事务结束。
- 当你持有全局读锁(用FLUSH TABLES WITH READ LOCK获得)时,可以启用read_only,因为这并不涉及表锁。
read_rnd_buffer_size
命令行格式 | --read-rnd-buffer-size=# |
---|---|
系统变量 | read_rnd_buffer_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 262144 |
最小值 | 1 |
最大值 | 2147483647 |
这个变量用于从MyISAM表的读取,对于任何存储引擎,这个变量用于多范围读取优化。
当从MyISAM表中以排序操作后的排序顺序读取行时,通过这个缓冲区读取行,以避免磁盘搜索。参见第8.2.1.16节,“ORDER BY优化”。把这个变量设置成一个大的值可以使ORDER BY的性能提高很多。然而,这是一个为每个客户分配的缓冲区,所以你不应该把全局变量设置为一个大值。相反,只在那些需要运行大型查询的客户端内改变会话变量。
关于不同操作期间内存使用的更多信息,见第8.12.3.1节,“MySQL如何使用内存”。关于多范围读取优化的信息,见第8.2.1.11节,“多范围读取优化”。
regexp_stack_limit
命令行格式 | --regexp-stack-limit=# |
---|---|
系统变量 | regexp_stack_limit |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 8000000 |
最小值 | 0 |
最大值 | 2147483647 |
用于REGEXP_LIKE()和类似函数执行的正则表达式匹配操作的内部堆栈的最大可用内存(字节)(参见第12.8.2节 “正则表达式”)。
regexp_time_limit
命令行格式 | --regexp-time-limit=# |
---|---|
系统变量 | regexp_time_limit |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 32 |
最小值 | 0 |
最大值 | 2147483647 |
由REGEXP_LIKE()和类似函数执行的正则表达式匹配操作的时间限制(参见第12.8.2节,“正则表达式”)。这个限制表示为匹配引擎允许执行的最大步骤数,因此只间接地影响执行时间。通常情况下,它是在毫秒的数量级上。
require_row_format
引进 | 8.0.19 |
---|---|
系统变量 | require_row_format |
作用域 | Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
这个变量供复制和mysqlbinlog的内部服务器使用。它限制在会话中执行的DML事件只能以基于行的二进制日志格式编码的事件,并且不能创建临时表。不尊重这些限制的查询会失败。
将这个系统变量的会话值设置为ON不需要任何权限。将这个系统变量的会话值设置为OFF是一个受限的操作,会话用户必须有足够的权限来设置受限的会话变量。参见第5.1.9.1节 “系统变量的权限”。
require_secure_transport
命令行格式 | --require-secure-transport[={OFF|ON}] |
---|---|
系统变量 | require_secure_transport |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
客户端与服务器的连接是否需要使用某种形式的安全传输。当这个变量被启用时,服务器只允许使用TLS/SSL加密的TCP/IP连接,或者使用套接字文件(在Unix上)或共享内存(在Windows上)的连接。服务器拒绝不安全的连接尝试,这些尝试会以ER_SECURE_TRANSPORT_REQUIRED错误失败。
这种能力是对每个账户的SSL要求的补充,后者优先。例如,如果一个账户是用REQUIRE SSL定义的,启用require_secure_transport就不可能使用该账户使用Unix套接字文件连接。
一个服务器有可能没有可用的安全传输。例如,Windows上的服务器如果在没有指定任何SSL证书或密钥文件的情况下启动,并禁用shared_memory系统变量,则不支持安全传输。在这些条件下,试图在启动时启用require_secure_transport会导致服务器向错误日志写一条信息并退出。试图在运行时启用该变量时,会出现ER_NO_SECURE_TRANSPORTS_CONFIGURED错误。
另请参阅将加密连接配置为强制性。
resultset_metadata
系统变量 | resultset_metadata |
---|---|
作用域 | Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | FULL |
Valid Values | FULL NONE |
对于元数据传输是可选的连接,客户端设置resultset_metadata系统变量来控制服务器是否返回结果集元数据。允许的值是FULL(返回所有元数据;这是默认值)和NONE(不返回元数据)。
对于不是元数据可选的连接,将resultset_metadata设置为NONE会产生一个错误。
关于管理结果集元数据传输的详情,请参见可选结果集元数据。
secondary_engine_cost_threshold
引进 | 8.0.16 |
---|---|
系统变量 | secondary_engine_cost_threshold |
作用域 | Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Numeric |
默认值 | 100000.000000 |
最小值 | 0 |
最大值 | DBL_MAX (maximum double value) |
用于将查询卸载到辅助引擎的优化器成本阈值。
与HeatWave一起使用。请参阅《 HeatWave用户指南》。
schema_definition_cache
命令行格式 | --schema-definition-cache=# |
---|---|
系统变量 | schema_definition_cache |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Integer |
默认值 | 256 |
最小值 | 256 |
最大值 | 524288 |
定义了可以保存在字典对象缓存中的模式定义对象(包括已使用和未使用的)的数量限制。
未使用的模式定义对象只有在使用的数量少于schema_definition_cache定义的容量时才会被保存在字典对象缓存中。
设置为0意味着模式定义对象只在使用时保留在字典对象缓存中。
更多信息,见第14.4节 “字典对象缓存”。
secure_file_priv
命令行格式 | --secure-file-priv=dir_name |
---|---|
系统变量 | secure_file_priv |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | String |
默认值 | platform specific |
Valid Values | empty string dirname NULL |
这个变量用来限制数据导入和导出操作的效果,例如那些由LOAD DATA和SELECT … INTO OUTFILE语句以及LOAD_FILE()函数执行的操作。这些操作只允许给拥有FILE权限的用户。
secure_file_priv可以设置如下:
- 如果为空,该变量没有任何作用。这不是一个安全的设置。
- 如果设置为一个目录的名称,服务器限制导入和导出操作,只对该目录中的文件进行操作。该目录必须存在;服务器不会创建它。
- 如果设置为NULL,服务器将禁用导入和导出操作。
默认值是特定于平台的,并且取决于 INSTALL_LAYOUT CMake 选项的值,如下表所示。如果你从源代码构建,要明确指定默认的 secure_file_priv 值,请使用 INSTALL_SECURE_FILE_PRIVDIR CMake 选项。
INSTALL_LAYOUT Value | Default secure_file_priv Value |
---|---|
STANDALONE | empty |
DEB , RPM , SVR4 | /var/lib/mysql-files |
Otherwise | mysql-files under the CMAKE_INSTALL_PREFIX value |
服务器在启动时检查secure_file_priv的值,如果该值是不安全的,则向错误日志写一个警告。如果一个非空值被认为是不安全的,或者该值是数据目录或其子目录,或所有用户都可以访问的目录。如果secure_file_priv被设置为一个不存在的路径,服务器会在错误日志中写入一条错误信息并退出。
select_into_buffer_size
命令行格式 | --select-into-buffer-size=# |
---|---|
引进 | 8.0.22 |
系统变量 | select_into_buffer_size |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 131072 |
最小值 | 8192 |
最大值 | 2147479552 |
Unit | bytes |
Block Size | 4096 |
当使用SELECT INTO OUTFILE或SELECT INTO DUMPFILE将数据转储到一个或多个文件中,用于创建备份、数据迁移或其他目的时,写操作往往会被缓冲,然后引发向磁盘或其他存储设备写I/O活动的大爆发,并使其他对延迟更敏感的查询停滞。你可以使用这个变量来控制用于向存储设备写入数据的缓冲区的大小,以确定何时应该发生缓冲区同步,从而防止刚才描述的那种写入停滞的情况发生。
select_into_buffer_size优先于read_buffer_size的任何设置值。(select_into_buffer_size和read_buffer_size有相同的默认值、最大值和最小值)。你也可以使用select_into_disk_sync_delay来设置一个超时,以便在每次同步发生后观察。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
select_into_disk_sync
命令行格式 | --select-into-disk-sync={ON|OFF} |
---|---|
引进 | 8.0.22 |
系统变量 | select_into_disk_sync |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Boolean |
默认值 | OFF |
Valid Values | OFF ON |
当设置为ON时,可以通过使用select_into_buffer_size的长期运行的SELECT INTO OUTFILE或SELECT INTO DUMPFILE语句来实现对输出文件的缓冲区同步写入。
select_into_disk_sync_delay
命令行格式 | --select-into-disk-sync-delay=# |
---|---|
引进 | 8.0.22 |
系统变量 | select_into_disk_sync_delay |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Integer |
默认值 | 0 |
最小值 | 0 |
最大值 | 31536000 |
Unit | milliseconds |
当通过select_into_disk_sync启用长期运行的SELECT INTO OUTFILE或SELECT INTO DUMPFILE语句向输出文件写入的缓冲区同步时,这个变量设置了同步后的可选延迟(以毫秒计)。0(默认)意味着没有延迟。
从MySQL 8.0.26开始,设置这个系统变量的会话值是一个受限制的操作。会话用户必须有足够的权限来设置受限制的会话变量。见第5.1.9.1节,“系统变量权限”。
session_track_gtids
命令行格式 | --session-track-gtids=value |
---|---|
系统变量 | session_track_gtids |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | OFF |
Valid Values | OFF OWN_GTID ALL_GTIDS |
控制服务器是否将GTIDs返回给客户端,使客户端能够使用它们来跟踪服务器的状态。根据变量值,在执行每个事务结束时,服务器的GTIDs被捕获并作为确认的一部分返回给客户端。session_track_gtids的可能值如下。
OFF
: 服务器不向客户端返回GTIDs。这是默认的。OWN_GTID
: 服务器返回该客户在当前会话中自上次确认后成功提交的所有交易的GTID。通常情况下,这是最后提交的交易的单一GTID,但如果一个客户的请求导致多个交易,服务器会返回一个包含所有相关GTID的GTID集。ALL_GTIDS
: 服务器返回其gtid_executed系统变量的全局值,它在交易成功提交后的某个时间点读取该变量。除了刚刚提交的事务的GTID外,这个GTID集还包括任何客户在服务器上提交的所有事务,并且可以包括在当前被确认的事务提交后提交的事务。
session_track_gtids不能在交易背景下设置。
关于会话状态跟踪的更多信息,请参见第5.1.18节,“服务器跟踪客户端会话状态的变化”。
session_track_schema
命令行格式 | --session-track-schema[={OFF|ON}] |
---|---|
系统变量 | session_track_schema |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
控制服务器是否在当前会话中跟踪默认模式(数据库)的设置,并通知客户端使模式名称可用。
如果模式名称跟踪器被启用,每次设置默认模式时都会发生名称通知,即使新的模式名称与旧的相同。
关于会话状态跟踪的更多信息,请参见第5.1.18节,“服务器跟踪客户端会话状态的变化”。
session_track_state_change
命令行格式 | --session-track-state-change[={OFF|ON}] |
---|---|
系统变量 | session_track_state_change |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
控制服务器是否跟踪当前会话状态的变化,并在发生状态变化时通知客户端。可以为客户会话状态的这些属性报告变化。
- 默认架构(数据库)。
- 系统变量的特定于会话的值。
- 用户定义的变量。
- 临时表。
- 准备好的报表。
如果启用了会话状态跟踪器,那么涉及被跟踪的会话属性的每个变化都会发生通知,即使新的属性值与旧的相同。例如,将一个用户定义的变量设置为其当前值会导致通知。
session_track_state_change变量只控制变化发生时的通知,而不是变化是什么。例如,当默认模式被设置或跟踪的会话系统变量被分配时,会发生状态变化通知,但通知中不包括模式名称或变量值。要接收模式名称或会话系统变量值的通知,请分别使用 session_track_schema 或 session_track_system_variables 系统变量。
::: tip Note
给session_track_state_change本身赋值不被认为是一个状态变化,也不会被报告。然而,如果它的名字列在session_track_system_variables的值中,对它的任何赋值都会导致新值的通知。
:::
关于会话状态跟踪的更多信息,请参见第5.1.18节,“服务器跟踪客户端会话状态的变化”。
session_track_system_variables
命令行格式 | --session-track-system-variables=# |
---|---|
系统变量 | session_track_system_variables |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | String |
默认值 | time_zone , autocommit , character_set_client , character_set_results , character_set_connection |
控制服务器是否跟踪会话系统变量的分配,并通知客户端每个分配变量的名称和值。变量值是一个以逗号分隔的变量列表,用于跟踪分配的变量。默认情况下,时间区、自动提交、character_set_client、character_set_results和character_set_connection的通知被启用。(后三个变量是受SET NAMES影响的变量)。
特殊值*
导致服务器跟踪所有会话变量的分配。如果给定的话,这个值必须由它自己指定,而不包括具体的系统变量名称。
要禁用会话变量分配的通知,将session_track_system_variables设置为空字符串。
如果启用了会话系统变量跟踪,则会对跟踪的会话变量的所有赋值进行通知,即使新值与旧值相同。
关于会话状态跟踪的更多信息,请参见第5.1.18节,“服务器跟踪客户端会话状态的变化”。
session_track_transaction_info
命令行格式 | --session-track-transaction-info=value |
---|---|
系统变量 | session_track_transaction_info |
作用域 | Global , Session |
动态 | Yes |
SET_VAR | No |
类型 | Enumeration |
默认值 | OFF |
Valid Values | OFF STATE CHARACTERISTICS |
控制服务器是否跟踪当前会话中交易的状态和特征,并通知客户端使这些信息可用。这些session_track_transaction_info值是允许的。
-
OFF
: 禁用交易状态跟踪。这是默认的。 -
STATE
: 启用交易状态跟踪,不需要特征跟踪。状态跟踪使客户端能够确定一个事务是否在进行中,以及它是否可以被转移到不同的会话而不被回滚。 -
CHARACTERISTICS
: 启用事务状态跟踪,包括特征跟踪。特征跟踪使客户端能够确定如何在另一个会话中重新启动一个事务,使其具有与原始会话中相同的特征。以下特征与此有关。
ISOLATION LEVEL
READ ONLY
READ WRITE
WITH CONSISTENT SNAPSHOT
为了让客户端安全地将一个事务重新定位到另一个会话,它不仅必须跟踪事务状态,而且还必须跟踪事务特性。此外,客户端必须跟踪 transaction_isolation 和 transaction_read_only 系统变量,以正确确定会话的默认值。要跟踪这些变量,请在session_track_system_variables系统变量的值中列出这些变量)。
关于会话状态跟踪的更多信息,请参见第5.1.18节,“服务器跟踪客户端会话状态的变化”。
sha256_password_auto_generate_rsa_keys
命令行格式 | --sha256-password-auto-generate-rsa-keys[={OFF|ON}] |
---|---|
系统变量 | sha256_password_auto_generate_rsa_keys |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | Boolean |
默认值 | ON |
服务器使用这个变量来决定是否在数据目录中自动生成RSA私钥/公钥对文件,如果它们还不存在的话。
在启动时,如果所有这些条件为真,服务器会在数据目录中自动生成RSA私钥/公钥对文件:sha256_password_auto_generate_rsa_keys或caching_sha2_password_auto_generate_rsa_keys系统变量已启用;没有指定RSA选项;数据目录中缺少RSA文件。这些密钥对文件使通过sha256_password或caching_sha2_password插件认证的账户在未加密的连接上使用RSA进行安全的密码交换;见6.4.1.3节 "SHA-256可插拔认证 "和6.4.1.2节 “缓存SHA-2可插拔认证”。
关于RSA文件自动生成的更多信息,包括文件名称和特征,见第6.3.3.1节,“使用MySQL创建SSL和RSA证书和密钥”
auto_generate_certs系统变量是相关的,但它控制了使用SSL安全连接所需的SSL证书和密钥文件的自动生成。
sha256_password_private_key_path
命令行格式 | --sha256-password-private-key-path=file_name |
---|---|
系统变量 | sha256_password_private_key_path |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
默认值 | private_key.pem |
这个变量的值是sha256_password认证插件的RSA私钥文件的路径名称。如果该文件被命名为相对路径,它将被解释为相对于服务器数据目录。该文件必须是PEM格式。
::: tip Important
因为这个文件存储了一个私钥,它的访问模式应该受到限制,以便只有MySQL服务器可以读取它。
:::
关于sha256_password的信息,见第6.4.1.3节 “SHA-256可插拔认证”。
sha256_password_proxy_users
命令行格式 | --sha256-password-proxy-users[={OFF|ON}] |
---|---|
系统变量 | sha256_password_proxy_users |
作用域 | Global |
动态 | Yes |
SET_VAR | No |
类型 | Boolean |
默认值 | OFF |
这个变量控制sha256_password内置认证插件是否支持代理用户。除非启用check_proxy_users系统变量,否则它没有任何作用。关于用户代理的信息,请参见6.2.18节 “代理用户”。
sha256_password_public_key_path
命令行格式 | --sha256-password-public-key-path=file_name |
---|---|
系统变量 | sha256_password_public_key_path |
作用域 | Global |
动态 | No |
SET_VAR | No |
类型 | File name |
默认值 | public_key.pem |
这个变量的值是sha256_password认证插件的RSA公钥文件的路径名称。如果该文件被命名为相对路径,它将被解释为相对于服务器数据目录。该文件必须是PEM格式。因为这个文件存储了一个公钥,副本可以自由地分发到客户端用户。当使用RSA密码加密连接到服务器时,明确指定公钥的客户必须使用与服务器相同的公钥)。
关于sha256_password的信息,包括客户如何指定RSA公钥的信息,见6.4.1.3节 “SHA-256可插拔认证”。
shared_memory
命令行格式 | --shared-memory[={OFF|ON}] |
---|---|
系统变量 | shared_memory |
作用域 | Global |
动态 | No |
SET_VAR | No |
Platform Specific | Windows |
类型 | Boolean |
默认值 | OFF |
仅限Windows, 服务器是否允许共享内存连接。
shared_memory_base_name
命令行格式 | --shared-memory-base-name=name |
---|---|
系统变量 | shared_memory_base_name |
作用域 | Global |
动态 | No |
SET_VAR | No |
Platform Specific | Windows |
类型 | String |
默认值 | MYSQL |
(仅限Windows。) 用于共享内存连接的共享内存的名称。当在一台物理机器上运行多个MySQL实例时,这很有用。默认名称是MYSQL。该名称是区分大小写的。
这个变量仅在服务器启动时启用shared_memory系统变量以支持共享内存连接时适用。
show_create_table_skip_secondary_engine
命令行格式 | --show-create-table-skip-secondary-engine[={OFF|ON}] |
---|---|
引进 | 8.0.18 |
系统变量 | show_create_table_skip_secondary_engine |
作用域 | Session |
动态 | Yes |
SET_VAR | Yes |
类型 | Boolean |
默认值 | OFF |
启用show_create_table_skip_secondary_engine会导致SECONDARY ENGINE子句被排除在SHOW CREATE TABLE输出和由mysqldump工具转储的CREATE TABLE语句中。
mysqldump提供 --show-create-skip-secondary-engine 选项。当指定时,它在转储操作期间启用 show_create_table_skip_secondary_engine 系统变量。
在不支持show_create_table_skip_secondary_engine变量的MySQL 8.0.18之前的版本上,试图用–show-create-skip-secondary-engine选项进行mysqldump操作会导致错误。
与HeatWave一起使用。见HeatWave用户指南。
show_create_table_verbosity
| 命令行格式