第5章MySQL服务器管理

目录

5.1 MySQL服务器
5.1.1配置服务器
5.1.2服务器配置默认值
5.1.3服务器配置验证
5.1.4服务器选项,系统变量和状态变量参考
5.1.5服务器系统变量参考
5.1.6服务器状态变量参考
5.1.7服务器命令选项
5.1.8服务器系统变量
5.1.9使用系统变量
5.1.10服务器状态变量
5.1.11服务器SQL模式
5.1.12 IPv6支持
5.1.13 MySQL服务器时区支持
5.1.14服务器端帮助支持
5.1.15客户端会话状态更改的服务器跟踪
5.1.16服务器对信号的响应
5.1.17服务器关闭过程
5.2 MySQL数据目录
5.3 mysql系统架构
5.4 MySQL服务器日志
5.4.1选择常规查询日志和慢查询日志输出目的地
5.4.2错误日志
5.4.3常规查询日志
5.4.4二进制日志
5.4.5慢查询日志
5.4.6 DDL日志
5.4.7服务器日志维护
5.5 MySQL服务器组件
5.5.1安装和卸载组件
5.5.2获取服务器组件信息
5.5.3错误日志组件
5.6 MySQL服务器插件
5.6.1安装和卸载插件
5.6.2获取服务器插件信息
5.6.3 MySQL企业线程池
5.6.4重写器查询重写插件
5.6.5 ddl_rewriter插件
5.6.6版本标记
5.7 MySQL服务器用户定义的函数
5.7.1安装和卸载用户定义的功能
5.7.2获取用户自定义的功能信息
5.8在一台机器上运行多个MySQL实例
5.8.1设置多个数据目录
5.8.2在Windows上运行多个MySQL实例
5.8.3在Unix上运行多个MySQL实例
5.8.4在多服务器环境中使用客户端程序

MySQL服务器( mysqld )是完成MySQL安装中大部分工作的主程序。 本章概述了MySQL Server,并介绍了一般服务器管理:

有关管理主题的其他信息,另请参阅:

5.1 MySQL服务器

mysqld 是MySQL服务器。 以下讨论涵盖了这些MySQL服务器配置主题:

  • 服务器支持的启动选项。 您可以在命令行,配置文件或两者上指定这些选项。

  • 服务器系统变量。 这些变量反映了启动选项的当前状态和值,其中一些可以在服务器运行时进行修改。

  • 服务器状态变量。 这些变量包含有关运行时操作的计数器和统

  • 如何设置服务器SQL模式。 此设置修改SQL语法和语义的某些方面,例如,与其他数据库系统的代码兼容,或控制特定情况下的错误处理。

  • 配置和使用IPv6支持。

  • 配置和使用时区支持。

  • 服务器端帮助功能。

  • 服务器关闭过程。 根据表的类型(事务性或非事务性)以及是否使用复制,存在性能和可靠性考虑因素。

有关在MySQL 8.0中添加,弃用或删除的MySQL服务器变量和选项的列表,请参见 第1.5节“在MySQL 8.0中添加,弃用或删除的服务器和状态变量和选项”

注意

并非所有MySQL服务器二进制文件和配置都支持所有存储引擎。 要了解如何确定MySQL服务器安装支持的存储引擎,请参见 第13.7.6.16节“SHOW ENGINES语法”

5.1.1配置服务器

MySQL服务器 mysqld 有许多命令选项和系统变量,可以在启动时设置它们以配置其操作。 要确定服务器使用的缺省命令选项和系统变量值,请执行以下命令:

外壳> mysqld --verbose --help

该命令生成所有 mysqld 选项和可配置系统变量 的列表 它的输出包括默认选项和变量值,看起来像这样:

abort-slave-event-count 0
allow-suspicious-udfs FALSE
存档ON
自动递增 - 增量1
自动增量偏移1
autocommit TRUE
automatic-sp-privileges TRUE
避免 - 时间升级FALSE
back-log 80
basedir /home/jon/bin/mysql-8.0/
...
tmpdir / tmp
transaction-alloc-block-size 8192
事务隔离REPEATABLE-READ
transaction-prealloc-size 4096
transaction-read-only FALSE
transaction-write-set-extraction OFF
updatable-views-with-limit YES
validate-user-plugins TRUE
详细是真的
等待超时28800

要查看服务器在运行时实际使用的当前系统变量值,请连接到它并执行以下语句:

MySQL的> SHOW VARIABLES;

要查看正在运行的服务器的某些统计和状态指示器,请执行以下语句:

MySQL的> SHOW STATUS;

使用 mysqladmin 命令 也可以使用系统变量和状态信息

shell> mysqladmin variables
shell>mysqladmin extended-status

有关所有命令选项,系统变量和状态变量的完整说明,请参阅以下部分:

可从Performance Schema获得更详细的监控信息; 请参见 第26章, MySQL性能架构 此外,MySQL sys 模式是一组对象,可以方便地访问性能模式收集的数据; 请参见 第27章, MySQL sys Schema

如果在命令行上为 mysqld mysqld_safe 指定了一个选项 ,则它仅对该服务器的调用保持有效。 要在每次运行服务器时使用该选项,请将其放在选项文件中。 请参见 第4.2.2.2节“使用选项文件”

5.1.2服务器配置默认值

MySQL服务器有许多操作参数,您可以使用命令行选项或配置文件(选项文件)在服务器启动时更改这些参数。 也可以在运行时更改许多参数。 有关在启动或运行时设置参数的一般说明,请参见 第5.1.7节“服务器命令选项” 第5.1.8节“服务器系统变量”

在Windows上,MySQL Installer与用户交互,并 my.ini 在基本安装目录中 创建一个名为 默认选项文件的文件。

注意

在Windows上, 可能不会显示 .ini .cnf 选项文件扩展名。

完成安装过程后,您可以随时编辑默认选项文件以修改服务器使用的参数。 例如,要在文件中使用参数设置,该参数设置 # 在行的开头 注释 ,请删除 # ,并在必要时修改参数值。 要禁用设置,请 # 在行的开头 添加 或删除它。

对于非Windows平台,在服务器安装或数据目录初始化过程中不会创建默认选项文件。 按照 第4.2.2.2节“使用选项文件”中 给出的说明创建选项文件 如果没有选项文件,服务器只会以其默认设置启动 - 有关如何检查这些设置 请参见 第5.1.2节“服务器配置默认值”

有关选项文件格式和语法的其他信息,请参见 第4.2.2.2节“使用选项文件”

5.1.3服务器配置验证

从MySQL 8.0.16开始,MySQL Server支持一个 --validate-config 选项,可以在不正常运行模式下运行服务器的情况下检查启动配置是否存在问题:

mysqld --validate-config

如果未找到任何错误,则服务器将以退出代码0终止。如果发现错误,服务器将显示诊断消息并以退出代码1终止。例如:

外壳> mysqld --validate-config --no-such-option
2018-11-05T17:50:12.738919Z 0 [错误] [MY-000068] [服务器]未知
选项'--no-such-option'。
2018-11-05T17:50:12.738962Z 0 [错误] [MY-010119] [服务器]正在中止

一旦发现任何错误,服务器就会终止。 要进行其他检查,请更正初始问题并 --validate-config 再次 运行服务器

对于前面的示例, --validate-config 在显示错误消息时 使用 结果,服务器退出代码为1.警告和信息消息也可能会显示,具体取决于 log_error_verbosity 值,但不会立即生成验证终止或退出代码为1例如,此命令会生成多个警告,这两个警告都会显示。 但是没有错误发生,因此退出代码为0:

外壳> mysqld --validate-config --log_error_verbosity=2
         --read-only=s --transaction_read_only=s
2018-11-05T15:43:18.445863Z 0 [警告] [MY-000076] [服务器]选项
'read_only':无法识别布尔值's'。设置为OFF。
2018-11-05T15:43:18.445882Z 0 [警告] [MY-000076] [服务器]选项
'transaction-read-only':无法识别布尔值's'。设置为OFF。

此命令产生相同的警告,但也是一个错误,因此错误消息与警告一起显示,退出代码为1:

外壳> mysqld --validate-config --log_error_verbosity=2
         --no-such-option --read-only=s --transaction_read_only=s
2018-11-05T15:43:53.152886Z 0 [警告] [MY-000076] [服务器]选项
'read_only':无法识别布尔值's'。设置为OFF。
2018-11-05T15:43:53.152913Z 0 [警告] [MY-000076] [服务器]选项
'transaction-read-only':无法识别布尔值's'。设置为OFF。
2018-11-05T15:43:53.164889Z 0 [错误] [MY-000068] [服务器]未知
选项'--no-such-option'。
2018-11-05T15:43:53.165053Z 0 [错误] [MY-010119] [服务器]中止

--validate-config 选项 的范围 仅限于服务器可以在不经历正常启动过程的情况下执行的配置检查。 因此,配置检查不初始化存储引擎和其他插件,组件等,并且不验证与那些未初始化的子系统相关联的选项。

--validate-config 可以在任何时候使用,但在升级后特别有用,以检查先前与旧服务器一起使用的任何选项是否被升级后的服务器视为已弃用或已过时。 例如, tx_read_only 系统变量在MySQL 5.7中已弃用,在8.0中已删除。 假设MySQL 5.7服务器在其 my.cnf 文件中 使用该系统变量运行 ,然后升级到MySQL 8.0。 运行升级的服务器 --validate-config 以检查配置会产生以下结果:

外壳> mysqld --validate-config
2018-11-05T10:40:02.712141Z 0 [错误] [MY-000067] [服务器]未知变量
'tx_read_only = ON'。
2018-11-05T10:40:02.712178Z 0 [错误] [MY-010119] [服务器]正在中止

--validate-config 可以与 --defaults-file 选项一起 使用, 仅验证特定文件中的选项:

外壳> mysqld --defaults-file=./my.cnf-test --validate-config
2018-11-05T10:40:02.712141Z 0 [错误] [MY-000067] [服务器]未知变量
'tx_read_only = ON'。
2018-11-05T10:40:02.712178Z 0 [错误] [MY-010119] [服务器]正在中止

请记住 --defaults-file ,如果指定,则必须是命令行上的第一个选项。 (执行前面的示例,反转选项顺序会产生一条 --defaults-file 本身未知 的消息 。)

5.1.4服务器选项,系统变量和状态变量参考

下表列出了适用于其中的所有命令行选项,系统变量和状态变量 mysqld

该表列出了一个统一列表中的命令行选项(Cmd-line),配置文件中有效的选项(选项文件),服务器系统变量(System Var)和状态变量(Status var),并指示每个选项的位置或变量有效。 如果在命令行或选项文件中设置的服务器选项与相应系统变量的名称不同,则会在相应选项的正下方注明变量名称。 对于系统和状态变量,变量(Var Scope)的范围是Global,Session或两者。 有关设置和使用选项和变量的详细信息,请参阅相应的项目说明。 在适当的情况下,提供有关物品的进一步信息的直接链接。

有关此表的特定于NDB集群的版本,请参见 第22.3.2.5节“NDB集群mysqld选项和变量参考”

表5.1命令行选项,系统变量和状态变量摘要

名称 CMD线 选项文件 系统变量 状态变量 Var范围 动态
中止,从事件计数
Aborted_clients 全球 没有
Aborted_connects 全球 没有
Acl_cache_items_count 全球 没有
activate_all_roles_on_login 全球
admin_address 全球 没有
admin_port 全球 没有
允许可疑-UDF的
ANSI
审计日志
audit_log_buffer_size 全球 没有
audit_log_compression 全球 没有
audit_log_connection_policy 全球
audit_log_current_session 没有
Audit_log_current_size 全球 没有
audit_log_encryption 全球 没有
Audit_log_event_max_drop_size 全球 没有
Audit_log_events 全球 没有
Audit_log_events_filtered 全球 没有
Audit_log_events_lost 全球 没有
Audit_log_events_written 全球 没有
audit_log_exclude_accounts 全球
audit_log_file 全球 没有
audit_log_filter_id 没有
audit_log_flush 全球
audit_log_format 全球 没有
audit_log_include_accounts 全球
audit_log_policy 全球 没有
audit_log_read_buffer_size 不定 不定
audit_log_rotate_on_size 全球
audit_log_statement_policy 全球
audit_log_strategy 全球 没有
Audit_log_total_size 全球 没有
Audit_log_write_waits 全球 没有
authentication_ldap_sasl_auth_method_name 全球
authentication_ldap_sasl_bind_base_dn 全球
authentication_ldap_sasl_bind_root_dn 全球
authentication_ldap_sasl_bind_root_pwd 全球
authentication_ldap_sasl_ca_path 全球
authentication_ldap_sasl_group_search_attr 全球
authentication_ldap_sasl_group_search_filter 全球
authentication_ldap_sasl_init_pool_size 全球
authentication_ldap_sasl_log_status 全球
authentication_ldap_sasl_max_pool_size 全球
authentication_ldap_sasl_server_host 全球
authentication_ldap_sasl_server_port 全球
authentication_ldap_sasl_tls 全球
authentication_ldap_sasl_user_search_attr 全球
authentication_ldap_simple_auth_method_name 全球
authentication_ldap_simple_bind_base_dn 全球
authentication_ldap_simple_bind_root_dn 全球
authentication_ldap_simple_bind_root_pwd 全球
authentication_ldap_simple_ca_path 全球
authentication_ldap_simple_group_search_attr 全球
authentication_ldap_simple_group_search_filter 全球
authentication_ldap_simple_init_pool_size 全球
authentication_ldap_simple_log_status 全球
authentication_ldap_simple_max_pool_size 全球
authentication_ldap_simple_server_host 全球
authentication_ldap_simple_server_port 全球
authentication_ldap_simple_tls 全球
authentication_ldap_simple_user_search_attr 全球
authentication_windows_log_level 全球 没有
authentication_windows_use_principal_name 全球 没有
auto_generate_certs 全球 没有
auto_increment_increment
auto_increment_offset
自动提交
automatic_sp_privileges 全球
avoid_temporal_upgrade 全球
back_log 全球 没有
BASEDIR 全球 没有
big_tables
bind_address 全球 没有
Binlog_cache_disk_use 全球 没有
binlog_cache_size 全球
Binlog_cache_use 全球 没有
二进制日志校验和
binlog_checksum 全球
binlog_direct_non_transactional_updates
二进制日志-DO-DB
binlog_encryption 全球
binlog_error_action 全球
binlog_expire_logs_seconds 全球
binlog_format
binlog_group_commit_sync_delay 全球
binlog_group_commit_sync_no_delay_count 全球
binlog_gtid_simple_recovery 全球 没有
二进制日志,忽略-DB
binlog_max_flush_queue_time 全球
binlog_order_commits 全球
binlog_rotate_encryption_master_key_at_startup 全球 没有
二进制日志行事件-MAX尺寸 全球 没有
binlog_row_image
binlog_row_metadata 全球
binlog_row_value_options
binlog_rows_query_log_events
Binlog_stmt_cache_disk_use 全球 没有
binlog_stmt_cache_size 全球
Binlog_stmt_cache_use 全球 没有
binlog_transaction_dependency_history_size 全球
binlog_transaction_dependency_tracking 全球
block_encryption_mode
bulk_insert_buffer_size
Bytes_received 没有
Bytes_sent 没有
caching_sha2_password_auto_generate_rsa_keys 全球 没有
caching_sha2_password_private_key_path 全球 没有
caching_sha2_password_public_key_path 全球 没有
Caching_sha2_password_rsa_public_key 全球 没有
character_set_client字符
字符集客户端握手
是character_set_connection
character_set_database (注1)
character_set_filesystem
character_set_results
被character_set_server
character_set_system 全球 没有
character_sets_dir 全球 没有
check_proxy_users 全球
chroot环境
collat​​ion_connection是
collat​​ion_database (注1)
collat​​ion_server的
Com_admin_commands 没有
Com_alter_db 没有
Com_alter_event 没有
Com_alter_function 没有
Com_alter_procedure 没有
Com_alter_resource_group 全球 没有
Com_alter_server 没有
Com_alter_table 没有
Com_alter_tablespace 没有
Com_alter_user 没有
Com_alter_user_default_role 全球 没有
Com_analyze 没有
Com_assign_to_keycache 没有
Com_begin 没有
Com_binlog 没有
Com_call_procedure 没有
Com_change_db 没有
Com_change_master 没有
Com_change_repl_filter 没有
Com_check 没有
Com_checksum 没有
Com_commit 没有
Com_create_db 没有
Com_create_event 没有
Com_create_function 没有
Com_create_index 没有
Com_create_procedure 没有
Com_create_resource_group 全球 没有
Com_create_role 全球 没有
Com_create_server 没有
Com_create_table 没有
Com_create_trigger 没有
Com_create_udf 没有
Com_create_user 没有
Com_create_view 没有
Com_dealloc_sql 没有
Com_delete 没有
Com_delete_multi 没有
Com_do 没有
Com_drop_db 没有
Com_drop_event 没有
Com_drop_function 没有
Com_drop_index 没有
Com_drop_procedure 没有
Com_drop_resource_group 全球 没有
Com_drop_role 全球 没有
Com_drop_server 没有
Com_drop_table 没有
Com_drop_trigger 没有
Com_drop_user 没有
Com_drop_view 没有
Com_empty_query 没有
Com_execute_sql 没有
Com_explain_other 没有
Com_flush 没有
Com_get_diagnostics 没有
Com_grant 没有
Com_grant_roles 全球 没有
Com_group_replication_start 全球 没有
Com_group_replication_stop 全球 没有
Com_ha_close 没有
Com_ha_open 没有
Com_ha_read 没有
Com_help 没有
Com_insert 没有
Com_insert_select 没有
Com_install_component 全球 没有
Com_install_plugin 没有
Com_kill 没有
Com_load 没有
Com_lock_tables 没有
Com_optimize 没有
Com_preload_keys 没有
Com_prepare_sql 没有
Com_purge 没有
Com_purge_before_date 没有
Com_release_savepoint 没有
Com_rename_table 没有
Com_rename_user 没有
Com_repair 没有
Com_replace 没有
Com_replace_select 没有
Com_reset 没有
Com_resignal 没有
Com_revoke 没有
Com_revoke_all 没有
Com_revoke_roles 全球 没有
Com_rollback 没有
Com_rollback_to_savepoint 没有
Com_savepoint 没有
Com_select 没有
Com_set_option 没有
Com_set_resource_group 全球 没有
Com_set_role 全球 没有
Com_show_authors 没有
Com_show_binlog_events 没有
Com_show_binlogs 没有
Com_show_charsets 没有
Com_show_collat​​ions 没有
Com_show_contributors 没有
Com_show_create_db 没有
Com_show_create_event 没有
Com_show_create_func 没有
Com_show_create_proc 没有
Com_show_create_table 没有
Com_show_create_trigger 没有
Com_show_create_user 没有
Com_show_databases 没有
Com_show_engine_logs 没有
Com_show_engine_mutex 没有
Com_show_engine_status 没有
Com_show_errors 没有
Com_show_events 没有
Com_show_fields 没有
Com_show_function_code 没有
Com_show_function_status 没有
Com_show_grants 没有
Com_show_keys 没有
Com_show_master_status 没有
Com_show_ndb_status 没有
Com_show_open_tables 没有
Com_show_plugins 没有
Com_show_privileges 没有
Com_show_procedure_code 没有
Com_show_procedure_status 没有
Com_show_processlist 没有
Com_show_profile 没有
Com_show_profiles 没有
Com_show_relaylog_events 没有
Com_show_slave_hosts 没有
Com_show_slave_status 没有
Com_show_status 没有
Com_show_storage_engines 没有
Com_show_table_status 没有
Com_show_tables 没有
Com_show_triggers 没有
Com_show_variables 没有
Com_show_warnings 没有
Com_shutdown 没有
Com_signal 没有
Com_slave_start 没有
Com_slave_stop 没有
Com_stmt_close 没有
Com_stmt_execute 没有
Com_stmt_fetch 没有
Com_stmt_prepare 没有
Com_stmt_reprepare 没有
Com_stmt_reset 没有
Com_stmt_send_long_data 没有
Com_truncate 没有
Com_uninstall_component 全球 没有
Com_uninstall_plugin 没有
Com_unlock_tables 没有
Com_update 没有
Com_update_multi 没有
Com_xa_commit 没有
Com_xa_end 没有
Com_xa_prepare 没有
Com_xa_recover 没有
Com_xa_rollback 没有
Com_xa_start 没有
completion_type
压缩 会议 没有
concurrent_insert 全球
connect_timeout 全球
Connection_control_delay_generated 全球 没有
connection_control_failed_connections_threshold 全球
connection_control_max_connection_delay 全球
connection_control_min_connection_delay 全球
Connection_errors_accept 全球 没有
Connection_errors_internal 全球 没有
Connection_errors_max_connections 全球 没有
Connection_errors_peer_address 全球 没有
Connection_errors_select 全球 没有
Connection_errors_tcpwrap 全球 没有
连接 全球 没有
安慰
核心文件
core_file 全球 没有
create_admin_listener_thread 全球 没有
Created_tmp_disk_tables 没有
Created_tmp_files 全球 没有
Created_tmp_tables 没有
cte_max_recursion_depth
Current_tls_ca 全球 没有
Current_tls_capath 全球 没有
Current_tls_cert 全球 没有
Current_tls_cipher 全球 没有
Current_tls_ciphersuites 全球 没有
Current_tls_crl 全球 没有
Current_tls_crlpath 全球 没有
Current_tls_key 全球 没有
Current_tls_version 全球 没有
daemon_memcached_enable_binlog 全球 没有
daemon_memcached_engine_lib_name 全球 没有
daemon_memcached_engine_lib_path 全球 没有
daemon_memcached_option 全球 没有
daemon_memcached_r_batch_size 全球 没有
daemon_memcached_w_batch_size 全球 没有
守护进程
DATADIR 全球 没有
日期格式 全球 没有
DATETIME_FORMAT 全球 没有
DDL-重写
调试
debug_sync 会议
调试同步超时
default_authentication_plugin 全球 没有
default_collat​​ion_for_utf8mb4
default_password_lifetime 全球
默认存储引擎
- 变量 default_storage_engine
default_table_encryption
默认时区
default_tmp_storage_engine
default_week_format
默认-额外文件
默认文件
默认基团的后缀
DELAY_KEY_WRITE 全球
Delayed_errors 全球 没有
delayed_insert_limit在 全球
Delayed_insert_threads 全球 没有
delayed_insert_timeout 全球
delayed_queue_size 全球
Delayed_writes 全球 没有
DES密钥文件
disabled_storage_engines 全球 没有
disconnect_on_expired_pa​​ssword 全球 没有
可切断从事件计数
div_precision_increment
dragnet.log_error_filter_rules 全球
dragnet.Status 全球 没有
早期插件负载
启用命名管道
- 变量 named_pipe
end_markers_in_json
执行-GTID一致性 全球
enforce_gtid_consistency 全球
eq_range_index_dive_limit
ERROR_COUNT 会议 没有
事件调度 全球
- 变量 event_scheduler 全球
出口信息
expire_logs_days 全球
explicit_defaults_for_timestamp
外部锁定
- 变量 skip_external_locking
external_user 会议 没有
联合
Firewall_access_denied 全球 没有
Firewall_access_granted 全球 没有
Firewall_cached_entries 全球 没有
红晕 全球
Flush_commands 全球 没有
flush_time 全球
FOREIGN_KEY_CHECKS
ft_boolean_syntax 全球
ft_max_word_len 全球 没有
的ft_min_word_len 全球 没有
ft_query_expansion_limit 全球 没有
ft_stopword_file 全球 没有
GDB
通用日志 全球
- 变量 general_log 全球
general_log_file 全球
group_concat_max_len
group_replication_allow_local_disjoint_gtids_join 全球
group_replication_allow_local_lower_version_join 全球
group_replication_auto_increment_increment 全球
group_replication_autorejoin_tries 全球
group_replication_bootstrap_group 全球
group_replication_communication_debug_options 全球
group_replication_communication_max_message_size 全球
group_replication_components_stop_timeout 全球
group_replication_compression_threshold 全球
group_replication_consistency
group_replication_enforce_update_everywhere_checks 全球
group_replication_exit_state_action 全球
group_replication_flow_control_applier_threshold 全球
group_replication_flow_control_certifier_threshold 全球
group_replication_flow_control_hold_percent 全球
group_replication_flow_control_max_commit_quota 全球
group_replication_flow_control_member_quota_percent 全球
group_replication_flow_control_min_quota 全球
group_replication_flow_control_min_recovery_quota 全球
group_replication_flow_control_mode 全球
group_replication_flow_control_period 全球
group_replication_flow_control_release_percent 全球
group_replication_force_members 全球
group_replication_group_name 全球
group_replication_group_seeds 全球
group_replication_gtid_assignment_block_size 全球
group_replication_ip_whitelist 全球
group_replication_local_address 全球
group_replication_member_expel_timeout 全球
group_replication_member_weight 全球
group_replication_message_cache_size 全球
group_replication_poll_spin_loops 全球
group_replication_primary_member 全球 没有
group_replication_recovery_complete_at 全球
group_replication_recovery_get_public_key 全球
group_replication_recovery_public_key_path 全球
group_replication_recovery_reconnect_interval 全球
group_replication_recovery_retry_count 全球
group_replication_recovery_ssl_ca 全球
group_replication_recovery_ssl_capath 全球
group_replication_recovery_ssl_cert 全球
group_replication_recovery_ssl_cipher 全球
group_replication_recovery_ssl_crl 全球
group_replication_recovery_ssl_crlpath 全球
group_replication_recovery_ssl_key 全球
group_replication_recovery_ssl_verify_server_cert 全球
group_replication_recovery_use_ssl 全球
group_replication_single_primary_mode 全球
group_replication_ssl_mode 全球
group_replication_start_on_boot 全球
group_replication_transaction_size_limit 全球
group_replication_unreachable_majority_timeout 全球
gtid_executed 不定 没有
GTID执行的压缩周期
- 变量 gtid_executed_compression_period
gtid_executed_compression_period 全球
GTID模式 全球
- 变量 gtid_mode 全球
gtid_mode 全球
gtid_next 会议
gtid_owned 没有
gtid_purged 全球
Handler_commit 没有
Handler_delete 没有
Handler_discover 没有
Handler_external_lock 没有
Handler_mrr_init 没有
Handler_prepare 没有
Handler_read_first 没有
Handler_read_key 没有
Handler_read_last 没有
Handler_read_next 没有
Handler_read_prev 没有
Handler_read_rnd 没有
Handler_read_rnd_next 没有
Handler_rollback 没有
Handler_savepoint 没有
Handler_savepoint_rollback 没有
Handler_update 没有
Handler_write 没有
have_compress 全球 没有
have_crypt 全球 没有
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 全球
主机名 全球 没有
身分 会议
忽略-内置-的InnoDB 全球 没有
- 变量 ignore_builtin_innodb 全球 没有
immediate_server_version 会议
information_schema_stats_expiry
init_connect 全球
初始化文件 全球 没有
- 变量 init_file 全球 没有
init_slave 全球
初始化
初始化不安全
InnoDB的
innodb_adaptive_flushing 全球
innodb_adaptive_flushing_lwm 全球
innodb_adaptive_hash_index 全球
innodb_adaptive_hash_index_parts 全球 没有
innodb_adaptive_max_sleep_delay 全球
innodb_api_bk_commit_interval 全球
innodb_api_disable_rowlock 全球 没有
innodb_api_enable_binlog 全球 没有
innodb_api_enable_mdl 全球 没有
innodb_api_trx_level 全球
innodb_autoextend_increment 全球
innodb_autoinc_lock_mode 全球 没有
Innodb_available_undo_logs 全球 没有
innodb_background_drop_list_empty 全球
Innodb_buffer_pool_bytes_data 全球 没有
Innodb_buffer_pool_bytes_dirty 全球 没有
innodb_buffer_pool_chunk_size 全球 没有
innodb_buffer_pool_debug 全球 没有
innodb_buffer_pool_dump_at_shutdown 全球
innodb_buffer_pool_dump_now 全球
innodb_buffer_pool_dump_pct 全球
Innodb_buffer_pool_dump_status 全球 没有
innodb_buffer_pool_filename 全球
innodb_buffer_pool_in_core_file 全球
innodb_buffer_pool_instances 全球 没有
innodb_buffer_pool_load_abort 全球
innodb_buffer_pool_load_at_startup 全球 没有
innodb_buffer_pool_load_now 全球
Innodb_buffer_pool_load_status 全球 没有
Innodb_buffer_pool_pages_data 全球 没有
Innodb_buffer_pool_pages_dirty 全球 没有
Innodb_buffer_pool_pages_flushed 全球 没有
Innodb_buffer_pool_pages_free 全球 没有
Innodb_buffer_pool_pages_latched 全球 没有
Innodb_buffer_pool_pages_misc 全球 没有
Innodb_buffer_pool_pages_total 全球 没有
Innodb_buffer_pool_read_ahead 全球 没有
Innodb_buffer_pool_read_ahead_evicted 全球 没有
Innodb_buffer_pool_read_ahead_rnd 全球 没有
Innodb_buffer_pool_read_requests 全球 没有
Innodb_buffer_pool_reads 全球 没有
Innodb_buffer_pool_resize_status 全球 没有
innodb_buffer_pool_size 全球
Innodb_buffer_pool_wait_free 全球 没有
Innodb_buffer_pool_write_requests 全球 没有
innodb_change_buffer_max_size 全球
innodb_change_buffering 全球
innodb_change_buffering_debug 全球
innodb_checkpoint_disabled 全球
innodb_checksum_algorithm 全球
innodb_cmp_per_index_enabled 全球
innodb_commit_concurrency 全球
innodb_compress_debug 全球
innodb_compression_failure_threshold_pct 全球
innodb_compression_level 全球
innodb_compression_pad_pct_max 全球
innodb_concurrency_tickets 全球
innodb_data_file_path中 全球 没有
Innodb_data_fsyncs 全球 没有
innodb_data_home_dir 全球 没有
Innodb_data_pending_fsyncs 全球 没有
Innodb_data_pending_reads 全球 没有
Innodb_data_pending_writes 全球 没有
Innodb_data_read 全球 没有
Innodb_data_reads 全球 没有
Innodb_data_writes 全球 没有
Innodb_data_written 全球 没有
Innodb_dblwr_pages_written 全球 没有
Innodb_dblwr_writes 全球 没有
innodb_ddl_log_crash_reset_debug 全球
innodb_deadlock_detect 全球
innodb_dedicated_server 全球 没有
innodb_default_row_format 全球
innodb_directories 全球 没有
innodb_disable_sort_file_cache 全球
innodb_doublewrite 全球 没有
innodb_fast_shutdown 全球
innodb_fil_make_page_dirty_debug 全球
innodb_file_per_table 全球
innodb_fill_factor 全球
innodb_flush_log_at_timeout 全球
的innodb_flush_log_at_trx_commit 全球
innodb_flush_method 全球 没有
innodb_flush_neighbors 全球
innodb_flush_sync 全球
innodb_flushing_avg_loops 全球
innodb_force_load_corrupted 全球 没有
innodb_force_recovery 全球 没有
innodb_fsync_threshold 全球
innodb_ft_aux_table 全球
innodb_ft_cache_size 全球 没有
innodb_ft_enable_diag_print 全球
innodb_ft_enable_stopword
innodb_ft_max_token_size 全球 没有
innodb_ft_min_token_size 全球 没有
innodb_ft_num_word_optimize 全球
innodb_ft_result_cache_limit 全球
innodb_ft_server_stopword_table 全球
innodb_ft_sort_pll_degree 全球 没有
innodb_ft_total_cache_size 全球 没有
innodb_ft_user_stopword_table
Innodb_have_atomic_builtins 全球 没有
innodb_io_capacity 全球
innodb_io_capacity_max 全球
innodb_limit_optimistic_insert_debug 全球
innodb_lock_wait_timeout
innodb_log_buffer_size 全球 不定
innodb_log_checkpoint_fuzzy_now 全球
innodb_log_checkpoint_now 全球
innodb_log_checksums 全球
innodb_log_compressed_pa​​ges 全球
innodb_log_file_size 全球 没有
innodb_log_files_in_group 全球 没有
innodb_log_group_home_dir 全球 没有
innodb_log_spin_cpu_abs_lwm 全球
innodb_log_spin_cpu_pct_hwm 全球
innodb_log_wait_for_flush_spin_hwm 全球
Innodb_log_waits 全球 没有
innodb_log_write_ahead_size 全球
Innodb_log_write_requests 全球 没有
Innodb_log_writes 全球 没有
innodb_lru_scan_depth 全球
innodb_max_dirty_pages_pct 全球
innodb_max_dirty_pages_pct_lwm 全球
innodb_max_purge_lag 全球
innodb_max_purge_lag_delay 全球
innodb_max_undo_log_size 全球
innodb_merge_threshold_set_all_debug 全球
innodb_monitor_disable 全球
innodb_monitor_enable 全球
innodb_monitor_reset 全球
innodb_monitor_reset_all 全球
Innodb_num_open_files 全球 没有
innodb_numa_interleave 全球 没有
innodb_old_blocks_pct 全球
innodb_old_blocks_time 全球
innodb_online_alter_log_max_size 全球
innodb_open_files 全球 没有
innodb_optimize_fulltext_only 全球
Innodb_os_log_fsyncs 全球 没有
Innodb_os_log_pending_fsyncs 全球 没有
Innodb_os_log_pending_writes 全球 没有
Innodb_os_log_written 全球 没有
innodb_page_cleaners 全球 没有
Innodb_page_size 全球 没有
innodb_page_size 全球 没有
Innodb_pages_created 全球 没有
Innodb_pages_read 全球 没有
Innodb_pages_written 全球 没有
innodb_parallel_read_threads 会议
innodb_print_all_deadlocks 全球
innodb_print_ddl_logs 全球
innodb_purge_batch_size 全球
innodb_purge_rseg_truncate_frequency 全球
innodb_purge_threads 全球 没有
innodb_random_read_ahead 全球
innodb_read_ahead_threshold 全球
innodb_read_io_threads 全球 没有
innodb_read_only 全球 没有
innodb_redo_log_encrypt 全球
innodb_replication_delay 全球
innodb_rollback_on_timeout 全球 没有
innodb_rollback_segments 全球
Innodb_row_lock_current_waits 全球 没有
Innodb_row_lock_time 全球 没有
Innodb_row_lock_time_avg 全球 没有
Innodb_row_lock_time_max 全球 没有
Innodb_row_lock_waits 全球 没有
Innodb_rows_deleted 全球 没有
Innodb_rows_inserted 全球 没有
Innodb_rows_read 全球 没有
Innodb_rows_updated 全球 没有
innodb_saved_pa​​ge_number_debug 全球
innodb_scan_directories 全球 没有
innodb_sort_buffer_size 全球 没有
innodb_spin_wait_delay 全球
innodb_spin_wait_pause_multiplier 全球
innodb_stats_auto_recalc 全球
innodb_stats_include_delete_marked 全球
innodb_stats_method 全球
innodb_stats_on_metadata 全球
innodb_stats_persistent 全球
innodb_stats_persistent_sample_pages 全球
innodb_stats_transient_sample_pages 全球
InnoDB的状态文件
innodb_status_output 全球
innodb_status_output_locks 全球
innodb_strict_mode
innodb_sync_array_size 全球 没有
innodb_sync_debug 全球 没有
innodb_sync_spin_loops 全球
innodb_table_locks
innodb_temp_data_file_path 全球 没有
innodb_temp_tablespaces_dir 全球 没有
innodb_thread_concurrency参数 全球
innodb_thread_sleep_delay 全球
innodb_tmpdir
Innodb_truncated_status_writes 全球 没有
innodb_trx_purge_view_update_only_debug 全球
innodb_trx_rseg_n_slots_debug 全球
innodb_undo_directory 全球 没有
innodb_undo_log_encrypt 全球
innodb_undo_log_truncate 全球
innodb_undo_logs 全球
innodb_undo_tablespaces 全球 不定
innodb_use_native_aio 全球 没有
innodb_version 全球 没有
innodb_write_io_threads 全球 没有
INSERT_ID 会议
安装
安装手动
interactive_timeout
internal_tmp_disk_storage_engine 全球
internal_tmp_mem_storage_engine
join_buffer_size
keep_files_on_create
Key_blocks_not_flushed 全球 没有
Key_blocks_unused 全球 没有
Key_blocks_used 全球 没有
key_buffer_size的 全球
key_cache_age_threshold 全球
key_cache_block_size 全球
key_cache_division_limit 全球
Key_read_requests 全球 没有
Key_reads 全球 没有
Key_write_requests 全球 没有
Key_writes将 全球 没有
keyring_aws_cmk_id 全球
keyring_aws_conf_file 全球 没有
keyring_aws_data_file 全球 没有
keyring_aws_region 全球
keyring_encrypted_file_data 全球
keyring_encrypted_file_password 全球
keyring_file_data 全球
钥匙圈迁移目的地
钥匙圈迁移主机
钥匙圈迁移密码
钥匙圈迁移端口
钥匙圈迁移插座
钥匙圈迁移源
钥匙圈迁移用户
keyring_okv_conf_dir 全球
keyring_operations 全球
语言 全球 没有
large_files_support 全球 没有
large_page_size 全球 没有
大型网页 全球 没有
- 变量 large_pages 全球 没有
LAST_INSERT_ID 会议
Last_query_cost 会议 没有
Last_query_partial_plans 会议 没有
LC-消息
- 变量 lc_messages
LC-消息-DIR 全球 没有
- 变量 lc_messages_dir 全球 没有
lc_time_names
执照 全球 没有
local_infile 全球
本地服务
的lock_order 全球 没有
lock_order_debug_loop 全球 没有
lock_order_debug_missing_arc 全球 没有
lock_order_debug_missing_key 全球 没有
lock_order_debug_missing_unlock 全球 没有
lock_order_dependencies 全球 没有
lock_order_extra_dependencies 全球 没有
lock_order_output_directory 全球 没有
lock_order_print_txt 全球 没有
lock_order_trace_loop 全球 没有
lock_order_trace_missing_arc 全球 没有
lock_order_trace_missing_key 全球 没有
lock_order_trace_missing_unlock 全球 没有
lock_wait_timeout
Locked_connects 全球 没有
locked_in_memory 全球 没有
登录斌
log_bin 全球 没有
log_bin_basename 全球 没有
登录斌指数
log_bin_index 全球 没有
登录彬信任功能创造者 全球
- 变量 log_bin_trust_function_creators 全球
登录斌用-V1-行活动 全球 没有
- 变量 log_bin_use_v1_row_events 全球 没有
log_bin_use_v1_row_events 全球 没有
log_builtin_as_identified_by_password 全球
登录错误 全球 没有
- 变量 log_error 全球 没有
log_error_filter_rules 全球
log_error_services 全球
log_error_suppression_list 全球
log_error_verbosity 全球
登录ISAM
log_output 全球
日志查询,未使用的索引 全球
- 变量 log_queries_not_using_indexes 全球
登录生
日志短格式
登录奴隶更新 全球 没有
- 变量 log_slave_updates 全球 没有
log_slave_updates 全球 没有
log_slow_admin_statements 全球
log_slow_extra 全球
log_slow_slave_statements 全球
log_statements_unsafe_for_binlog 全球
log_syslog 全球
log_syslog_facility 全球
log_syslog_include_pid 全球
log_syslog_tag 全球
登录-TC
登录-TC-大小
log_throttle_queries_not_using_indexes 全球
log_timestamps 全球
日志警告 全球
- 变量 log_warnings 全球
long_query_time时间
低优先级的更新
- 变量 low_priority_updates
lower_case_file_system 全球 没有
的lower_case_table_names 全球 没有
mandatory_roles 全球
主信息文件
主信息存储库
- 变量 master_info_repository
master_info_repository 全球
主重试次数
主验证校验和
- 变量 master_verify_checksum
master_verify_checksum 全球
max_allowed_pa​​cket的
max_binlog_cache_size 全球
MAX-二进制日志转储事件
max_binlog_size 全球
max_binlog_stmt_cache_size 全球
max_connect_errors次 全球
MAX_CONNECTIONS 全球
max_delayed_threads
max_digest_length 全球 没有
max_error_count
的max_execution_time
Max_execution_time_exceeded 没有
Max_execution_time_set 没有
Max_execution_time_set_failed 没有
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_relay_log_size 全球
max_seeks_for_key
max_sort_length个
max_sp_recursion_depth
max_tmp_tables
Max_used_connections 全球 没有
Max_used_connections_time 全球 没有
MAX_USER_CONNECTIONS
max_write_lock_count 全球
mecab_charset 全球 没有
mecab_rc_file 全球 没有
MEMLOCK
- 变量 locked_in_memory
metadata_locks_cache_size 全球 没有
metadata_locks_hash_instances 全球 没有
分钟审查行限
- 变量 min_examined_row_limit
multi_range_count
的myisam块大小
myisam_data_pointer_size 全球
myisam_max_sort_file_size 全球
myisam_mmap_size 全球 没有
MyISAM数据-恢复选项
- 变量 myisam_recover_options
myisam_recover_options 全球 没有
myisam_repair_threads
myisam_sort_buffer_size
myisam_stats_method
myisam_use_mmap 全球
mysql_firewall_mode 全球
mysql_firewall_trace 全球
mysql_native_password_proxy_users 全球
mysqlx
Mysqlx_aborted_clients 全球 没有
Mysqlx_address 全球 没有
mysqlx_bind_address 全球 没有
Mysqlx_bytes_received 没有
Mysqlx_bytes_sent 没有
mysqlx_connect_timeout 全球
Mysqlx_connection_accept_errors 没有
Mysqlx_connection_errors 没有
Mysqlx_connections_accepted 全球 没有
Mysqlx_connections_closed 全球 没有
Mysqlx_connections_rejected 全球 没有
Mysqlx_crud_create_view 没有
Mysqlx_crud_delete 没有
Mysqlx_crud_drop_view 没有
Mysqlx_crud_find 没有
Mysqlx_crud_insert 没有
Mysqlx_crud_modify_view 没有
Mysqlx_crud_update 没有
Mysqlx_cursor_close 没有
Mysqlx_cursor_fetch 没有
Mysqlx_cursor_open 没有
mysqlx_document_id_unique_prefix 全球
mysqlx_enable_hello_notice 全球
Mysqlx_errors_sent 没有
Mysqlx_errors_unknown_message_type 没有
Mysqlx_expect_close 没有
Mysqlx_expect_open 没有
mysqlx_idle_worker_thread_timeout 全球
Mysqlx_init_error 没有
mysqlx_interactive_timeout 全球
mysqlx_max_allowed_pa​​cket 全球
mysqlx_max_connections 全球
mysqlx_min_worker_threads 全球
Mysqlx_notice_global_sent 没有
Mysqlx_notice_other_sent 没有
Mysqlx_notice_warning_sent 没有
Mysqlx_notified_by_group_replication 没有
Mysqlx_port 全球 没有
mysqlx_port 全球 没有
mysqlx_port_open_timeout 全球 没有
Mysqlx_prep_deallocate 没有
Mysqlx_prep_execute 没有
Mysqlx_prep_prepare 没有
mysqlx_read_timeout 会议
Mysqlx_rows_sent 没有
Mysqlx_sessions 全球 没有
Mysqlx_sessions_accepted 全球 没有
Mysqlx_sessions_closed 全球 没有
Mysqlx_sessions_fatal_error 全球 没有
Mysqlx_sessions_killed 全球 没有
Mysqlx_sessions_rejected 全球 没有
Mysqlx_socket 全球 没有
mysqlx_socket 全球 没有
Mysqlx_ssl_accept_renegotiates 全球 没有
Mysqlx_ssl_accepts 全球 没有
Mysqlx_ssl_active 没有
mysqlx_ssl_ca 全球 没有
mysqlx_ssl_capath 全球 没有
mysqlx_ssl_cert 全球 没有
Mysqlx_ssl_cipher 没有
mysqlx_ssl_cipher 全球 没有
Mysqlx_ssl_cipher_list 没有
mysqlx_ssl_crl 全球 没有
mysqlx_ssl_crlpath 全球 没有
Mysqlx_ssl_ctx_verify_depth 没有
Mysqlx_ssl_ctx_verify_mode 没有
Mysqlx_ssl_finished_accepts 全球 没有
mysqlx_ssl_key 全球 没有
Mysqlx_ssl_server_not_after 全球 没有
Mysqlx_ssl_server_not_before 全球 没有
Mysqlx_ssl_verify_depth 全球 没有
Mysqlx_ssl_verify_mode 全球 没有
Mysqlx_ssl_version 没有
Mysqlx_stmt_create_collection 没有
Mysqlx_stmt_create_collection_index 没有
Mysqlx_stmt_disable_notices 没有
Mysqlx_stmt_drop_collection 没有
Mysqlx_stmt_drop_collection_index 没有
Mysqlx_stmt_enable_notices 没有
Mysqlx_stmt_ensure_collection 没有
Mysqlx_stmt_execute_mysqlx 没有
Mysqlx_stmt_execute_sql 没有
Mysqlx_stmt_execute_xplugin 没有
Mysqlx_stmt_kill_client 没有
Mysqlx_stmt_list_clients 没有
Mysqlx_stmt_list_notices 没有
Mysqlx_stmt_list_objects 没有
Mysqlx_stmt_ping 没有
mysqlx_wait_timeout 会议
Mysqlx_worker_threads 全球 没有
Mysqlx_worker_threads_active 全球 没有
mysqlx_write_timeout 会议
named_pipe 全球 没有
named_pipe_full_access_group 全球 没有
NDB-允许,复制,ALTER表
Ndb_api_bytes_received_count 全球 没有
Ndb_api_bytes_received_count_session 会议 没有
Ndb_api_bytes_received_count_slave 全球 没有
Ndb_api_bytes_sent_count 全球 没有
Ndb_api_bytes_sent_count_session 会议 没有
Ndb_api_bytes_sent_count_slave 全球 没有
Ndb_api_event_bytes_count 全球 没有
Ndb_api_event_bytes_count_injector 全球 没有
Ndb_api_event_data_count 全球 没有
Ndb_api_event_data_count_injector 全球 没有
Ndb_api_event_nondata_count 全球 没有
Ndb_api_event_nondata_count_injector 全球 没有
Ndb_api_pk_op_count 全球 没有
Ndb_api_pk_op_count_session 会议 没有
Ndb_api_pk_op_count_slave 全球 没有
Ndb_api_pruned_scan_count 全球 没有
Ndb_api_pruned_scan_count_session 会议 没有
Ndb_api_pruned_scan_count_slave 全球 没有
Ndb_api_range_scan_count 全球 没有
Ndb_api_range_scan_count_session 会议 没有
Ndb_api_range_scan_count_slave 全球 没有
Ndb_api_read_row_count 全球 没有
Ndb_api_read_row_count_session 会议 没有
Ndb_api_read_row_count_slave 全球 没有
Ndb_api_scan_batch_count 全球 没有
Ndb_api_scan_batch_count_session 会议 没有
Ndb_api_scan_batch_count_slave 全球 没有
Ndb_api_table_scan_count 全球 没有
Ndb_api_table_scan_count_session 会议 没有
Ndb_api_table_scan_count_slave 全球 没有
Ndb_api_trans_abort_count 全球 没有
Ndb_api_trans_abort_count_session 会议 没有
Ndb_api_trans_abort_count_slave 全球 没有
Ndb_api_trans_close_count 全球 没有
Ndb_api_trans_close_count_session 会议 没有
Ndb_api_trans_close_count_slave 全球 没有
Ndb_api_trans_commit_count 全球 没有
Ndb_api_trans_commit_count_session 会议 没有
Ndb_api_trans_commit_count_slave 全球 没有
Ndb_api_trans_local_read_row_count 全球 没有
Ndb_api_trans_local_read_row_count_session 会议 没有
Ndb_api_trans_local_read_row_count_slave 全球 没有
Ndb_api_trans_start_count 全球 没有
Ndb_api_trans_start_count_session 会议 没有
Ndb_api_trans_start_count_slave 全球 没有
Ndb_api_uk_op_count 全球 没有
Ndb_api_uk_op_count_session 会议 没有
Ndb_api_uk_op_count_slave 全球 没有
Ndb_api_wait_exec_complete_count 全球 没有
Ndb_api_wait_exec_complete_count_session 会议 没有
Ndb_api_wait_exec_complete_count_slave 全球 没有
Ndb_api_wait_meta_request_count 全球 没有
Ndb_api_wait_meta_request_count_session 会议 没有
Ndb_api_wait_meta_request_count_slave 全球 没有
Ndb_api_wait_nanos_count 全球 没有
Ndb_api_wait_nanos_count_session 会议 没有
Ndb_api_wait_nanos_count_slave 全球 没有
Ndb_api_wait_scan_result_count 全球 没有
Ndb_api_wait_scan_result_count_session 会议 没有
Ndb_api_wait_scan_result_count_slave 全球 没有
ndb_autoincrement_prefetch_sz
NDB批量大小 全球 没有
- 变量 :ndb_batch_size 全球 没有
NDB二进制大对象读取批次字节
- 变量 :ndb_blob_read_batch_bytes
NDB二进制大对象写入批字节
- 变量 :ndb_blob_write_batch_bytes
ndb_cache_check_time 全球
ndb_clear_apply_status 全球
NDB集群连接池 全球 没有
NDB集群连接池,nodeids 全球 没有
Ndb_cluster_node_id 全球 没有
Ndb_config_from_host 没有
Ndb_config_from_port 没有
Ndb_conflict_fn_epoch 全球 没有
Ndb_conflict_fn_epoch_trans 全球 没有
Ndb_conflict_fn_epoch2 全球 没有
Ndb_conflict_fn_epoch2_trans 全球 没有
Ndb_conflict_fn_max 全球 没有
Ndb_conflict_fn_old 全球 没有
Ndb_conflict_last_conflict_epoch 全球 没有
Ndb_conflict_last_stable_epoch 全球 没有
Ndb_conflict_reflected_op_discard_count 全球 没有
Ndb_conflict_reflected_op_prepare_count 全球 没有
Ndb_conflict_refresh_op_count 全球 没有
Ndb_conflict_trans_conflict_commit_count 全球 没有
Ndb_conflict_trans_detect_iter_count 全球 没有
Ndb_conflict_trans_reject_count 全球 没有
Ndb_conflict_trans_row_conflict_count 全球 没有
Ndb_conflict_trans_row_reject_count 全球 没有
NDB-CONNECTSTRING
ndb_data_node_neighbour 全球
NDB默认列格式 全球
- 变量 ndb_default_column_format 全球
ndb_default_column_format 全球
NDB递延约束
- 变量 ndb_deferred_constraints
ndb_deferred_constraints
NDB分布 全球
- 变量 ndb_distribution 全球
ndb_distribution 全球
Ndb_epoch_delete_delete_count 全球 没有
ndb_eventbuffer_free_percent 全球
ndb_eventbuffer_max_alloc 全球
Ndb_execute_count 全球 没有
ndb_extra_logging 全球
ndb_force_send
ndb_fully_replicated
ndb_index_stat_enable
ndb_index_stat_option
ndb_join_pushdown
Ndb_last_commit_epoch_server 全球 没有
Ndb_last_commit_epoch_session 会议 没有
NDB日志申请状态 全球 没有
- 变量 ndb_log_apply_status 全球 没有
ndb_log_apply_status 全球 没有
ndb_log_bin
ndb_log_binlog_index 全球
NDB-LOG-空时代 全球
- 变量 ndb_log_empty_epochs 全球
ndb_log_empty_epochs 全球
NDB日志空更新 全球
- 变量 ndb_log_empty_update 全球
ndb_log_empty_update 全球
NDB-LOG-异读
- 变量 ndb_log_exclusive_reads
ndb_log_exclusive_reads
NDB-数原稿 全球 没有
- 变量 ndb_log_orig 全球 没有
ndb_log_orig 全球 没有
NDB-数事务id 全球 没有
- 变量 ndb_log_transaction_id 全球 没有
ndb_log_transaction_id 全球 没有
NDB日志更新,如写 全球
- 变量 :ndb_log_update_as_write 全球
NDB日志更新,最小 全球
- 变量 :ndb_log_update_minimal 全球
ndb_log_updated_only 全球
ndb_metadata_check 全球
ndb_metadata_check_interval 全球
Ndb_metadata_detected_count 全球 没有
NDB-mgmd主机
NDB-NODEID 全球 没有
Ndb_number_of_data_nodes 全球 没有
NDB优化延迟 全球
- 变量 :ndb_optimization_delay 全球
ndb_optimized_node_selection 全球 没有
Ndb_pruned_scan_count 全球 没有
Ndb_pushed_queries_defined 全球 没有
Ndb_pushed_queries_dropped 全球 没有
Ndb_pushed_queries_executed 全球 没有
Ndb_pushed_reads 全球 没有
ndb_read_backup 全球
NDB-RECV线程激活阈值
- 变量 ndb_recv_thread_activation_threshold
ndb_recv_thread_activation_threshold 全球
NDB-recv的线程CPU面罩
- 变量 ndb_recv_thread_cpu_mask
ndb_recv_thread_cpu_mask 全球
ndb_report_thresh_binlog_epoch_slip 全球
ndb_report_thresh_binlog_mem_usage 全球
ndb_row_checksum
Ndb_scan_count 全球 没有
NDB-模式 - 距离超时 全球 没有
- 变量 :ndb_schema_dist_timeout 全球 没有
ndb_show_foreign_key_mock_tables 全球
ndb_slave_conflict_role 全球
Ndb_slave_max_replicated_epoch 全球 没有
Ndb_system_name 全球 没有
ndb_table_no_logging 会议
ndb_table_temporary 会议
Ndb_trans_hint_count_session 没有
NDB-TRANSID MySQL的连接,地图
ndb_use_copying_alter_table 没有
ndb_use_exact_count
ndb_use_transactions
ndb_version 全球 没有
ndb_version_string 全球 没有
NDB-等待连接 全球 没有
NDB-等待安装 全球 没有
NDBCLUSTER
ndbinfo
ndbinfo_database 全球 没有
ndbinfo_max_bytes
ndbinfo_max_rows
ndbinfo_offline 全球
ndbinfo_show_hidden
ndbinfo_table_prefix
ndbinfo_version 全球 没有
的net_buffer_length
net_read_timeout
net_retry_count
net_write_timeout
ngram_token_size 全球 没有
没有-DD-升级
无违约
无监控
Not_flushed_delayed_rows 全球 没有
离线模式 全球
全球 没有
old_alter_table
old_passwords
旧式 - 用户限制
Ongoing_anonymous_gtid_violating_transaction_count 全球 没有
Ongoing_anonymous_transaction_count 全球 没有
Ongoing_automatic_gtid_violating_transaction_count 全球 没有
Open_files 全球 没有
open_files_limit 全球 没有
Open_streams 全球 没有
Open_table_definitions 全球 没有
Open_tables 没有
Opened_files 全球 没有
Opened_table_definitions 没有
opened_tables的 没有
optimizer_prune_level
optimizer_search_depth
optimizer_switch
optimizer_trace
optimizer_trace_features
optimizer_trace_limit
optimizer_trace_max_mem_size
optimizer_trace_offset
original_commit_timestamp 会议
original_server_version 会议
parser_max_mem_size
partial_revokes 全球
PASSWORD_HISTORY 全球
password_require_current 全球
password_reuse_interval 全球
performance_schema 全球 没有
Performance_schema_accounts_lost 全球 没有
performance_schema_accounts_size 全球 没有
Performance_schema_cond_classes_lost 全球 没有
Performance_schema_cond_instances_lost 全球 没有
性能架构消费者的事件,阶段电流
性能架构消费者的事件,阶段历史
性能架构消费者的事件,阶段 - 历史悠久
性能架构消费者的事件陈述电流
性能架构消费者的事件陈述历史
性能架构消费者的事件陈述历史长
性能架构的消费事件,交易流
性能架构的消费事件,交易历史
性能架构的消费事件,交易历史长
性能架构的消费活动,等待电流
性能架构的消费活动,等待历史
性能架构的消费活动,等待历史长
性能架构的消费全球仪器仪表
性能架构的消费报表消化
性能架构消费者线程仪表
Performance_schema_digest_lost 全球 没有
performance_schema_digests_size 全球 没有
performance_schema_error_size 全球 没有
performance_schema_events_stages_history_long_size 全球 没有
performance_schema_events_stages_history_size 全球 没有
performance_schema_events_statements_history_long_size 全球 没有
performance_schema_events_statements_history_size 全球 没有
performance_schema_events_transactions_history_long_size 全球 没有
performance_schema_events_transactions_history_size 全球 没有
performance_schema_events_waits_history_long_size 全球 没有
performance_schema_events_waits_history_size 全球 没有
Performance_schema_file_classes_lost 全球 没有
Performance_schema_file_handles_lost 全球 没有
Performance_schema_file_instances_lost 全球 没有
Performance_schema_hosts_lost 全球 没有
performance_schema_hosts_size 全球 没有
Performance_schema_index_stat_lost 全球 没有
性能架构仪
Performance_schema_locker_lost 全球 没有
performance_schema_max_cond_classes 全球 没有
performance_schema_max_cond_instances 全球 没有
performance_schema_max_digest_length 全球 没有
performance_schema_max_digest_sample_age 全球
performance_schema_max_file_classes 全球 没有
performance_schema_max_file_handles 全球 没有
performance_schema_max_file_instances 全球 没有
performance_schema_max_index_stat 全球 没有
performance_schema_max_memory_classes 全球 没有
performance_schema_max_metadata_locks 全球 没有
performance_schema_max_mutex_classes 全球 没有
performance_schema_max_mutex_instances 全球 没有
performance_schema_max_prepared_statements_instances 全球 没有
performance_schema_max_program_instances 全球 没有
performance_schema_max_rwlock_classes 全球 没有
performance_schema_max_rwlock_instances 全球 没有
performance_schema_max_socket_classes 全球 没有
performance_schema_max_socket_instances 全球 没有
performance_schema_max_sql_text_length 全球 没有
performance_schema_max_stage_classes 全球 没有
performance_schema_max_statement_classes 全球 没有
performance_schema_max_statement_stack 全球 没有
performance_schema_max_table_handles 全球 没有
performance_schema_max_table_instances 全球 没有
performance_schema_max_table_lock_stat 全球 没有
performance_schema_max_thread_classes 全球 没有
performance_schema_max_thread_instances 全球 没有
Performance_schema_memory_classes_lost 全球 没有
Performance_schema_metadata_lock_lost 全球 没有
Performance_schema_mutex_classes_lost 全球 没有
Performance_schema_mutex_instances_lost 全球 没有
Performance_schema_nested_statement_lost 全球 没有
Performance_schema_prepared_statements_lost 全球 没有
Performance_schema_program_lost 全球 没有
Performance_schema_rwlock_classes_lost 全球 没有
Performance_schema_rwlock_instances_lost 全球 没有
Performance_schema_session_connect_attrs_longest_seen 全球 没有
Performance_schema_session_connect_attrs_lost 全球 没有
performance_schema_session_connect_attrs_size 全球 没有
performance_schema_setup_actors_size 全球 没有
performance_schema_setup_objects_size 全球 没有
Performance_schema_socket_classes_lost 全球 没有
Performance_schema_socket_instances_lost 全球 没有
Performance_schema_stage_classes_lost 全球 没有
Performance_schema_statement_classes_lost 全球 没有
Performance_schema_table_handles_lost 全球 没有
Performance_schema_table_instances_lost 全球 没有
Performance_schema_table_lock_stat_lost 全球 没有
Performance_schema_thread_classes_lost 全球 没有
Performance_schema_thread_instances_lost 全球 没有
Performance_schema_users_lost 全球 没有
performance_schema_users_size 全球 没有
persist_only_admin_x509_subject 全球 没有
persisted_globals_load 全球 没有
PID文件 全球 没有
- 变量 pid_file 全球 没有
插入
PLUGIN_DIR 全球 没有
插件加载 全球 没有
插件负荷加 全球 没有
港口 全球 没有
端口开放超时
preload_buffer_size
Prepared_stmt_count 全球 没有
打印默认
print_identified_with_as_hex
剖析
profiling_history_size
PROTOCOL_VERSION 全球 没有
proxy_user 会议 没有
pseudo_slave_mode 会议
pseudo_thread_id 会议
Qcache_free_blocks 全球 没有
Qcache_free_memory 全球 没有
Qcache_hits的 全球 没有
Qcache_inserts 全球 没有
Qcache_lowmem_prunes 全球 没有
Qcache_not_cached 全球 没有
Qcache_queries_in_cache 全球 没有
Qcache_total_blocks 全球 没有
查询 没有
query_alloc_block_size
query_cache_limit 全球
query_cache_min_res_unit变量 全球
query_cache_size变量 全球
query_cache_type的
query_cache_wlock_invalidate
query_prealloc_size
问题 没有
rand_seed1 会议
rand_seed2 会议
range_alloc_block_size
range_optimizer_max_mem_size
rbr_exec_mode
read_buffer_size
只读 全球
read_rnd_buffer_size
regexp_stack_limit 全球
regexp_time_limit 全球
中继日志 全球 没有
- 变量 relay_log 全球 没有
relay_log_basename 全球 没有
中继日志索引 全球 没有
- 变量 relay_log_index 全球 没有
relay_log_index 全球 没有
中继日志信息文件
- 变量 relay_log_info_file
relay_log_info_file 全球 没有
中继日志信息的存储库
- 变量 relay_log_info_repository
relay_log_info_repository 全球
relay_log_purge 全球
中继日志恢复
- 变量 relay_log_recovery
relay_log_recovery 全球 没有
relay_log_space_limit 全球 没有
去掉
复制-DO-DB
复制待办事项表
复制-忽略-DB
复制,忽略表
复制重写-DB
复制-同一服务器ID
复制野生-DO表
复制-野生忽略表
报告主机 全球 没有
- 变量 report_host 全球 没有
报告密码 全球 没有
- 变量 report_password 全球 没有
报告端口 全球 没有
- 变量 report_port 全球 没有
报告用户 全球 没有
- 变量 report_user 全球 没有
require_secure_transport 全球
resultset_metadata 会议
rewriter_enabled 全球
Rewriter_number_loaded_rules 全球 没有
Rewriter_number_reloads 全球 没有
Rewriter_number_rewritten_queries 全球 没有
Rewriter_reload_error 全球 没有
rewriter_verbose 全球
rpl_read_size 全球
Rpl_semi_sync_master_clients 全球 没有
rpl_semi_sync_master_enabled 全球
Rpl_semi_sync_master_net_avg_wait_time 全球 没有
Rpl_semi_sync_master_net_wait_time 全球 没有
Rpl_semi_sync_master_net_waits 全球 没有
Rpl_semi_sync_master_no_times 全球 没有
Rpl_semi_sync_master_no_tx 全球 没有
Rpl_semi_sync_master_status 全球 没有
Rpl_semi_sync_master_timefunc_failures 全球 没有
rpl_semi_sync_master_timeout 全球
rpl_semi_sync_master_trace_level 全球
Rpl_semi_sync_master_tx_avg_wait_time 全球 没有
Rpl_semi_sync_master_tx_wait_time 全球 没有
Rpl_semi_sync_master_tx_waits 全球 没有
rpl_semi_sync_master_wait_for_slave_count 全球
rpl_semi_sync_master_wait_no_slave 全球
rpl_semi_sync_master_wait_point 全球
Rpl_semi_sync_master_wait_pos_backtraverse 全球 没有
Rpl_semi_sync_master_wait_sessions 全球 没有
Rpl_semi_sync_master_yes_tx 全球 没有
rpl_semi_sync_slave_enabled 全球
Rpl_semi_sync_slave_status 全球 没有
rpl_semi_sync_slave_trace_level 全球
rpl_stop_slave_timeout 全球
Rsa_public_key 全球 没有
安全用户创建
schema_definition_cache 全球
secondary_engine_cost_threshold 会议
Secondary_engine_execution_count 没有
安全-AUTH 全球
- 变量 secure_auth 全球
安全文件私法 全球 没有
- 变量 secure_file_priv 全球 没有
Select_full_join 没有
Select_full_range_join 没有
Select_range 没有
Select_range_check 没有
Select_scan 没有
服务器ID 全球
- 变量 server_id 全球
服务器ID位 全球 没有
- 变量 server_id_bits 全球 没有
server_uuid 全球 没有
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_compatibility_56 全球
show_create_table_verbosity
show_old_temporals
节目 - 从认证 - 信息
跳过字符集客户端握手
跳过并发插入
- 变量 concurrent_insert
跳过事件调度
skip_external_locking 全球 没有
跳过赠款表
跳过主机缓存
跳过名称解析 全球 没有
- 变量 skip_name_resolve 全球 没有
跳NDBCLUSTER
跳过网络 全球 没有
- 变量 skip_networking 全球 没有
跳新
跳过出现数据库 全球 没有
- 变量 skip_show_database 全球 没有
跳跃 - 从开始
跳跃的SSL
跳过堆栈跟踪
slave_allow_batching 全球
从检查点组
- 变量 slave_checkpoint_group
slave_checkpoint_group 全球
从检查点期间
- 变量 slave_checkpoint_period
slave_checkpoint_period 全球
slave_compressed_protocol 全球
slave_exec_mode 全球
Slave_heartbeat_period 全球 没有
Slave_last_heartbeat 全球 没有
从属负载TMPDIR 全球 没有
- 变量 slave_load_tmpdir 全球 没有
从属最大允许的数据包
- 变量 slave_max_allowed_pa​​cket
slave_max_allowed_pa​​cket 全球
从净超时 全球
- 变量 slave_net_timeout 全球
Slave_open_temp_tables 全球 没有
从动并联型
- 变量 slave_parallel_type
slave_parallel_type 全球
从平行工
- 变量 slave_parallel_workers
slave_parallel_workers 全球
从未决的作业大小-MAX
- 变量 slave_pending_jobs_size_max
slave_pending_jobs_size_max 全球
slave_preserve_commit_order 全球
Slave_received_heartbeats 全球 没有
Slave_retried_transactions 全球 没有
Slave_rows_last_search_algorithm_used 全球 没有
从属行搜索的算法
- 变量 slave_rows_search_algorithms
slave_rows_search_algorithms 全球
Slave_running 全球 没有
奴隶跳跃式的错误 全球 没有
从属-SQL验证校验和
slave_sql_verify_checksum 全球
slave_transaction_retries 全球
slave_type_conversions 全球 没有
Slow_launch_threads 没有
slow_launch_time 全球
Slow_queries要花 没有
慢查询日志 全球
slow_query_log_file 全球
慢启动超时
插座 全球 没有
sort_buffer_size的值
Sort_merge_passes 没有
Sort_range 没有
Sort_rows 没有
Sort_scan 没有
突发性的二进制日志转储失效
sql_auto_is_null
SQL_BIG_SELECTS
SQL_BUFFER_RESULT
SQL_LOG_BIN 会议
sql_log_off
SQL模式
sql_notes
sql_quote_show_create
sql_require_primary_key
sql_safe_updates
SQL_SELECT_LIMIT
SQL_SLAVE_SKIP_COUNTER 全球
sql_warnings
SSL
Ssl_accept_renegotiates 全球 没有
Ssl_accepts 全球 没有
SSL-CA 全球 不定
Ssl_callback_cache_hits 全球 没有
SSL-capath 全球 不定
SSL证书 全球 不定
Ssl_cipher 没有
SSL的加密 全球 不定
Ssl_cipher_list 没有
Ssl_client_connects 全球 没有
Ssl_connect_renegotiates 全球 没有
SSL-CRL 全球 不定
SSL-crlpath 全球 不定
Ssl_ctx_verify_depth 全球 没有
Ssl_ctx_verify_mode 全球 没有
Ssl_default_timeout 没有
Ssl_finished_accepts 全球 没有
Ssl_finished_connects 全球 没有
ssl_fips_mode 全球
SSL密钥 全球 不定
Ssl_server_not_after 没有
Ssl_server_not_before 没有
Ssl_session_cache_hits 全球 没有
Ssl_session_cache_misses 全球 没有
Ssl_session_cache_mode 全球 没有
Ssl_session_cache_overflows 全球 没有
Ssl_session_cache_size 全球 没有
Ssl_session_cache_timeouts 全球 没有
Ssl_sessions_reused 没有
Ssl_used_session_cache_entries 全球 没有
Ssl_verify_depth 没有
Ssl_verify_mode 没有
SSL_VERSION 没有
独立
stored_program_cache 全球
stored_program_definition_cache 全球
超级大页
super_read_only 全球
符号链接
sync_binlog 全球
sync_master_info 全球
sync_relay_log 全球
sync_relay_log_info 全球
SYSDATE-是,现在
syseventlog.facility 全球
syseventlog.include_pid 全球
syseventlog.tag 全球
system_time_zone 全球 没有
table_definition_cache 全球
table_encryption_privilege_check 全球
Table_locks_immediate 全球 没有
Table_locks_waited 全球 没有
table_open_cache 全球
Table_open_cache_hits 没有
table_open_cache_instances 全球 没有
Table_open_cache_misses 没有
Table_open_cache_overflows 没有
tablespace_definition_cache 全球
TC-启发式恢复
Tc_log_max_pages_used 全球 没有
Tc_log_page_size 全球 没有
Tc_log_page_waits 全球 没有
临时池
temptable_max_ram 全球
temptable_use_mmap 全球
thread_cache_size的 全球
thread_handling 全球 没有
thread_pool_algorithm 全球 没有
thread_pool_high_priority_connection
thread_pool_max_unused_threads 全球
thread_pool_prio_kickup_timer
thread_pool_size 全球 没有
thread_pool_stall_limit 全球
thread_stack 全球 没有
Threads_cached 全球 没有
threads_connected的 全球 没有
由Threads_created 全球 没有
Threads_running 全球 没有
时间格式 全球 没有
时区
时间戳 会议
tls_ciphersuites 全球
tls_version 全球 不定
tmp_table_size的
TMPDIR 全球 没有
transaction_alloc_block_size
transaction_allow_batching 会议
事务隔离
- 变量 transaction_isolation
transaction_prealloc_size
交易只读
- 变量 transaction_read_only
transaction_write_set_extraction
TX_ISOLATION
tx_read_only
UNIQUE_CHECKS
updatable_views_with_limit
升级
正常运行时间 全球 没有
Uptime_since_flush_status 全球 没有
use_secondary_engine 会议
用户
验证-配置
验证密码
validate_password_check_user_name 全球
validate_password_dictionary_file 全球
validate_password_dictionary_file_last_parsed 全球 没有
validate_password_dictionary_file_words_count 全球 没有
validate_password_length 全球
validate_password_mixed_case_count 全球
validate_password_number_count 全球
validate_password_policy 全球
validate_password_special_char_count 全球
validate_password.check_user_name 全球
validate_password.dictionary_file 全球
validate_password.dictionary_file_last_parsed 全球 没有
validate_password.dictionary_file_words_count 全球 没有
validate_password.length 全球
validate_password.mixed_case_count 全球
validate_password.number_count 全球
validate_password.policy 全球
validate_password.special_char_count 全球
validate_user_plugins 全球 没有
详细
全球 没有
version_comment 全球 没有
version_compile_machine 全球 没有
version_compile_os 全球 没有
version_compile_zlib 全球 没有
version_tokens_session
version_tokens_session_number 没有
WAIT_TIMEOUT
WARNING_COUNT 会议 没有
windowing_use_high_precision

笔记:

1.此选项是动态的,但只有服务器应设置此信息。 您不应手动设置此变量的值。

5.1.5服务器系统变量参考

下表列出了适用的所有系统变量 mysqld

该表列出了一个统一列表中的命令行选项(Cmd-line),配置文件中有效的选项(选项文件),服务器系统变量(System Var)和状态变量(Status var),并指示每个选项的位置或变量有效。 如果在命令行或选项文件中设置的服务器选项与相应系统变量的名称不同,则会在相应选项的正下方注明变量名称。 变量(Var Scope)的范围是Global,Session或两者。 有关设置和使用变量的详细信息,请参阅相应的项目说明。 在适当的情况下,提供有关物品的进一步信息的直接链接。

表5.2系统变量摘要

名称 CMD线 选项文件 系统变量 Var范围 动态
activate_all_roles_on_login 全球
admin_address 全球 没有
admin_port 全球 没有
audit_log_buffer_size 全球 没有
audit_log_compression 全球 没有
audit_log_connection_policy 全球
audit_log_current_session 没有
audit_log_encryption 全球 没有
audit_log_exclude_accounts 全球
audit_log_file 全球 没有
audit_log_filter_id 没有
audit_log_flush 全球
audit_log_format 全球 没有
audit_log_include_accounts 全球
audit_log_policy 全球 没有
audit_log_read_buffer_size 不定 不定
audit_log_rotate_on_size 全球
audit_log_statement_policy 全球
audit_log_strategy 全球 没有
authentication_ldap_sasl_auth_method_name 全球
authentication_ldap_sasl_bind_base_dn 全球
authentication_ldap_sasl_bind_root_dn 全球
authentication_ldap_sasl_bind_root_pwd 全球
authentication_ldap_sasl_ca_path 全球
authentication_ldap_sasl_group_search_attr 全球
authentication_ldap_sasl_group_search_filter 全球
authentication_ldap_sasl_init_pool_size 全球
authentication_ldap_sasl_log_status 全球
authentication_ldap_sasl_max_pool_size 全球
authentication_ldap_sasl_server_host 全球
authentication_ldap_sasl_server_port 全球
authentication_ldap_sasl_tls 全球
authentication_ldap_sasl_user_search_attr 全球
authentication_ldap_simple_auth_method_name 全球
authentication_ldap_simple_bind_base_dn 全球
authentication_ldap_simple_bind_root_dn 全球
authentication_ldap_simple_bind_root_pwd 全球
authentication_ldap_simple_ca_path 全球
authentication_ldap_simple_group_search_attr 全球
authentication_ldap_simple_group_search_filter 全球
authentication_ldap_simple_init_pool_size 全球
authentication_ldap_simple_log_status 全球
authentication_ldap_simple_max_pool_size 全球
authentication_ldap_simple_server_host 全球
authentication_ldap_simple_server_port 全球
authentication_ldap_simple_tls 全球
authentication_ldap_simple_user_search_attr 全球
authentication_windows_log_level 全球 没有
authentication_windows_use_principal_name 全球 没有
auto_generate_certs 全球 没有
auto_increment_increment
auto_increment_offset
自动提交
automatic_sp_privileges 全球
avoid_temporal_upgrade 全球
back_log 全球 没有
BASEDIR 全球 没有
big_tables
bind_address 全球 没有
binlog_cache_size 全球
binlog_checksum 全球
binlog_direct_non_transactional_updates
binlog_encryption 全球
binlog_error_action 全球
binlog_expire_logs_seconds 全球
binlog_format
binlog_group_commit_sync_delay 全球
binlog_group_commit_sync_no_delay_count 全球
binlog_gtid_simple_recovery 全球 没有
binlog_max_flush_queue_time 全球
binlog_order_commits 全球
binlog_rotate_encryption_master_key_at_startup 全球 没有
二进制日志行事件-MAX尺寸 全球 没有
binlog_row_image
binlog_row_metadata 全球
binlog_row_value_options
binlog_rows_query_log_events
binlog_stmt_cache_size 全球
binlog_transaction_dependency_history_size 全球
binlog_transaction_dependency_tracking 全球
block_encryption_mode
bulk_insert_buffer_size
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 (注1)
character_set_filesystem
character_set_results
被character_set_server
character_set_system 全球 没有
character_sets_dir 全球 没有
check_proxy_users 全球
collat​​ion_connection是
collat​​ion_database (注1)
collat​​ion_server的
completion_type
concurrent_insert 全球
connect_timeout 全球
connection_control_failed_connections_threshold 全球
connection_control_max_connection_delay 全球
connection_control_min_connection_delay 全球
core_file 全球 没有
create_admin_listener_thread 全球 没有
cte_max_recursion_depth
daemon_memcached_enable_binlog 全球 没有
daemon_memcached_engine_lib_name 全球 没有
daemon_memcached_engine_lib_path 全球 没有
daemon_memcached_option 全球 没有
daemon_memcached_r_batch_size 全球 没有
daemon_memcached_w_batch_size 全球 没有
DATADIR 全球 没有
日期格式 全球 没有
DATETIME_FORMAT 全球 没有
调试
debug_sync 会议
default_authentication_plugin 全球 没有
default_collat​​ion_for_utf8mb4
default_password_lifetime 全球
默认存储引擎
- 变量 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_pa​​ssword 全球 没有
div_precision_increment
dragnet.log_error_filter_rules 全球
end_markers_in_json
执行-GTID一致性 全球
enforce_gtid_consistency 全球
eq_range_index_dive_limit
ERROR_COUNT 会议 没有
事件调度
- 变量 event_scheduler 全球
expire_logs_days 全球
explicit_defaults_for_timestamp
external_user 会议 没有
红晕 全球
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 全球
group_concat_max_len
group_replication_allow_local_disjoint_gtids_join 全球
group_replication_allow_local_lower_version_join 全球
group_replication_auto_increment_increment 全球
group_replication_autorejoin_tries 全球
group_replication_bootstrap_group 全球
group_replication_communication_debug_options 全球
group_replication_communication_max_message_size 全球
group_replication_components_stop_timeout 全球
group_replication_compression_threshold 全球
group_replication_consistency
group_replication_enforce_update_everywhere_checks 全球
group_replication_exit_state_action 全球
group_replication_flow_control_applier_threshold 全球
group_replication_flow_control_certifier_threshold 全球
group_replication_flow_control_hold_percent 全球
group_replication_flow_control_max_commit_quota 全球
group_replication_flow_control_member_quota_percent 全球
group_replication_flow_control_min_quota 全球
group_replication_flow_control_min_recovery_quota 全球
group_replication_flow_control_mode 全球
group_replication_flow_control_period 全球
group_replication_flow_control_release_percent 全球
group_replication_force_members 全球
group_replication_group_name 全球
group_replication_group_seeds 全球
group_replication_gtid_assignment_block_size 全球
group_replication_ip_whitelist 全球
group_replication_local_address 全球
group_replication_member_expel_timeout 全球
group_replication_member_weight 全球
group_replication_message_cache_size 全球
group_replication_poll_spin_loops 全球
group_replication_recovery_complete_at 全球
group_replication_recovery_get_public_key 全球
group_replication_recovery_public_key_path 全球
group_replication_recovery_reconnect_interval 全球
group_replication_recovery_retry_count 全球
group_replication_recovery_ssl_ca 全球
group_replication_recovery_ssl_capath 全球
group_replication_recovery_ssl_cert 全球
group_replication_recovery_ssl_cipher 全球
group_replication_recovery_ssl_crl 全球
group_replication_recovery_ssl_crlpath 全球
group_replication_recovery_ssl_key 全球
group_replication_recovery_ssl_verify_server_cert 全球
group_replication_recovery_use_ssl 全球
group_replication_single_primary_mode 全球
group_replication_ssl_mode 全球
group_replication_start_on_boot 全球
group_replication_transaction_size_limit 全球
group_replication_unreachable_majority_timeout 全球
gtid_executed 不定 没有
gtid_executed_compression_period 全球
GTID模式
- 变量 gtid_mode 全球
gtid_mode 全球
gtid_next 会议
gtid_owned 没有
gtid_purged 全球
have_compress 全球 没有
have_crypt 全球 没有
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 全球
主机名 全球 没有
身分 会议
忽略-内置-的InnoDB 没有
- 变量 ignore_builtin_innodb 全球 没有
immediate_server_version 会议
information_schema_stats_expiry
init_connect 全球
初始化文件 没有
- 变量 init_file 全球 没有
init_slave 全球
innodb_adaptive_flushing 全球
innodb_adaptive_flushing_lwm 全球
innodb_adaptive_hash_index 全球
innodb_adaptive_hash_index_parts 全球 没有
innodb_adaptive_max_sleep_delay 全球
innodb_api_bk_commit_interval 全球
innodb_api_disable_rowlock 全球 没有
innodb_api_enable_binlog 全球 没有
innodb_api_enable_mdl 全球 没有
innodb_api_trx_level 全球
innodb_autoextend_increment 全球
innodb_autoinc_lock_mode 全球 没有
innodb_background_drop_list_empty 全球
innodb_buffer_pool_chunk_size 全球 没有
innodb_buffer_pool_debug 全球 没有
innodb_buffer_pool_dump_at_shutdown 全球
innodb_buffer_pool_dump_now 全球
innodb_buffer_pool_dump_pct 全球
innodb_buffer_pool_filename 全球
innodb_buffer_pool_in_core_file 全球
innodb_buffer_pool_instances 全球 没有
innodb_buffer_pool_load_abort 全球
innodb_buffer_pool_load_at_startup 全球 没有
innodb_buffer_pool_load_now 全球
innodb_buffer_pool_size 全球
innodb_change_buffer_max_size 全球
innodb_change_buffering 全球
innodb_change_buffering_debug 全球
innodb_checkpoint_disabled 全球
innodb_checksum_algorithm 全球
innodb_cmp_per_index_enabled 全球
innodb_commit_concurrency 全球
innodb_compress_debug 全球
innodb_compression_failure_threshold_pct 全球
innodb_compression_level 全球
innodb_compression_pad_pct_max 全球
innodb_concurrency_tickets 全球
innodb_data_file_path中 全球 没有
innodb_data_home_dir 全球 没有
innodb_ddl_log_crash_reset_debug 全球
innodb_deadlock_detect 全球
innodb_dedicated_server 全球 没有
innodb_default_row_format 全球
innodb_directories 全球 没有
innodb_disable_sort_file_cache 全球
innodb_doublewrite 全球 没有
innodb_fast_shutdown 全球
innodb_fil_make_page_dirty_debug 全球
innodb_file_per_table 全球
innodb_fill_factor 全球
innodb_flush_log_at_timeout 全球
的innodb_flush_log_at_trx_commit 全球
innodb_flush_method 全球 没有
innodb_flush_neighbors 全球
innodb_flush_sync 全球
innodb_flushing_avg_loops 全球
innodb_force_load_corrupted 全球 没有
innodb_force_recovery 全球 没有
innodb_fsync_threshold 全球
innodb_ft_aux_table 全球
innodb_ft_cache_size 全球 没有
innodb_ft_enable_diag_print 全球
innodb_ft_enable_stopword
innodb_ft_max_token_size 全球 没有
innodb_ft_min_token_size 全球 没有
innodb_ft_num_word_optimize 全球
innodb_ft_result_cache_limit 全球
innodb_ft_server_stopword_table 全球
innodb_ft_sort_pll_degree 全球 没有
innodb_ft_total_cache_size 全球 没有
innodb_ft_user_stopword_table
innodb_io_capacity 全球
innodb_io_capacity_max 全球
innodb_limit_optimistic_insert_debug 全球
innodb_lock_wait_timeout
innodb_log_buffer_size 全球 不定
innodb_log_checkpoint_fuzzy_now 全球
innodb_log_checkpoint_now 全球
innodb_log_checksums 全球
innodb_log_compressed_pa​​ges 全球
innodb_log_file_size 全球 没有
innodb_log_files_in_group 全球 没有
innodb_log_group_home_dir 全球 没有
innodb_log_spin_cpu_abs_lwm 全球
innodb_log_spin_cpu_pct_hwm 全球
innodb_log_wait_for_flush_spin_hwm 全球
innodb_log_write_ahead_size 全球
innodb_lru_scan_depth 全球
innodb_max_dirty_pages_pct 全球
innodb_max_dirty_pages_pct_lwm 全球
innodb_max_purge_lag 全球
innodb_max_purge_lag_delay 全球
innodb_max_undo_log_size 全球
innodb_merge_threshold_set_all_debug 全球
innodb_monitor_disable 全球
innodb_monitor_enable 全球
innodb_monitor_reset 全球
innodb_monitor_reset_all 全球
innodb_numa_interleave 全球 没有
innodb_old_blocks_pct 全球
innodb_old_blocks_time 全球
innodb_online_alter_log_max_size 全球
innodb_open_files 全球 没有
innodb_optimize_fulltext_only 全球
innodb_page_cleaners 全球 没有
innodb_page_size 全球 没有
innodb_parallel_read_threads 会议
innodb_print_all_deadlocks 全球
innodb_print_ddl_logs 全球
innodb_purge_batch_size 全球
innodb_purge_rseg_truncate_frequency 全球
innodb_purge_threads 全球 没有
innodb_random_read_ahead 全球
innodb_read_ahead_threshold 全球
innodb_read_io_threads 全球 没有
innodb_read_only 全球 没有
innodb_redo_log_encrypt 全球
innodb_replication_delay 全球
innodb_rollback_on_timeout 全球 没有
innodb_rollback_segments 全球
innodb_saved_pa​​ge_number_debug 全球
innodb_scan_directories 全球 没有
innodb_sort_buffer_size 全球 没有
innodb_spin_wait_delay 全球
innodb_spin_wait_pause_multiplier 全球
innodb_stats_auto_recalc 全球
innodb_stats_include_delete_marked 全球
innodb_stats_method 全球
innodb_stats_on_metadata 全球
innodb_stats_persistent 全球
innodb_stats_persistent_sample_pages 全球
innodb_stats_transient_sample_pages 全球
innodb_status_output 全球
innodb_status_output_locks 全球
innodb_strict_mode
innodb_sync_array_size 全球 没有
innodb_sync_debug 全球 没有
innodb_sync_spin_loops 全球
innodb_table_locks
innodb_temp_data_file_path 全球 没有
innodb_temp_tablespaces_dir 全球 没有
innodb_thread_concurrency参数 全球
innodb_thread_sleep_delay 全球
innodb_tmpdir
innodb_trx_purge_view_update_only_debug 全球
innodb_trx_rseg_n_slots_debug 全球
innodb_undo_directory 全球 没有
innodb_undo_log_encrypt 全球
innodb_undo_log_truncate 全球
innodb_undo_logs 全球
innodb_undo_tablespaces 全球 不定
innodb_use_native_aio 全球 没有
innodb_version 全球 没有
innodb_write_io_threads 全球 没有
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 全球
keyring_aws_cmk_id 全球
keyring_aws_conf_file 全球 没有
keyring_aws_data_file 全球 没有
keyring_aws_region 全球
keyring_encrypted_file_data 全球
keyring_encrypted_file_password 全球
keyring_file_data 全球
keyring_okv_conf_dir 全球
keyring_operations 全球
语言 全球 没有
large_files_support 全球 没有
large_page_size 全球 没有
大型网页 没有
- 变量 large_pages 全球 没有
LAST_INSERT_ID 会议
LC-消息
- 变量 lc_messages
LC-消息-DIR 没有
- 变量 lc_messages_dir 全球 没有
lc_time_names
执照 全球 没有
local_infile 全球
的lock_order 全球 没有
lock_order_debug_loop 全球 没有
lock_order_debug_missing_arc 全球 没有
lock_order_debug_missing_key 全球 没有
lock_order_debug_missing_unlock 全球 没有
lock_order_dependencies 全球 没有
lock_order_extra_dependencies 全球 没有
lock_order_output_directory 全球 没有
lock_order_print_txt 全球 没有
lock_order_trace_loop 全球 没有
lock_order_trace_missing_arc 全球 没有
lock_order_trace_missing_key 全球 没有
lock_order_trace_missing_unlock 全球 没有
lock_wait_timeout
locked_in_memory 全球 没有
log_bin 全球 没有
log_bin_basename 全球 没有
log_bin_index 全球 没有
登录彬信任功能创造者
- 变量 log_bin_trust_function_creators 全球
登录斌用-V1-行活动 没有
- 变量 log_bin_use_v1_row_events 全球 没有
log_bin_use_v1_row_events 全球 没有
log_builtin_as_identified_by_password 全球
登录错误 没有
- 变量 log_error 全球 没有
log_error_filter_rules 全球
log_error_services 全球
log_error_suppression_list 全球
log_error_verbosity 全球
log_output 全球
日志查询,未使用的索引
- 变量 log_queries_not_using_indexes 全球
登录奴隶更新 没有
- 变量 log_slave_updates 全球 没有
log_slave_updates 全球 没有
log_slow_admin_statements 全球
log_slow_extra 全球
log_slow_slave_statements 全球
log_statements_unsafe_for_binlog 全球
log_syslog 全球
log_syslog_facility 全球
log_syslog_include_pid 全球
log_syslog_tag 全球
log_throttle_queries_not_using_indexes 全球
log_timestamps 全球
日志警告
- 变量 log_warnings 全球
long_query_time时间
低优先级的更新
- 变量 low_priority_updates
lower_case_file_system 全球 没有
的lower_case_table_names 全球 没有
mandatory_roles 全球
master_info_repository 全球
master_verify_checksum 全球
max_allowed_pa​​cket的
max_binlog_cache_size 全球
max_binlog_size 全球
max_binlog_stmt_cache_size 全球
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_relay_log_size 全球
max_seeks_for_key
max_sort_length个
max_sp_recursion_depth
max_tmp_tables
MAX_USER_CONNECTIONS
max_write_lock_count 全球
mecab_rc_file 全球 没有
metadata_locks_cache_size 全球 没有
metadata_locks_hash_instances 全球 没有
分钟审查行限
- 变量 min_examined_row_limit
multi_range_count
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_firewall_mode 全球
mysql_firewall_trace 全球
mysql_native_password_proxy_users 全球
mysqlx_bind_address 全球 没有
mysqlx_connect_timeout 全球
mysqlx_document_id_unique_prefix 全球
mysqlx_enable_hello_notice 全球
mysqlx_idle_worker_thread_timeout 全球
mysqlx_interactive_timeout 全球
mysqlx_max_allowed_pa​​cket 全球
mysqlx_max_connections 全球
mysqlx_min_worker_threads 全球
mysqlx_port 全球 没有
mysqlx_port_open_timeout 全球 没有
mysqlx_read_timeout 会议
mysqlx_socket 全球 没有
mysqlx_ssl_ca 全球 没有
mysqlx_ssl_capath 全球 没有
mysqlx_ssl_cert 全球 没有
mysqlx_ssl_cipher 全球 没有
mysqlx_ssl_crl 全球 没有
mysqlx_ssl_crlpath 全球 没有
mysqlx_ssl_key 全球 没有
mysqlx_wait_timeout 会议
mysqlx_write_timeout 会议
named_pipe 全球 没有
named_pipe_full_access_group 全球 没有
NDB-允许,复制,ALTER表
ndb_autoincrement_prefetch_sz
NDB批量大小 没有
- 变量 :ndb_batch_size 全球 没有
NDB二进制大对象读取批次字节
- 变量 :ndb_blob_read_batch_bytes
NDB二进制大对象写入批字节
- 变量 :ndb_blob_write_batch_bytes
ndb_cache_check_time 全球
ndb_clear_apply_status 全球
NDB集群连接池 全球 没有
NDB集群连接池,nodeids 全球 没有
Ndb_conflict_last_conflict_epoch 全球 没有
ndb_data_node_neighbour 全球
NDB默认列格式
- 变量 ndb_default_column_format 全球
ndb_default_column_format 全球
NDB递延约束
- 变量 ndb_deferred_constraints
ndb_deferred_constraints
NDB分布
- 变量 ndb_distribution 全球
ndb_distribution 全球
ndb_eventbuffer_free_percent 全球
ndb_eventbuffer_max_alloc 全球
ndb_extra_logging 全球
ndb_force_send
ndb_fully_replicated
ndb_index_stat_enable
ndb_index_stat_option
ndb_join_pushdown
NDB日志申请状态 没有
- 变量 ndb_log_apply_status 全球 没有
ndb_log_apply_status 全球 没有
ndb_log_bin
ndb_log_binlog_index 全球
NDB-LOG-空时代
- 变量 ndb_log_empty_epochs 全球
ndb_log_empty_epochs 全球
NDB日志空更新
- 变量 ndb_log_empty_update 全球
ndb_log_empty_update 全球
NDB-LOG-异读
- 变量 ndb_log_exclusive_reads
ndb_log_exclusive_reads
NDB-数原稿 没有
- 变量 ndb_log_orig 全球 没有
ndb_log_orig 全球 没有
NDB-数事务id 没有
- 变量 ndb_log_transaction_id 全球 没有
ndb_log_transaction_id 全球 没有
NDB日志更新,如写
- 变量 :ndb_log_update_as_write 全球
NDB日志更新,最小
- 变量 :ndb_log_update_minimal 全球
ndb_log_updated_only 全球
ndb_metadata_check 全球
ndb_metadata_check_interval 全球
NDB优化延迟
- 变量 :ndb_optimization_delay 全球
ndb_optimized_node_selection 全球 没有
ndb_read_backup 全球
ndb_recv_thread_activation_threshold 全球
ndb_recv_thread_cpu_mask 全球
ndb_report_thresh_binlog_epoch_slip 全球
ndb_report_thresh_binlog_mem_usage 全球
ndb_row_checksum
NDB-模式 - 距离超时 没有
- 变量 :ndb_schema_dist_timeout 全球 没有
ndb_show_foreign_key_mock_tables 全球
ndb_slave_conflict_role 全球
Ndb_slave_max_replicated_epoch 全球 没有
Ndb_system_name 全球 没有
ndb_table_no_logging 会议
ndb_table_temporary 会议
ndb_use_copying_alter_table 没有
ndb_use_exact_count
ndb_use_transactions
ndb_version 全球 没有
ndb_version_string 全球 没有
NDB-等待连接 全球 没有
NDB-等待安装 全球 没有
ndbinfo_database 全球 没有
ndbinfo_max_bytes
ndbinfo_max_rows
ndbinfo_offline 全球
ndbinfo_show_hidden
ndbinfo_table_prefix
ndbinfo_version 全球 没有
的net_buffer_length
net_read_timeout
net_retry_count
net_write_timeout
ngram_token_size 全球 没有
离线模式 全球
全球 没有
old_alter_table
old_passwords
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
original_commit_timestamp 会议
original_server_version 会议
parser_max_mem_size
partial_revokes 全球
PASSWORD_HISTORY 全球
password_require_current 全球
password_reuse_interval 全球
performance_schema 全球 没有
performance_schema_accounts_size 全球 没有
performance_schema_digests_size 全球 没有
performance_schema_error_size 全球 没有
performance_schema_events_stages_history_long_size 全球 没有
performance_schema_events_stages_history_size 全球 没有
performance_schema_events_statements_history_long_size 全球 没有
performance_schema_events_statements_history_size 全球 没有
performance_schema_events_transactions_history_long_size 全球 没有
performance_schema_events_transactions_history_size 全球 没有
performance_schema_events_waits_history_long_size 全球 没有
performance_schema_events_waits_history_size 全球 没有
performance_schema_hosts_size 全球 没有
performance_schema_max_cond_classes 全球 没有
performance_schema_max_cond_instances 全球 没有
performance_schema_max_digest_length 全球 没有
performance_schema_max_digest_sample_age 全球
performance_schema_max_file_classes 全球 没有
performance_schema_max_file_handles 全球 没有
performance_schema_max_file_instances 全球 没有
performance_schema_max_index_stat 全球 没有
performance_schema_max_memory_classes 全球 没有
performance_schema_max_metadata_locks 全球 没有
performance_schema_max_mutex_classes 全球 没有
performance_schema_max_mutex_instances 全球 没有
performance_schema_max_prepared_statements_instances 全球 没有
performance_schema_max_program_instances 全球 没有
performance_schema_max_rwlock_classes 全球 没有
performance_schema_max_rwlock_instances 全球 没有
performance_schema_max_socket_classes 全球 没有
performance_schema_max_socket_instances 全球 没有
performance_schema_max_sql_text_length 全球 没有
performance_schema_max_stage_classes 全球 没有
performance_schema_max_statement_classes 全球 没有
performance_schema_max_statement_stack 全球 没有
performance_schema_max_table_handles 全球 没有
performance_schema_max_table_instances 全球 没有
performance_schema_max_table_lock_stat 全球 没有
performance_schema_max_thread_classes 全球 没有
performance_schema_max_thread_instances 全球 没有
performance_schema_session_connect_attrs_size 全球 没有
performance_schema_setup_actors_size 全球 没有
performance_schema_setup_objects_size 全球 没有
performance_schema_users_size 全球 没有
persist_only_admin_x509_subject 全球 没有
persisted_globals_load 全球 没有
PID文件 没有
- 变量 pid_file 全球 没有
PLUGIN_DIR 全球 没有
插件加载 全球 没有
插件负荷加 全球 没有
港口 全球 没有
preload_buffer_size
print_identified_with_as_hex
剖析
profiling_history_size
PROTOCOL_VERSION 全球 没有
proxy_user 会议 没有
pseudo_slave_mode 会议
pseudo_thread_id 会议
query_alloc_block_size
query_cache_limit 全球
query_cache_min_res_unit变量 全球
query_cache_size变量 全球
query_cache_type的
query_cache_wlock_invalidate
query_prealloc_size
rand_seed1 会议
rand_seed2 会议
range_alloc_block_size
range_optimizer_max_mem_size
rbr_exec_mode
read_buffer_size
只读 全球
read_rnd_buffer_size
regexp_stack_limit 全球
regexp_time_limit 全球
中继日志 没有
- 变量 relay_log 全球 没有
relay_log_basename 全球 没有
中继日志索引 没有
- 变量 relay_log_index 全球 没有
relay_log_index 全球 没有
relay_log_info_file 全球 没有
relay_log_info_repository 全球
relay_log_purge 全球
relay_log_recovery 全球 没有
relay_log_space_limit 全球 没有
报告主机 没有
- 变量 report_host 全球 没有
报告密码 没有
- 变量 report_password 全球 没有
报告端口 没有
- 变量 report_port 全球 没有
报告用户 没有
- 变量 report_user 全球 没有
require_secure_transport 全球
resultset_metadata 会议
rewriter_enabled 全球
rewriter_verbose 全球
rpl_read_size 全球
rpl_semi_sync_master_enabled 全球
rpl_semi_sync_master_timeout 全球
rpl_semi_sync_master_trace_level 全球
rpl_semi_sync_master_wait_for_slave_count 全球
rpl_semi_sync_master_wait_no_slave 全球
rpl_semi_sync_master_wait_point 全球
rpl_semi_sync_slave_enabled 全球
rpl_semi_sync_slave_trace_level 全球
rpl_stop_slave_timeout 全球
schema_definition_cache 全球
secondary_engine_cost_threshold 会议
安全-AUTH
- 变量 secure_auth 全球
安全文件私法 没有
- 变量 secure_file_priv 全球 没有
服务器ID
- 变量 server_id 全球
服务器ID位 没有
- 变量 server_id_bits 全球 没有
server_uuid 全球 没有
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_compatibility_56 全球
show_create_table_verbosity
show_old_temporals
skip_external_locking 全球 没有
跳过名称解析 没有
- 变量 skip_name_resolve 全球 没有
跳过网络 没有
- 变量 skip_networking 全球 没有
跳过出现数据库 没有
- 变量 skip_show_database 全球 没有
slave_allow_batching 全球
slave_checkpoint_group 全球
slave_checkpoint_period 全球
slave_compressed_protocol 全球
slave_exec_mode 全球
从属负载TMPDIR 没有
- 变量 slave_load_tmpdir 全球 没有
slave_max_allowed_pa​​cket 全球
从净超时
- 变量 slave_net_timeout 全球
slave_parallel_type 全球
slave_parallel_workers 全球
slave_pending_jobs_size_max 全球
slave_preserve_commit_order 全球
slave_rows_search_algorithms 全球
奴隶跳跃式的错误 全球 没有
slave_sql_verify_checksum 全球
slave_transaction_retries 全球
slave_type_conversions 全球 没有
slow_launch_time 全球
慢查询日志 全球
slow_query_log_file 全球
插座 全球 没有
sort_buffer_size的值
sql_auto_is_null
SQL_BIG_SELECTS
SQL_BUFFER_RESULT
SQL_LOG_BIN 会议
sql_log_off
SQL模式
sql_notes
sql_quote_show_create
sql_require_primary_key
sql_safe_updates
SQL_SELECT_LIMIT
SQL_SLAVE_SKIP_COUNTER 全球
sql_warnings
SSL-CA 全球 不定
SSL-capath 全球 不定
SSL证书 全球 不定
SSL的加密 全球 不定
SSL-CRL 全球 不定
SSL-crlpath 全球 不定
ssl_fips_mode 全球
SSL密钥 全球 不定
stored_program_cache 全球
stored_program_definition_cache 全球
super_read_only 全球
sync_binlog 全球
sync_master_info 全球
sync_relay_log 全球
sync_relay_log_info 全球
syseventlog.facility 全球
syseventlog.include_pid 全球
syseventlog.tag 全球
system_time_zone 全球 没有
table_definition_cache 全球
table_encryption_privilege_check 全球
table_open_cache 全球
table_open_cache_instances 全球 没有
tablespace_definition_cache 全球
temptable_max_ram 全球
temptable_use_mmap 全球
thread_cache_size的 全球
thread_handling 全球 没有
thread_pool_algorithm 全球 没有
thread_pool_high_priority_connection
thread_pool_max_unused_threads 全球
thread_pool_prio_kickup_timer
thread_pool_size 全球 没有
thread_pool_stall_limit 全球
thread_stack 全球 没有
时间格式 全球 没有
时区
时间戳 会议
tls_ciphersuites 全球
tls_version 全球 不定
tmp_table_size的
TMPDIR 全球 没有
transaction_alloc_block_size
transaction_allow_batching 会议
事务隔离
- 变量 transaction_isolation
transaction_prealloc_size
交易只读
- 变量 transaction_read_only
transaction_write_set_extraction
TX_ISOLATION
tx_read_only
UNIQUE_CHECKS
updatable_views_with_limit
use_secondary_engine 会议
validate_password_check_user_name 全球
validate_password_dictionary_file 全球
validate_password_length 全球
validate_password_mixed_case_count 全球
validate_password_number_count 全球
validate_password_policy 全球
validate_password_special_char_count 全球
validate_password.check_user_name 全球
validate_password.dictionary_file 全球
validate_password.length 全球
validate_password.mixed_case_count 全球
validate_password.number_count 全球
validate_password.policy 全球
validate_password.special_char_count 全球
validate_user_plugins 全球 没有
全球 没有
version_comment 全球 没有
version_compile_machine 全球 没有
version_compile_os 全球 没有
version_compile_zlib 全球 没有
version_tokens_session
version_tokens_session_number 没有
WAIT_TIMEOUT
WARNING_COUNT 会议 没有
windowing_use_high_precision

笔记:

1.此选项是动态的,但只有服务器应设置此信息。 您不应手动设置此变量的值。

5.1.6服务器状态变量参考

下表列出了适用的所有状态变量 mysqld

该表列出了每个变量的数据类型和范围。 最后一列指示每个变量的范围是全局,会话还是两者。 有关设置和使用变量的详细信息,请参阅相应的项目说明。 在适当的情况下,提供有关物品的进一步信息的直接链接。

表5.3状态变量摘要

变量名 变量类型 可变范围
Aborted_clients 整数 全球
Aborted_connects 整数 全球
Acl_cache_items_count 整数 全球
Audit_log_current_size 整数 全球
Audit_log_event_max_drop_size 整数 全球
Audit_log_events 整数 全球
Audit_log_events_filtered 整数 全球
Audit_log_events_lost 整数 全球
Audit_log_events_written 整数 全球
Audit_log_total_size 整数 全球
Audit_log_write_waits 整数 全球
Binlog_cache_disk_use 整数 全球
Binlog_cache_use 整数 全球
Binlog_stmt_cache_disk_use 整数 全球
Binlog_stmt_cache_use 整数 全球
Bytes_received 整数
Bytes_sent 整数
Caching_sha2_password_rsa_public_key 全球
Com_admin_commands 整数
Com_alter_db 整数
Com_alter_event 整数
Com_alter_function 整数
Com_alter_procedure 整数
Com_alter_resource_group 整数 全球
Com_alter_server 整数
Com_alter_table 整数
Com_alter_tablespace 整数
Com_alter_user 整数
Com_alter_user_default_role 整数 全球
Com_analyze 整数
Com_assign_to_keycache 整数
Com_begin 整数
Com_binlog 整数
Com_call_procedure 整数
Com_change_db 整数
Com_change_master 整数
Com_change_repl_filter 整数
Com_check 整数
Com_checksum 整数
Com_commit 整数
Com_create_db 整数
Com_create_event 整数
Com_create_function 整数
Com_create_index 整数
Com_create_procedure 整数
Com_create_resource_group 整数 全球
Com_create_role 整数 全球
Com_create_server 整数
Com_create_table 整数
Com_create_trigger 整数
Com_create_udf 整数
Com_create_user 整数
Com_create_view 整数
Com_dealloc_sql 整数
Com_delete 整数
Com_delete_multi 整数
Com_do 整数
Com_drop_db 整数
Com_drop_event 整数
Com_drop_function 整数
Com_drop_index 整数
Com_drop_procedure 整数
Com_drop_resource_group 整数 全球
Com_drop_role 整数 全球
Com_drop_server 整数
Com_drop_table 整数
Com_drop_trigger 整数
Com_drop_user 整数
Com_drop_view 整数
Com_empty_query 整数
Com_execute_sql 整数
Com_explain_other 整数
Com_flush 整数
Com_get_diagnostics 整数
Com_grant 整数
Com_grant_roles 整数 全球
Com_group_replication_start 整数 全球
Com_group_replication_stop 整数 全球
Com_ha_close 整数
Com_ha_open 整数
Com_ha_read 整数
Com_help 整数
Com_insert 整数
Com_insert_select 整数
Com_install_component 整数 全球
Com_install_plugin 整数
Com_kill 整数
Com_load 整数
Com_lock_tables 整数
Com_optimize 整数
Com_preload_keys 整数
Com_prepare_sql 整数
Com_purge 整数
Com_purge_before_date 整数
Com_release_savepoint 整数
Com_rename_table 整数
Com_rename_user 整数
Com_repair 整数
Com_replace 整数
Com_replace_select 整数
Com_reset 整数
Com_resignal 整数
Com_revoke 整数
Com_revoke_all 整数
Com_revoke_roles 整数 全球
Com_rollback 整数
Com_rollback_to_savepoint 整数
Com_savepoint 整数
Com_select 整数
Com_set_option 整数
Com_set_resource_group 整数 全球
Com_set_role 整数 全球
Com_show_authors 整数
Com_show_binlog_events 整数
Com_show_binlogs 整数
Com_show_charsets 整数
Com_show_collat​​ions 整数
Com_show_contributors 整数
Com_show_create_db 整数
Com_show_create_event 整数
Com_show_create_func 整数
Com_show_create_proc 整数
Com_show_create_table 整数
Com_show_create_trigger 整数
Com_show_create_user 整数
Com_show_databases 整数
Com_show_engine_logs 整数
Com_show_engine_mutex 整数
Com_show_engine_status 整数
Com_show_errors 整数
Com_show_events 整数
Com_show_fields 整数
Com_show_function_code 整数
Com_show_function_status 整数
Com_show_grants 整数
Com_show_keys 整数
Com_show_master_status 整数
Com_show_ndb_status 整数
Com_show_open_tables 整数
Com_show_plugins 整数
Com_show_privileges 整数
Com_show_procedure_code 整数
Com_show_procedure_status 整数
Com_show_processlist 整数
Com_show_profile 整数
Com_show_profiles 整数
Com_show_relaylog_events 整数
Com_show_slave_hosts 整数
Com_show_slave_status 整数
Com_show_status 整数
Com_show_storage_engines 整数
Com_show_table_status 整数
Com_show_tables 整数
Com_show_triggers 整数
Com_show_variables 整数
Com_show_warnings 整数
Com_shutdown 整数
Com_signal 整数
Com_slave_start 整数
Com_slave_stop 整数
Com_stmt_close 整数
Com_stmt_execute 整数
Com_stmt_fetch 整数
Com_stmt_prepare 整数
Com_stmt_reprepare 整数
Com_stmt_reset 整数
Com_stmt_send_long_data 整数
Com_truncate 整数
Com_uninstall_component 整数 全球
Com_uninstall_plugin 整数
Com_unlock_tables 整数
Com_update 整数
Com_update_multi 整数
Com_xa_commit 整数
Com_xa_end 整数
Com_xa_prepare 整数
Com_xa_recover 整数
Com_xa_rollback 整数
Com_xa_start 整数
压缩 整数 会议
Connection_control_delay_generated 整数 全球
Connection_errors_accept 整数 全球
Connection_errors_internal 整数 全球
Connection_errors_max_connections 整数 全球
Connection_errors_peer_address 整数 全球
Connection_errors_select 整数 全球
Connection_errors_tcpwrap 整数 全球
连接 整数 全球
Created_tmp_disk_tables 整数
Created_tmp_files 整数 全球
Created_tmp_tables 整数
Current_tls_ca 文件名 全球
Current_tls_capath 目录名称 全球
Current_tls_cert 文件名 全球
Current_tls_cipher 全球
Current_tls_ciphersuites 全球
Current_tls_crl 文件名 全球
Current_tls_crlpath 目录名称 全球
Current_tls_key 文件名 全球
Current_tls_version 全球
Delayed_errors 整数 全球
Delayed_insert_threads 整数 全球
Delayed_writes 整数 全球
dragnet.Status 全球
Firewall_access_denied 整数 全球
Firewall_access_granted 整数 全球
Firewall_cached_entries 整数 全球
Flush_commands 整数 全球
group_replication_primary_member 全球
Handler_commit 整数
Handler_delete 整数
Handler_discover 整数
Handler_external_lock 整数
Handler_mrr_init 整数
Handler_prepare 整数
Handler_read_first 整数
Handler_read_key 整数
Handler_read_last 整数
Handler_read_next 整数
Handler_read_prev 整数
Handler_read_rnd 整数
Handler_read_rnd_next 整数
Handler_rollback 整数
Handler_savepoint 整数
Handler_savepoint_rollback 整数
Handler_update 整数
Handler_write 整数
Innodb_available_undo_logs 整数 全球
Innodb_buffer_pool_bytes_data 整数 全球
Innodb_buffer_pool_bytes_dirty 整数 全球
Innodb_buffer_pool_dump_status 全球
Innodb_buffer_pool_load_status 全球
Innodb_buffer_pool_pages_data 整数 全球
Innodb_buffer_pool_pages_dirty 整数 全球
Innodb_buffer_pool_pages_flushed 整数 全球
Innodb_buffer_pool_pages_free 整数 全球
Innodb_buffer_pool_pages_latched 整数 全球
Innodb_buffer_pool_pages_misc 整数 全球
Innodb_buffer_pool_pages_total 整数 全球
Innodb_buffer_pool_read_ahead 整数 全球
Innodb_buffer_pool_read_ahead_evicted 整数 全球
Innodb_buffer_pool_read_ahead_rnd 整数 全球
Innodb_buffer_pool_read_requests 整数 全球
Innodb_buffer_pool_reads 整数 全球
Innodb_buffer_pool_resize_status 全球
Innodb_buffer_pool_wait_free 整数 全球
Innodb_buffer_pool_write_requests 整数 全球
Innodb_data_fsyncs 整数 全球
Innodb_data_pending_fsyncs 整数 全球
Innodb_data_pending_reads 整数 全球
Innodb_data_pending_writes 整数 全球
Innodb_data_read 整数 全球
Innodb_data_reads 整数 全球
Innodb_data_writes 整数 全球
Innodb_data_written 整数 全球
Innodb_dblwr_pages_written 整数 全球
Innodb_dblwr_writes 整数 全球
Innodb_have_atomic_builtins 整数 全球
Innodb_log_waits 整数 全球
Innodb_log_write_requests 整数 全球
Innodb_log_writes 整数 全球
Innodb_num_open_files 整数 全球
Innodb_os_log_fsyncs 整数 全球
Innodb_os_log_pending_fsyncs 整数 全球
Innodb_os_log_pending_writes 整数 全球
Innodb_os_log_written 整数 全球
Innodb_page_size 整数 全球
Innodb_pages_created 整数 全球
Innodb_pages_read 整数 全球
Innodb_pages_written 整数 全球
Innodb_row_lock_current_waits 整数 全球
Innodb_row_lock_time 整数 全球
Innodb_row_lock_time_avg 整数 全球
Innodb_row_lock_time_max 整数 全球
Innodb_row_lock_waits 整数 全球
Innodb_rows_deleted 整数 全球
Innodb_rows_inserted 整数 全球
Innodb_rows_read 整数 全球
Innodb_rows_updated 整数 全球
Innodb_truncated_status_writes 整数 全球
Key_blocks_not_flushed 整数 全球
Key_blocks_unused 整数 全球
Key_blocks_used 整数 全球
Key_read_requests 整数 全球
Key_reads 整数 全球
Key_write_requests 整数 全球
Key_writes将 整数 全球
Last_query_cost 数字 会议
Last_query_partial_plans 整数 会议
Locked_connects 整数 全球
Max_execution_time_exceeded 整数
Max_execution_time_set 整数
Max_execution_time_set_failed 整数
Max_used_connections 整数 全球
Max_used_connections_time 约会时间 全球
mecab_charset 全球
Mysqlx_aborted_clients 整数 全球
Mysqlx_address 全球
Mysqlx_bytes_received 整数
Mysqlx_bytes_sent 整数
Mysqlx_connection_accept_errors 整数
Mysqlx_connection_errors 整数
Mysqlx_connections_accepted 整数 全球
Mysqlx_connections_closed 整数 全球
Mysqlx_connections_rejected 整数 全球
Mysqlx_crud_create_view 整数
Mysqlx_crud_delete 整数
Mysqlx_crud_drop_view 整数
Mysqlx_crud_find 整数
Mysqlx_crud_insert 整数
Mysqlx_crud_modify_view 整数
Mysqlx_crud_update 整数
Mysqlx_cursor_close 整数
Mysqlx_cursor_fetch 整数
Mysqlx_cursor_open 整数
Mysqlx_errors_sent 整数
Mysqlx_errors_unknown_message_type 整数
Mysqlx_expect_close 整数
Mysqlx_expect_open 整数
Mysqlx_init_error 整数
Mysqlx_notice_global_sent 整数
Mysqlx_notice_other_sent 整数
Mysqlx_notice_warning_sent 整数
Mysqlx_notified_by_group_replication 整数
Mysqlx_port 全球
Mysqlx_prep_deallocate 整数
Mysqlx_prep_execute 整数
Mysqlx_prep_prepare 整数
Mysqlx_rows_sent 整数
Mysqlx_sessions 整数 全球
Mysqlx_sessions_accepted 整数 全球
Mysqlx_sessions_closed 整数 全球
Mysqlx_sessions_fatal_error 整数 全球
Mysqlx_sessions_killed 整数 全球
Mysqlx_sessions_rejected 整数 全球
Mysqlx_socket 全球
Mysqlx_ssl_accept_renegotiates 整数 全球
Mysqlx_ssl_accepts 整数 全球
Mysqlx_ssl_active 整数
Mysqlx_ssl_cipher 整数
Mysqlx_ssl_cipher_list 整数
Mysqlx_ssl_ctx_verify_depth 整数
Mysqlx_ssl_ctx_verify_mode 整数
Mysqlx_ssl_finished_accepts 整数 全球
Mysqlx_ssl_server_not_after 整数 全球
Mysqlx_ssl_server_not_before 整数 全球
Mysqlx_ssl_verify_depth 整数 全球
Mysqlx_ssl_verify_mode 整数 全球
Mysqlx_ssl_version 整数
Mysqlx_stmt_create_collection 整数
Mysqlx_stmt_create_collection_index 整数
Mysqlx_stmt_disable_notices 整数
Mysqlx_stmt_drop_collection 整数
Mysqlx_stmt_drop_collection_index 整数
Mysqlx_stmt_enable_notices 整数
Mysqlx_stmt_ensure_collection
Mysqlx_stmt_execute_mysqlx 整数
Mysqlx_stmt_execute_sql 整数
Mysqlx_stmt_execute_xplugin 整数
Mysqlx_stmt_kill_client 整数
Mysqlx_stmt_list_clients 整数
Mysqlx_stmt_list_notices 整数
Mysqlx_stmt_list_objects 整数
Mysqlx_stmt_ping 整数
Mysqlx_worker_threads 整数 全球
Mysqlx_worker_threads_active 整数 全球
Ndb_api_bytes_received_count 整数 全球
Ndb_api_bytes_received_count_session 整数 会议
Ndb_api_bytes_received_count_slave 整数 全球
Ndb_api_bytes_sent_count 整数 全球
Ndb_api_bytes_sent_count_session 整数 会议
Ndb_api_bytes_sent_count_slave 整数 全球
Ndb_api_event_bytes_count 整数 全球
Ndb_api_event_bytes_count_injector 整数 全球
Ndb_api_event_data_count 整数 全球
Ndb_api_event_data_count_injector 整数 全球
Ndb_api_event_nondata_count 整数 全球
Ndb_api_event_nondata_count_injector 整数 全球
Ndb_api_pk_op_count 整数 全球
Ndb_api_pk_op_count_session 整数 会议
Ndb_api_pk_op_count_slave 整数 全球
Ndb_api_pruned_scan_count 整数 全球
Ndb_api_pruned_scan_count_session 整数 会议
Ndb_api_pruned_scan_count_slave 整数 全球
Ndb_api_range_scan_count 整数 全球
Ndb_api_range_scan_count_session 整数 会议
Ndb_api_range_scan_count_slave 整数 全球
Ndb_api_read_row_count 整数 全球
Ndb_api_read_row_count_session 整数 会议
Ndb_api_read_row_count_slave 整数 全球
Ndb_api_scan_batch_count 整数 全球
Ndb_api_scan_batch_count_session 整数 会议
Ndb_api_scan_batch_count_slave 整数 全球
Ndb_api_table_scan_count 整数 全球
Ndb_api_table_scan_count_session 整数 会议
Ndb_api_table_scan_count_slave 整数 全球
Ndb_api_trans_abort_count 整数 全球
Ndb_api_trans_abort_count_session 整数 会议
Ndb_api_trans_abort_count_slave 整数 全球
Ndb_api_trans_close_count 整数 全球
Ndb_api_trans_close_count_session 整数 会议
Ndb_api_trans_close_count_slave 整数 全球
Ndb_api_trans_commit_count 整数 全球
Ndb_api_trans_commit_count_session 整数 会议
Ndb_api_trans_commit_count_slave 整数 全球
Ndb_api_trans_local_read_row_count 整数 全球
Ndb_api_trans_local_read_row_count_session 整数 会议
Ndb_api_trans_local_read_row_count_slave 整数 全球
Ndb_api_trans_start_count 整数 全球
Ndb_api_trans_start_count_session 整数 会议
Ndb_api_trans_start_count_slave 整数 全球
Ndb_api_uk_op_count 整数 全球
Ndb_api_uk_op_count_session 整数 会议
Ndb_api_uk_op_count_slave 整数 全球
Ndb_api_wait_exec_complete_count 整数 全球
Ndb_api_wait_exec_complete_count_session 整数 会议
Ndb_api_wait_exec_complete_count_slave 整数 全球
Ndb_api_wait_meta_request_count 整数 全球
Ndb_api_wait_meta_request_count_session 整数 会议
Ndb_api_wait_meta_request_count_slave 整数 全球
Ndb_api_wait_nanos_count 整数 全球
Ndb_api_wait_nanos_count_session 整数 会议
Ndb_api_wait_nanos_count_slave 整数 全球
Ndb_api_wait_scan_result_count 整数 全球
Ndb_api_wait_scan_result_count_session 整数 会议
Ndb_api_wait_scan_result_count_slave 整数 全球
Ndb_cluster_node_id 整数 全球
Ndb_config_from_host 整数
Ndb_config_from_port 整数
Ndb_conflict_fn_epoch 整数 全球
Ndb_conflict_fn_epoch_trans 整数 全球
Ndb_conflict_fn_epoch2 整数 全球
Ndb_conflict_fn_epoch2_trans 整数 全球
Ndb_conflict_fn_max 整数 全球
Ndb_conflict_fn_old 整数 全球
Ndb_conflict_last_stable_epoch 整数 全球
Ndb_conflict_reflected_op_discard_count 整数 全球
Ndb_conflict_reflected_op_prepare_count 整数 全球
Ndb_conflict_refresh_op_count 整数 全球
Ndb_conflict_trans_conflict_commit_count 整数 全球
Ndb_conflict_trans_detect_iter_count 整数 全球
Ndb_conflict_trans_reject_count 整数 全球
Ndb_conflict_trans_row_conflict_count 整数 全球
Ndb_conflict_trans_row_reject_count 整数 全球
Ndb_epoch_delete_delete_count 整数 全球
Ndb_execute_count 整数 全球
Ndb_last_commit_epoch_server 整数 全球
Ndb_last_commit_epoch_session 整数 会议
Ndb_metadata_detected_count 整数 全球
Ndb_cluster_node_id 整数 全球
Ndb_number_of_data_nodes 整数 全球
Ndb_pruned_scan_count 整数 全球
Ndb_pushed_queries_defined 整数 全球
Ndb_pushed_queries_dropped 整数 全球
Ndb_pushed_queries_executed 整数 全球
Ndb_pushed_reads 整数 全球
Ndb_scan_count 整数 全球
Ndb_trans_hint_count_session 整数
Not_flushed_delayed_rows 整数 全球
Ongoing_anonymous_gtid_violating_transaction_count 整数 全球
Ongoing_anonymous_transaction_count 整数 全球
Ongoing_automatic_gtid_violating_transaction_count 整数 全球
Open_files 整数 全球
Open_streams 整数 全球
Open_table_definitions 整数 全球
Open_tables 整数
Opened_files 整数 全球
Opened_table_definitions 整数
opened_tables的 整数
Performance_schema_accounts_lost 整数 全球
Performance_schema_cond_classes_lost 整数 全球
Performance_schema_cond_instances_lost 整数 全球
Performance_schema_digest_lost 整数 全球
Performance_schema_file_classes_lost 整数 全球
Performance_schema_file_handles_lost 整数 全球
Performance_schema_file_instances_lost 整数 全球
Performance_schema_hosts_lost 整数 全球
Performance_schema_index_stat_lost 整数 全球
Performance_schema_locker_lost 整数 全球
Performance_schema_memory_classes_lost 整数 全球
Performance_schema_metadata_lock_lost 整数 全球
Performance_schema_mutex_classes_lost 整数 全球
Performance_schema_mutex_instances_lost 整数 全球
Performance_schema_nested_statement_lost 整数 全球
Performance_schema_prepared_statements_lost 整数 全球
Performance_schema_program_lost 整数 全球
Performance_schema_rwlock_classes_lost 整数 全球
Performance_schema_rwlock_instances_lost 整数 全球
Performance_schema_session_connect_attrs_longest_seen 整数 全球
Performance_schema_session_connect_attrs_lost 整数 全球
Performance_schema_socket_classes_lost 整数 全球
Performance_schema_socket_instances_lost 整数 全球
Performance_schema_stage_classes_lost 整数 全球
Performance_schema_statement_classes_lost 整数 全球
Performance_schema_table_handles_lost 整数 全球
Performance_schema_table_instances_lost 整数 全球
Performance_schema_table_lock_stat_lost 整数 全球
Performance_schema_thread_classes_lost 整数 全球
Performance_schema_thread_instances_lost 整数 全球
Performance_schema_users_lost 整数 全球
Prepared_stmt_count 整数 全球
Qcache_free_blocks 整数 全球
Qcache_free_memory 整数 全球
Qcache_hits的 整数 全球
Qcache_inserts 整数 全球
Qcache_lowmem_prunes 整数 全球
Qcache_not_cached 整数 全球
Qcache_queries_in_cache 整数 全球
Qcache_total_blocks 整数 全球
查询 整数
问题 整数
Rewriter_number_loaded_rules 整数 全球
Rewriter_number_reloads 整数 全球
Rewriter_number_rewritten_queries 整数 全球
Rewriter_reload_error 布尔 全球
Rpl_semi_sync_master_clients 整数 全球
Rpl_semi_sync_master_net_avg_wait_time 整数 全球
Rpl_semi_sync_master_net_wait_time 整数 全球
Rpl_semi_sync_master_net_waits 整数 全球
Rpl_semi_sync_master_no_times 整数 全球
Rpl_semi_sync_master_no_tx 整数 全球
Rpl_semi_sync_master_status 布尔 全球
Rpl_semi_sync_master_timefunc_failures 整数 全球
Rpl_semi_sync_master_tx_avg_wait_time 整数 全球
Rpl_semi_sync_master_tx_wait_time 整数 全球
Rpl_semi_sync_master_tx_waits 整数 全球
Rpl_semi_sync_master_wait_pos_backtraverse 整数 全球
Rpl_semi_sync_master_wait_sessions 整数 全球
Rpl_semi_sync_master_yes_tx 整数 全球
Rpl_semi_sync_slave_status 布尔 全球
Rsa_public_key 全球
Secondary_engine_execution_count 整数
Select_full_join 整数
Select_full_range_join 整数
Select_range 整数
Select_range_check 整数
Select_scan 整数
Slave_heartbeat_period 数字 全球
Slave_last_heartbeat 约会时间 全球
Slave_open_temp_tables 整数 全球
Slave_received_heartbeats 整数 全球
Slave_retried_transactions 整数 全球
Slave_rows_last_search_algorithm_used 全球
Slave_running 全球
Slow_launch_threads 整数
Slow_queries要花 整数
Sort_merge_passes 整数
Sort_range 整数
Sort_rows 整数
Sort_scan 整数
Ssl_accept_renegotiates 整数 全球
Ssl_accepts 整数 全球
Ssl_callback_cache_hits 整数 全球
Ssl_cipher
Ssl_cipher_list
Ssl_client_connects 整数 全球
Ssl_connect_renegotiates 整数 全球
Ssl_ctx_verify_depth 整数 全球
Ssl_ctx_verify_mode 整数 全球
Ssl_default_timeout 整数
Ssl_finished_accepts 整数 全球
Ssl_finished_connects 整数 全球
Ssl_server_not_after 整数
Ssl_server_not_before 整数
Ssl_session_cache_hits 整数 全球
Ssl_session_cache_misses 整数 全球
Ssl_session_cache_mode 全球
Ssl_session_cache_overflows 整数 全球
Ssl_session_cache_size 整数 全球
Ssl_session_cache_timeouts 整数 全球
Ssl_sessions_reused 整数
Ssl_used_session_cache_entries 整数 全球
Ssl_verify_depth 整数
Ssl_verify_mode 整数
SSL_VERSION
Table_locks_immediate 整数 全球
Table_locks_waited 整数 全球
Table_open_cache_hits 整数
Table_open_cache_misses 整数
Table_open_cache_overflows 整数
Tc_log_max_pages_used 整数 全球
Tc_log_page_size 整数 全球
Tc_log_page_waits 整数 全球
Threads_cached 整数 全球
threads_connected的 整数 全球
由Threads_created 整数 全球
Threads_running 整数 全球
正常运行时间 整数 全球
Uptime_since_flush_status 整数 全球
validate_password_dictionary_file_last_parsed 约会时间 全球
validate_password_dictionary_file_words_count 整数 全球
validate_password.dictionary_file_last_parsed 约会时间 全球
validate_password.dictionary_file_words_count 整数 全球

5.1.7服务器命令选项

启动 mysqld 服务器时,可以使用 第4.2.2节“指定程序选项”中 所述的任何方法 指定程序选项 最常用的方法是在选项文件或命令行中提供选项。 但是,在大多数情况下,最好确保服务器每次运行时都使用相同的选项。 确保这一点的最佳方法是将它们列在选项文件中。 请参见 第4.2.2.2节“使用选项文件” 该部分还描述了选项文件格式和语法。

mysqld [mysqld] [server] 组中 读取选项 mysqld_safe的 读取选项 [mysqld] [server] [mysqld_safe] ,和 [safe_mysqld] 团体。 mysql.server [mysqld] [mysql.server] 组中 读取选项

mysqld 接受许多命令选项。 有关摘要,请执行以下命令:

mysqld --help

要查看完整列表,请使用以下命令:

mysqld --verbose --help

列表中的某些项目实际上是可以在服务器启动时设置的系统变量。 这些可以在运行时使用 SHOW VARIABLES 语句 显示 前面的 mysqld 命令 显示的某些项目 不会出现 SHOW VARIABLES 输出中; 这是因为它们只是选项,而不是系统变量。

以下列表显示了一些最常见的服务器选项。 其他选项在其他部分中描述:

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

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

某些选项采用文件名值。 除非另行指定,否则默认文件位置是数据目录(如果值是相对路径名)。 要明确指定位置,请使用绝对路径名。 假设数据目录是 /var/mysql/data 如果文件值选项作为相对路径名给出,则它将位于 /var/mysql/data 如果该值是绝对路径名,则其位置由路径名指定。

您还可以使用变量名作为选项在服务器启动时设置服务器系统变量的值。 要为服务器系统变量赋值,请使用表单选项 例如, 变量 设置 为384MB的值。 --var_name=value --sort_buffer_size=384M sort_buffer_size

为变量赋值时,MySQL可能会自动更正该值以保持在给定范围内,或者如果仅允许某些值,则将值调整为最接近的允许值。

要限制在运行时可以使用 SET 语句 设置系统变量的 最大值,请 在服务器启动时 使用表单选项指定此最大值 --maximum-var_name=value

您可以使用该 SET 语句 在运行时更改大多数系统变量的值 请参见 第13.7.5.1节“变量赋值的SET语法”

第5.1.8节“服务器系统变量” 提供了所有变量的完整描述,以及在服务器启动和运行时设置它们的其他信息。 有关更改系统变量的信息,请参见 第5.1.1节“配置服务器”

  • --help -?

    属性
    命令行格式 --help

    显示简短的帮助消息并退出。 使用 --verbose --help 选项查看完整消息。

  • --allow-suspicious-udfs

    属性
    命令行格式 --allow-suspicious-udfs[={OFF|ON}]
    类型 布尔
    默认值 OFF

    此选项控制是否 xxx 可以加载 仅包含 主函数符号的 用户定义函数 默认情况下,该选项处于关闭状态,只能加载至少具有一个辅助符号的UDF; 这可以防止尝试从包含合法UDF的共享对象文件加载函数。 请参见 第29.4.2.6节“UDF安全注意事项”

  • --ansi

    属性
    命令行格式 --ansi

    使用标准(ANSI)SQL语法而不是MySQL语法。 要更精确地控制服务器SQL模式,请改用该 --sql-mode 选项。 请参见 第1.8节“MySQL标准符合性” 第5.1.11节“服务器SQL模式”

  • --basedir=dir_name -b dir_name

    属性
    命令行格式 --basedir=dir_name
    系统变量 basedir
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 目录名称
    默认值 (> = 8.0.2) parent of mysqld installation directory
    默认值 (<= 8.0.1) configuration-dependent default

    MySQL安装目录的路径。 此选项设置 basedir 系统变量。

    服务器可执行文件在启动时确定其自己的完整路径名,并使用其所在目录的父级作为默认 basedir 值。 这反过来使服务器能够 basedir 在搜索与服务器相关的信息时 使用它 ,例如 share 包含错误消息 目录。

  • --character-set-client-handshake

    属性
    命令行格式 --character-set-client-handshake[={OFF|ON}]
    类型 布尔
    默认值 ON

    不要忽略客户端发送的字符集信息。 要忽略客户端信息并使用默认服务器字符集,请使用 --skip-character-set-client-handshake ; 这使得MySQL的行为与MySQL 4.0相似。

  • --chroot=dir_name -r dir_name

    属性
    命令行格式 --chroot=dir_name
    类型 目录名称

    使用 系统调用 在启动期间 mysqld 服务器置于封闭环境中 chroot() 这是建议的安全措施。 使用此选项有点限制 LOAD DATA SELECT ... INTO OUTFILE

  • --console

    属性
    命令行格式 --console
    平台特定 视窗

    (仅限Windows。)导致默认错误日志目标为控制台。 这会影响将自己的输出目标基于默认目标的日志编写器。 请参见 第5.4.2节“错误日志” 如果使用此选项, mysqld 不会关闭控制台窗口。

    --console 优先于 --log-error 两者都给出。

  • --core-file

    属性
    命令行格式 --core-file[={OFF|ON}]
    类型 布尔
    默认值 OFF

    如果 mysqld 死了, 写一个核心文件 核心文件的名称和位置取决于系统。 在Linux上,名为的核心文件 被写入进程的当前工作目录, mysqld 是数据目录。 表示服务器进程的进程ID。 在macOS上,名为的核心文件将 写入 目录。 在Solaris上,使用 coreadm 命令指定写入核心文件的位置以及如何命名。 core.pid pid core.pid /cores

    对于某些系统,要获取核心文件,还必须指定 mysqld_safe --core-file-size 选项 请参见 第4.3.2节“ mysqld_safe - MySQL服务器启动脚本” 在某些系统(如Solaris)上,如果您还使用该 选项 ,则不会获得核心文件 可能存在其他限制或限制。 例如,可能需要执行 ulimit -c unlimited --user 在启动服务器之前 请参阅系统文档。

    innodb_buffer_pool_in_core_file 变量可用于减少支持它的操作系统上的核心文件的大小。 有关更多信息,请参见 第15.8.3.8节“从核心文件中排除缓冲池页面”

  • --daemonize -D

    属性
    命令行格式 --daemonize[={OFF|ON}]
    类型 布尔
    默认值 OFF

    此选项使服务器作为传统的分叉守护程序运行,允许它与使用systemd进行过程控制的操作系统一起使用。 有关更多信息,请参见 第2.5.9节“使用systemd管理MySQL服务器”

    --daemonize --initialize 是互斥的 --initialize-insecure

    如果使用该 --daemonize 选项 启动服务器 但未连接到tty设备, --log-error="" 则在缺少显式日志记录选项的情况下使用 缺省错误日志 记录选项,以将错误输出定向到缺省日志文件。

    -D 是...的同义词 --daemonize

  • --datadir=dir_name -h dir_name

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

    MySQL服务器数据目录的路径。 此选项设置 datadir 系统变量。 请参阅该变量的说明。

  • --debug[=debug_options] -# [debug_options]

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

    如果MySQL配置了 CMake 选项,您可以使用此选项获取 mysqld 正在执行 的跟踪文件 典型的 字符串是 默认是 在Unix和 -DWITH_DEBUG=1 debug_options d:t:o,file_name d:t:i:o,/tmp/mysqld.trace d:t:i:O,\mysqld.trace Windows上。

    使用 -DWITH_DEBUG=1 调试支持配置MySQL使您 --debug="d,parser_debug" 可以在启动服务器时 使用该 选项。 这会导致用于处理SQL语句的Bison解析器将解析器跟踪转储到服务器的标准错误输出。 通常,此输出将写入错误日志。

    可以多次给出该选项。 以先前值 开头 + - 添加或减去的值。 例如, 将值设置为 --debug=T --debug=+P P:T

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

  • --debug-sync-timeout[=N]

    属性
    命令行格式 --debug-sync-timeout[=#]
    类型 整数

    控制是否启用用于测试和调试的Debug Sync工具。 使用Debug Sync要求使用 CMake 选项 配置MySQL (请参见 第2.9.4节“MySQL源配置选项” )。 如果未编译Debug Sync,则此选项不可用。 选项值是以秒为单位的超时。 默认值为0,禁用Debug Sync。 要启用它,请指定大于0的值; 此值也将成为各个同步点的默认超时。 如果给出的选项没有值,则超时设置为300秒。 -DENABLE_DEBUG_SYNC=1

    有关Debug Sync工具以及如何使用同步点的说明,请参阅 MySQL Internals:Test Synchronization

  • --default-storage-engine=type

    属性
    命令行格式 --default-storage-engine=name
    系统变量 default_storage_engine
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 InnoDB

    设置表的默认存储引擎。 请参见 第16章, 备用存储引擎 此选项仅为永久表设置存储引擎。 要为 TEMPORARY 设置存储引擎 ,请设置 default_tmp_storage_engine 系统变量。

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

  • --default-time-zone=timezone

    属性
    命令行格式 --default-time-zone=name
    类型

    设置默认服务器时区。 此选项设置全局 time_zone 系统变量。 如果未指定此选项,则默认时区与系统时区相同(由 system_time_zone 系统变量 的值给定)

  • --defaults-extra-file=file_name

    在全局选项文件之后读取此选项文件,但在用户选项文件之前(在Unix上)。 如果文件不存在或无法访问,则会发生错误。 file_name 如果作为相对路径名而不是完整路径名给出,则相对于当前目录进行解释。 如果使用它,它必须是命令行上的第一个选项。

    有关此选项和其他选项文件选项的其他信息,请参见 第4.2.2.3节“影响选项文件处理的命令行选项”

  • --defaults-file=file_name

    只读给定的选项文件。 如果文件不存在或无法访问,则会发生错误。 file_name 如果作为相对路径名而不是完整路径名给出,则相对于当前目录进行解释。

    例外:即使有 --defaults-file mysqld 读取 mysqld-auto.cnf

    注意

    如果使用它,这必须是命令行上的第一个选项,除非服务器以 --defaults-file --install (或 --install-manual )选项启动, --install (或 --install-manual )必须是第一个。

    有关此选项和其他选项文件选项的其他信息,请参见 第4.2.2.3节“影响选项文件处理的命令行选项”

  • --defaults-group-suffix=str

    不仅要读取常用选项组,还要读取通常名称和后缀的组 str 例如, mysqld 通常会读取该 [mysqld] 组。 如果 --defaults-group-suffix=_other 给出 了该 选项, mysqld 也会读取该 [mysqld_other] 组。

    有关此选项和其他选项文件选项的其他信息,请参见 第4.2.2.3节“影响选项文件处理的命令行选项”

  • --des-key-file=file_name

    属性
    命令行格式 --des-key-file=file_name
    弃用 是(在8.0.3中删除)

    在MySQL 8.0.3中删除了此选项。

  • --early-plugin-load=plugin_list

    属性
    命令行格式 --early-plugin-load=plugin_list
    类型
    默认值 empty string

    此选项告诉服务器在加载强制内置插件之前和存储引擎初始化之前要加载哪些插件。 如果 --early-plugin-load 给出了 多个 选项,则仅使用最后一个选项。

    选项值是以分号分隔的 列表 每个 都是要加载的插件的名称,并且 是包含插件代码的库文件的名称。 如果插件库的名称没有任何前面的插件名称,则服务器会加载库中的所有插件。 服务器在 系统变量 指定的目录中查找插件库文件 name=plugin_library plugin_library name plugin_library plugin_dir

    例如,如果插件名为 myplug1 myplug2 有库文件 myplug1.so myplug2.so ,使用此选项来执行早期的插件加载:

    外壳> mysqld --early-plugin-load="myplug1=myplug1.so;myplug2=myplug2.so"
    

    参数值周围使用引号,因为否则 ; 某些命令解释器会将 分号( )解释为特殊字符。 (例如,Unix shell将其视为命令终止符。)

    每个命名的插件都会提前加载, 用于 mysqld 的单次调用 重新启动后,插件不会提前加载,除非 --early-plugin-load 再次使用。

    如果使用 --initialize 启动服务器 --initialize-insecure --early-plugin-load 则未加载 指定的插件

    如果运行服务器,则 --help 指定的插件 --early-plugin-load 已加载但未初始化。 此行为可确保插件选项显示在帮助消息中。

    默认 --early-plugin-load 值为空。 要加载 keyring_file 插件,必须使用 --early-plugin-load 具有非空值 的显式 选项。

    InnoDB 表空间加密功能依赖于 keyring_file 插件加密密钥管理和 keyring_file 插件之前必须存储引擎初始化加载,以便 InnoDB 为加密表恢复。 想要 keyring_file 在启动时加载插件的 管理员 应使用适当的非空选项值(例如, keyring_file.so 在Unix和类Unix系统以及 keyring_file.dll Windows上)。

    有关 InnoDB 表空间加密的 信息 ,请参见 第15.6.3.9节“InnoDB静态数据加密” 有关插件加载的一般信息,请参见 第5.6.1节“安装和卸载插件”

  • --enable-named-pipe

    属性
    命令行格式 --enable-named-pipe
    平台特定 视窗

    启用对命名管道的支持。 此选项仅适用于Windows。

  • --event-scheduler[=value]

    属性
    命令行格式 --event-scheduler[=value]
    系统变量 event_scheduler
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 (> = 8.0.3) ON
    默认值 (<= 8.0.2) OFF
    有效值

    ON

    OFF

    DISABLED

    启用或禁用,启动或停止事件调度程序。

    有关详细信息,请参阅 --event-scheduler 选项

  • --exit-info[=flags] -T [flags]

    属性
    命令行格式 --exit-info[=flags]
    类型 整数

    这是一个不同标志的位掩码,可用于调试 mysqld 服务器。 除非您 确切 知道它的作用, 否则请勿使用此选项

  • --external-locking

    属性
    命令行格式 --external-locking[={OFF|ON}]
    类型 布尔
    默认值 OFF

    启用外部锁定(系统锁定),默认情况下禁用。 如果在 lockd 不能完全工作的系统(例如Linux) 上使用此选项 ,则 mysqld 很容易 死锁。

    要显式禁用外部锁定,请使用 --skip-external-locking

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

  • --flush

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

    在每个SQL语句之后刷新(同步)对磁盘的所有更改。 通常,MySQL仅在每个SQL语句之后写入对磁盘的所有更改,并让操作系统处理与磁盘的同步。 请参见 第B.4.3.3节“如果MySQL不断崩溃该怎么办”

    注意

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

  • --gdb

    属性
    命令行格式 --gdb[={OFF|ON}]
    类型 布尔
    默认值 OFF

    安装中断处理程序 SIGINT (停止所需 的mysqld ^C 设置断点),并且禁止堆栈跟踪和核心文件处理。 请参见 第29.5节“调试和移植MySQL”

    在Windows上,此选项还会禁止用于实现 RESTART 语句 的分叉 :分叉使一个进程充当另一个进程的监视器,另一个进程充当服务器。 但是,分叉使得确定要附加的服务器进程以进行调试更加困难,因此启动服务器时会 --gdb 抑制分叉。 对于使用此选项启动的服务器, RESTART 只需退出并且不重新启动。

    在非调试设置中, --no-monitor 可用于抑制分支监视器进程。

  • --general-log[={0|1}]

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

    指定初始常规查询日志状态。 如果没有参数或参数为1,则该 --general-log 选项将启用日志。 如果省略或参数为0,则该选项将禁用日志。

  • --initialize -I

    属性
    命令行格式 --initialize[={OFF|ON}]
    类型 布尔
    默认值 OFF

    此选项用于通过创建数据目录并填充 mysql 系统数据库中 的表来初始化MySQL安装 有关更多信息,请参见 第2.10.1节“初始化数据目录”

    启动服务器时 --initialize ,某些功能不可用,这限制了该 --init-file 选项 指定的任何文件中允许的语句 有关更多信息,请参阅该选项的说明。 此外, disabled_storage_engines 系统变量无效。

    --ndbcluster 与...一起使用时, 选项将被忽略 --initialize

    --initialize 是互斥的 --daemonize

    -I 是...的同义词 --initialize

  • --initialize-insecure

    属性
    命令行格式 --initialize-insecure[={OFF|ON}]
    类型 布尔
    默认值 OFF

    此选项用于通过创建数据目录并填充 mysql 系统数据库中 的表来初始化MySQL安装 这个选项意味着 --initialize 有关更多信息,请参阅该选项的说明以及 第2.10.1节“初始化数据目录”

    --initialize-insecure 是互斥的 --daemonize

  • --init-file=file_name

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

    在启动时从此文件中读取SQL语句。 每个声明必须在一行上,不应包含注释。

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

  • --innodb-xxx

    设置 InnoDB 存储引擎 的选项 这些 InnoDB 选项在 第15.13节“InnoDB启动选项和系统变量” 中列出

  • --install [service_name]

    属性
    命令行格式 --install [service_name]
    平台特定 视窗

    (仅限Windows)将服务器安装为在Windows启动期间自动启动的Windows服务。 MySQL 如果没有 service_name 给出值,则 默认服务名称 有关更多信息,请参见 第2.3.5.8节“将MySQL作为Windows服务启动”

    注意

    如果使用 --defaults-file --install 选项 启动服务器 ,则 --install 必须先进行。

  • --install-manual [service_name]

    属性
    命令行格式 --install-manual [service_name]
    平台特定 视窗

    (仅限Windows)将服务器安装为必须手动启动的Windows服务。 它在Windows启动期间不会自动启动。 MySQL 如果没有 service_name 给出值,则 默认服务名称 有关更多信息,请参见 第2.3.5.8节“将MySQL作为Windows服务启动”

    注意

    如果使用 --defaults-file --install-manual 选项 启动服务器 ,则 --install-manual 必须先进行。

  • --language=lang_name, -L lang_name

    属性
    命令行格式 --language=name
    弃用 是; 使用 lc-messages-dir
    系统变量 language
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 目录名称
    默认值 /usr/local/mysql/share/mysql/english/

    用于错误消息的语言。 lang_name 可以作为语言名称或作为安装语言文件的目录的完整路径名。 请参见 第10.11节“设置错误消息语言”

    --lc-messages-dir 并且 --lc-messages 应该使用,而不是 --language ,其被弃用(并作为别名处理 --lc-messages-dir )。 --language 选项将在未来的MySQL版本中删除。

  • --large-pages

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

    某些硬件/操作系统体系结构支持大于默认值的内存页(通常为4KB)。 此支持的实际实现取决于底层硬件和操作系统。 执行大量内存访问的应用程序可能会因为减少了转换后备缓冲区(TLB)丢失而使用大页面来提高性能。

    MySQL支持Linux实现大页面支持(在Linux中称为HugeTLB)。 请参见 第8.12.3.2节“启用大页面支持” 有关大页面的Solaris支持,请参阅该 --super-large-pages 选项 的说明

    --large-pages 默认情况下禁用。

  • --lc-messages=locale_name

    属性
    命令行格式 --lc-messages=name
    系统变量 lc_messages
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 en_US

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

  • --lc-messages-dir=dir_name

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

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

  • --local-service

    属性
    命令行格式 --local-service

    (仅限Windows) --local-service 服务名称后面的选项会导致服务器使用 LocalService 具有有限系统权限 Windows帐户 运行 如果两个 --defaults-file --local-service 给出以下服务名称,他们可以在任何顺序。 请参见 第2.3.5.8节“将MySQL作为Windows服务启动”

  • --log-error[=file_name]

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

    将默认错误日志目标设置为指定文件。 这会影响将自己的输出目标基于默认目标的日志编写器。 请参见 第5.4.2节“错误日志”

    如果该选项没有命名文件,则Unix和类Unix系统上的默认错误日志目标是 host_name.err 数据目录中 指定的文件 除非 --pid-file 指定 了该 选项 ,否则Windows上的默认目标是相同的 在这种情况下,文件名是PID文件基本名称, .err 在数据目录中 带有后缀

    如果该选项命名文件,则默认目标是该文件( .err 如果名称没有后缀,则添加后缀),位于数据目录下,除非给出绝对路径名以指定其他位置。

    如果错误日志输出无法重定向到错误日志文件,则会发生错误并且启动失败。

    在Windows上, --console 优先于 --log-error 两者都给出。 在这种情况下,默认错误日志目标是控制台而不是文件。

  • --log-isam[=file_name]

    属性
    命令行格式 --log-isam[=file_name]
    类型 文件名

    记录 MyISAM 对此文件的 所有 更改(仅在调试时使用 MyISAM )。

  • --log-queries-not-using-indexes

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

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

  • --log-raw

    属性
    命令行格式 --log-raw[={OFF|ON}]
    类型 布尔
    默认值 OFF

    写入通用查询日志,慢查询日志和二进制日志的某些语句中的密码将由服务器重写,而不是以纯文本形式发生。 通过使用该 --log-raw 选项 启动服务器,可以为通用查询日志禁止密码重写 此选项可用于诊断目的,以查看服务器收到的语句的确切文本,但出于安全原因,建议不要将其用于生产用途。

    如果安装了查询重写插件,该 --log-raw 选项会影响语句日志记录,如下所示:

    • 如果没有 --log-raw ,服务器会记录查询重写插件返回的语句。 这可能与收到的声明不同。

    • 使用时 --log-raw ,服务器将原始语句记录为已接收。

    有关更多信息,请参见 第6.1.2.3节“密码和日志记录”

  • --log-short-format

    属性
    命令行格式 --log-short-format[={OFF|ON}]
    类型 布尔
    默认值 OFF

    如果已激活,则将较少的信息记录到慢速查询日志中。

  • --log-tc=file_name

    属性
    命令行格式 --log-tc=file_name
    类型 文件名
    默认值 tc.log

    内存映射事务协调程序日志文件的名称(适用于禁用二进制日志时影响多个存储引擎的XA事务)。 默认名称是 tc.log 如果未作为完整路径名提供,则在数据目录下创建该文件。 此选项未使用。

  • --log-tc-size=size

    属性
    命令行格式 --log-tc-size=#
    类型 整数
    默认值 6 * page size
    最低价值 6 * page size
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    内存映射事务协调器日志的大小(以字节为单位)。 默认值和最小值是页面大小的6倍,值必须是页面大小的倍数。

  • --log-warnings[=level] -W [level]

    属性
    命令行格式 --log-warnings[=#]
    弃用 是(在8.0.3中删除)
    系统变量 log_warnings
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 2
    最低价值 0
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    在MySQL 8.0.3中删除了此选项。 请改用 log_error_verbosity 系统变量。

  • --low-priority-updates

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

    得到表修改操作( INSERT REPLACE DELETE UPDATE ),比选择较低优先级。 这也可以使用 {INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ... 降低仅一个查询的优先级,或通过 SET LOW_PRIORITY_UPDATES=1 更改一个线程中的优先级来完成。 这会影响只使用表级锁(仅存储引擎 MyISAM MEMORY MERGE )。 请参见 第8.11.2节“表锁定问题”

  • --min-examined-row-limit=number

    属性
    命令行格式 --min-examined-row-limit=#
    系统变量 min_examined_row_limit
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    设置此选项后,检查少于 number 行的查询不会写入慢查询日志。 默认值为0。

  • --memlock

    属性
    命令行格式 --memlock[={OFF|ON}]
    类型 布尔
    默认值 OFF

    mysqld 进程 锁定 在内存中。 如果您遇到操作系统导致 mysqld 交换到磁盘 的问题,此选项可能会有所帮助

    --memlock 适用于支持 mlockall() 系统调用 系统; 这包括Solaris,大多数使用2.4或更高内核的Linux发行版,以及其他Unix系统。 在Linux系统上,您可以 mlockall() 通过检查系统 mman.h 文件中 是否定义它来判断是否支持(以及此选项) ,如下所示:

    外壳> grep mlockall /usr/include/sys/mman.h
    

    如果 mlockall() 支持,您应该在上一个命令的输出中看到类似以下内容:

    extern int mlockall(int __flags)__ THROW;
    
    重要

    使用此选项可能需要您运行服务器 root ,出于安全原因,这通常不是一个好主意。 请参见 第6.1.5节“如何以普通用户身份运行MySQL”

    在Linux和其他系统上,您可以 root 通过更改 limits.conf 文件 来避免运行服务器的需要 请参见 第8.12.3.2节“启用大页面支持”中 有关 memlock 限制的说明

    您不得尝试在不支持 mlockall() 系统调用 系统 上使用此选项 ; 如果你这样做, mysqld 很可能会在你尝试启动时崩溃。

  • --myisam-block-size=N

    属性
    命令行格式 --myisam-block-size=#
    类型 整数
    默认值 1024
    最低价值 1024
    最大价值 16384

    用于 MyISAM 索引页 的块大小

  • --myisam-recover-options[=option[,option]...]]

    属性
    命令行格式 --myisam-recover-options[=name]
    类型 列举
    默认值 OFF
    有效值

    OFF

    DEFAULT

    BACKUP

    FORCE

    QUICK

    设置 MyISAM 存储引擎恢复模式。 该选项值的值的任意组合 OFF DEFAULT BACKUP FORCE ,或 QUICK 如果指定多个值,请用逗号分隔。 指定不带参数的选项与指定相同 DEFAULT ,并使用显式值指定 "" 禁用恢复(与值相同 OFF )。 如果启用了恢复,则每次 mysqld 打开一个 MyISAM 表,它检查表是否标记为崩溃或未正确关闭。 (最后一个选项仅在禁用外部锁定的情况下 。)如果是这种情况, mysqld 尝试修复它。 在桌子上检查。 如果表被破坏, mysqld

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

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

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

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

  • --no-defaults

    不要读任何选项文件。 如果由于从选项文件中读取未知选项而导致程序启动失败, --no-defaults 则可用于防止它们被读取。 如果使用它,它必须是命令行上的第一个选项。

    有关此选项和其他选项文件选项的其他信息,请参见 第4.2.2.3节“影响选项文件处理的命令行选项”

  • --no-dd-upgrade

    属性
    命令行格式 --no-dd-upgrade[={OFF|ON}]
    介绍 8.0.4
    弃用 8.0.16
    类型 布尔
    默认值 OFF
    注意

    从MySQL 8.0.16开始,不推荐使用此选项。 它被该 --upgrade 选项 取代,该 选项可以更好地控制数据字典和服务器升级行为。

    防止在MySQL服务器启动过程中自动升级数据字典表。 此选项通常用于在将现有安装就地升级到较新的MySQL版本后启动MySQL服务器,其中可能包括对数据字典表定义的更改。

    什么时候 --no-dd-upgrade 指定了,并且服务器发现其数据字典的预期版本与数据字典本身中存储的版本不同,则启动失败并显示错误,指出禁止数据字典升级;

    [错误] [MY-011091] [服务器]禁止数据字典升级
    命令行选项'--no_dd_upgrade'。
    [错误] [MY-010020] [服务器]数据字典初始化失败。
    

    在正常启动期间,将服务器的数据字典版本与存储在数据字典中的版本进行比较,以确定是否应该升级数据字典表定义。 如果需要升级并且支持升级,则服务器将创建具有更新定义的数据字典表,将持久化元数据复制到新表,以原子方式将旧表替换为新表,并重新初始化数据字典。 如果不需要升级,则在不更新数据字典表的情况下继续启动。

  • --no-monitor

    属性
    命令行格式 --no-monitor[={OFF|ON}]
    介绍 8.0.12
    平台特定 视窗
    类型 布尔
    默认值 OFF

    (仅限Windows)。 此选项禁止用于实现 RESTART 语句 的分叉 :分叉使一个进程充当另一个进程的监视器,充当服务器。 对于使用此选项启动的服务器, RESTART 只需退出并且不重新启动。

    --no-monitor 在MySQL 8.0.12之前不可用。 --gdb 选项可用作解决方法。

  • --old-style-user-limits

    属性
    命令行格式 --old-style-user-limits[={OFF|ON}]
    类型 布尔
    默认值 OFF

    启用旧式用户限制。 (在MySQL 5.0.3之前,帐户资源限制是针对用户连接的每个主机而不是 user 中的每个帐户行单独计算的 。)请参见 第6.2.20节“设置帐户资源限制”

  • --performance-schema-xxx

    配置性能架构选项。 有关详细信息,请参见 第26.14节“性能模式命令选项”

  • --pid-file=file_name

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

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

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

  • --plugin-xxx

    指定与服务器插件有关的选项。 例如,许多存储引擎可以构建为插件,对于这样的引擎,可以使用 --plugin 前缀 指定它们的选项 因此, 可以将 --innodb-file-per-table 选项 InnoDB 指定为 --plugin-innodb-file-per-table

    对于可以启用或禁用的布尔选项,也支持 --skip 前缀和其他替代格式(请参见 第4.2.2.4节“程序选项修饰符” )。 例如, --skip-plugin-innodb-file-per-table 禁用 innodb-file-per-table

    --plugin 前缀 的基本原理 是,如果名称与内置服务器选项冲突,则可以明确指定插件选项。 例如,如果一个插件编写者命名插件 sql 并实现 模式 选项,则选项名称可能是 --sql-mode ,这将与同名的内置选项冲突。 在这种情况下,将解决对冲突名称的引用,以支持内置选项。 为避免歧义,用户可以将插件选项指定为 --plugin-sql-mode 使用的 --plugin 建议使用插件选项的前缀以避免任何歧义问题。

  • --plugin-load=plugin_list

    属性
    命令行格式 --plugin-load=plugin_list
    系统变量 plugin_load
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

    此选项告诉服务器在启动时加载指定的插件。 如果 --plugin-load 给出了 多个 选项,则仅使用最后一个选项。 可以使用 --plugin-load-add 选项 指定要加载的其他插件

    选项值是以分号分隔的 列表 每个 都是要加载的插件的名称,并且 是包含插件代码的库文件的名称。 如果插件库的名称没有任何前面的插件名称,则服务器会加载库中的所有插件。 服务器在 系统变量 指定的目录中查找插件库文件 name=plugin_library plugin_library name plugin_library plugin_dir

    例如,如果插件名为 myplug1 myplug2 有库文件 myplug1.so myplug2.so ,使用此选项来执行早期的插件加载:

    外壳> mysqld --plugin-load="myplug1=myplug1.so;myplug2=myplug2.so"
    

    这里的参数值使用引号,因为否则semicolon( ; )被某些命令解释器解释为特殊字符。 (例如,Unix shell将其视为命令终止符。)

    每个命名插件 都只 加载一次 mysqld 重新启动后,除非 --plugin-load 再次使用, 否则不会加载插件 与之 相反 INSTALL PLUGIN ,它为 mysql.plugins 添加一个条目,以便 为每个正常的服务器启动加载插件。

    在正常启动时,服务器通过读取 mysql.plugins 系统表 来确定要加载哪些插件 如果使用该 --skip-grant-tables 选项 启动服务器 ,则不会查询该 mysql.plugins 表,也不会加载其中列出的插件。 --plugin-load 即使 --skip-grant-tables 给出 插件也可以加载插件 --plugin-load 还可以在启动时加载无法在运行时加载的插件。

    有关插件加载的其他信息,请参见 第5.6.1节“安装和卸载插件”

  • --plugin-load-add=plugin_list

    属性
    命令行格式 --plugin-load-add=plugin_list
    系统变量 plugin_load_add
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

    此选项补充了该 --plugin-load 选项。 --plugin-load-add 将插件或插件添加到要在启动时加载的插件集。 参数格式与for相同 --plugin-load --plugin-load-add 可以用来避免将一大组插件指定为一个长的笨重的 --plugin-load 参数。

    --plugin-load-add 可以在没有的情况下给出 --plugin-load ,但 --plugin-load-add 之前出现的 任何实例 --plugin-load 没有效果,因为 --plugin-load 重置要加载的插件集。 换句话说,这些选项:

    --plugin-load = x --plugin-load-add = y
    

    等同于此选项:

    --plugin负载= “X; Y”
    

    但这些选择:

    --plugin-load-add = y --plugin-load = x
    

    等同于此选项:

    --plugin负荷= X
    

    有关插件加载的其他信息,请参见 第5.6.1节“安装和卸载插件”

  • --port=port_num -P port_num

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

    侦听TCP / IP连接时使用的端口号。 在Unix和类Unix系统上,除非服务器由 root 操作系统用户 启动,否则端口号必须为1024或更高 将此选项设置为0会导致使用默认值。

  • --port-open-timeout=num

    属性
    命令行格式 --port-open-timeout=#
    类型 整数
    默认值 0

    在某些系统上,当服务器停止时,TCP / IP端口可能不会立即可用。 如果服务器之后快速重新启动,则尝试重新打开端口可能会失败。 此选项指示服务器在无法打开时等待TCP / IP端口空闲的秒数。 默认是不等待。

  • --print-defaults

    打印程序名称以及从选项文件中获取的所有选项。 密码值被屏蔽。 如果使用它,它必须是命令行上的第一个选项,除了它可以在 --defaults-file 之后立即使用 --defaults-extra-file

    有关此选项和其他选项文件选项的其他信息,请参见 第4.2.2.3节“影响选项文件处理的命令行选项”

  • --remove [service_name]

    属性
    命令行格式 --remove [service_name]
    平台特定 视窗

    (仅限Windows)删除MySQL Windows服务。 MySQL 如果没有 service_name 给出值,则 默认服务名称 有关更多信息,请参见 第2.3.5.8节“将MySQL作为Windows服务启动”

  • --safe-user-create

    属性
    命令行格式 --safe-user-create[={OFF|ON}]
    类型 布尔
    默认值 OFF

    如果启用此选项,则 GRANT 除非用户具有 系统表或表中任何列 INSERT 权限, 否则 用户无法使用该 语句 创建新的MySQL用户 mysql.user 如果您希望用户能够创建具有该用户有权授予的权限的新用户,则应授予该用户以下权限:

    GRANT INSERT(用户)ON mysql.user TO' user_name'@' host_name';
    

    这可确保用户无法直接更改任何权限列,但必须使用该 GRANT 语句为其他用户授予权限。

  • --secure-auth

    属性
    命令行格式 --secure-auth[={OFF|ON}]
    弃用 是(在8.0.3中删除)
    系统变量 secure_auth
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON
    有效值 ON

    在MySQL 8.0.3中删除了此选项。

  • --secure-file-priv=dir_name

    属性
    命令行格式 --secure-file-priv=dir_name
    系统变量 secure_file_priv
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型
    默认值 platform specific
    有效值

    empty string

    dirname

    NULL

    该选项设置 secure_file_priv 系统变量,它用于限制数据导入和导出操作,如那些由执行的效果 LOAD DATA SELECT ... INTO OUTFILE 报表和 LOAD_FILE() 功能。 有关更多信息,请参阅的说明 secure_file_priv

  • --shared-memory

    属性
    命令行格式 --shared-memory[={OFF|ON}]
    系统变量 shared_memory
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    平台特定 视窗
    类型 布尔
    默认值 OFF

    启用本地客户端的共享内存连接。 此选项仅在Windows上可用。

  • --shared-memory-base-name=name

    属性
    命令行格式 --shared-memory-base-name=name
    系统变量 shared_memory_base_name
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    平台特定 视窗
    类型
    默认值 MYSQL

    用于共享内存连接的共享内存的名称。 此选项仅在Windows上可用。 默认名称是 MYSQL 名称区分大小写。

  • --skip-concurrent-insert

    关闭在 MyISAM 表格 上同时选择和插入的功能 (仅当您认为已在此功能中发现错误时才使用此选项。)请参见 第8.11.3节“并发插入”

  • --skip-event-scheduler

    属性
    命令行格式

    --skip-event-scheduler

    --disable-event-scheduler

    打开事件调度程序 OFF 这与禁用事件调度程序不同,后者需要设置 --event-scheduler=DISABLED ; 看到 --event-scheduler 选项 ,以获取更多信息。

  • --skip-grant-tables

    属性
    命令行格式 --skip-grant-tables[={OFF|ON}]
    类型 布尔
    默认值 OFF

    此选项使服务器在不使用权限系统的情况下启动,这使得任何对服务器具有访问权限的人都可以 无限制地访问所有数据库 通过 从系统shell 执行 mysqladmin flush-privileges mysqladmin reload 命令,或者 FLUSH PRIVILEGES 在连接到服务器后 发出MySQL 语句, 可以使正在运行的服务器再次开始使用授权表

    如果使用 --skip-grant-tables 禁用身份验证检查 选项 启动服务器 ,则服务器会 --skip-networking 自动 启用 以防止远程连接。

    此选项还会导致服务器在其启动过程中禁止加载随 INSTALL PLUGIN 语句 一起安装的用户定义函数(UDF),计划事件和插件 要使插件无论如何都要加载,请使用该 --plugin-load 选项。 --skip-grant-tables 也会导致 disabled_storage_engines 系统变量无效。

    此选项不会导致在服务器启动期间禁止加载服务器组件。

    FLUSH PRIVILEGES 可能由启动后执行的其他操作隐式执行(从而导致服务器再次开始使用授权表)。 例如, mysql_upgrade 在升级过程中刷新权限。

  • --skip-host-cache

    属性
    命令行格式 --skip-host-cache

    禁用内部主机缓存以实现更快的名称到IP解析。 禁用缓存后,服务器会在每次客户端连接时执行DNS查找。

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

    如果使用启动服务器 --skip-host-cache ,则不会阻止更改值 host_cache_size ,但此类更改不起作用,即使 host_cache_size 设置为大于0, 也不会重新启用缓存

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

  • --skip-innodb

    禁用 InnoDB 存储引擎。 在这种情况下,由于默认存储引擎是 InnoDB ,服务器将不会启动,除非您还使用 --default-storage-engine --default-tmp-storage-engine 将默认值设置为永久存储引擎和 TEMPORARY 表的 其他引擎

    InnoDB 存储引擎不能被禁用,而 --skip-innodb 选项已被弃用,没有任何效果。 它的使用会导致警告。 此选项将在未来的MySQL版本中删除。

  • --skip-name-resolve

    属性
    命令行格式 --skip-name-resolve[={OFF|ON}]
    系统变量 skip_name_resolve
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    检查客户端连接时,请勿解析主机名。 仅使用IP地址。 如果使用此选项, Host 则授权表中的 所有 列值 必须是IP地址。 请参见 第8.12.4.2节“DNS查找优化和主机缓存”

    根据系统的网络配置和 Host 帐户 值,客户端可能需要使用显式 --host 选项 进行连接 ,例如 --host=127.0.0.1 --host=::1

    尝试连接到主机 127.0.0.1 通常会解析为该 localhost 帐户。 但是,如果使用该 --skip-name-resolve 选项 运行服务器,则会失败 如果您打算这样做,请确保存在可以接受连接的帐户。 例如,要能够 root 使用 --host=127.0.0.1 连接 --host=::1 ,请创建以下帐户:

    创建用户'root'@'127.0.0.1'标识' root-password';
    创建用户'root'@':: 1'IDENTIFIED BY' root-password';
    
  • --skip-networking

    属性
    命令行格式 --skip-networking
    系统变量 skip_networking
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有

    根本不要监听TCP / IP连接。 所有与 mysqld的 交互 必须使用命名管道或共享内存(在Windows上)或Unix套接字文件(在Unix上)。 对于仅允许本地客户端的系统,强烈建议使用此选项。 请参见 第8.12.4.2节“DNS查找优化和主机缓存”

    如果使用 --skip-grant-tables 禁用身份验证检查 选项 启动服务器 ,则服务器可以 --skip-networking 阻止远程连接。

  • --ssl*

    以“开头”选项 --ssl 指定是否允许客户端使用SSL进行连接,并指明在何处查找SSL密钥和证书。 请参见 第6.3.2节“加密连接的命令选项”

  • --standalone

    属性
    命令行格式 --standalone
    平台特定 视窗

    仅适用于Windows; 指示MySQL服务器不作为服务运行。

  • --super-large-pages

    属性
    命令行格式 --super-large-pages[={OFF|ON}]
    平台特定 的Solaris
    类型 布尔
    默认值 OFF

    在MySQL中标准使用大页面试图使用支持的最大大小,最多4MB。 在Solaris下, 超大页面 功能允许使用高达256MB的页面。 此功能适用于最新的SPARC平台。 可以使用 --super-large-pages --skip-super-large-pages 选项 启用或禁用它

  • --symbolic-links --skip-symbolic-links

    属性
    命令行格式 --symbolic-links[={OFF|ON}]
    弃用 8.0.2
    类型 布尔
    默认值 (> = 8.0.2) OFF
    默认值 (<= 8.0.1) ON

    启用或禁用符号链接支持。 在Unix上,启用符号链接意味着您可以 使用 语句 MyISAM INDEX DIRECTORY or DATA DIRECTORY 选项 索引文件或数据文件 链接 到另一个目录 CREATE TABLE 如果删除或重命名表,则其符号链接指向的文件也将被删除或重命名。 请参见 第8.12.2.2节“在Unix上使用MyISAM表的符号链接”

    注意

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

    此选项在Windows上没有意义。

  • --skip-show-database

    属性
    命令行格式 --skip-show-database
    系统变量 skip_show_database
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有

    此选项设置 skip_show_database 控制允许谁使用该 SHOW DATABASES 语句 系统变量 请参见 第5.1.8节“服务器系统变量”

  • --skip-stack-trace

    属性
    命令行格式 --skip-stack-trace

    不要写堆栈跟踪。 在调试器下 运行 mysqld 时,此选项很有用 在某些系统上,您还必须使用此选项来获取核心文件。 请参见 第29.5节“调试和移植MySQL”

  • --slow-query-log[={0|1}]

    属性
    命令行格式 --slow-query-log[={OFF|ON}]
    系统变量 slow_query_log
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    指定初始慢查询日志状态。 如果没有参数或参数为1,则该 --slow-query-log 选项将启用日志。 如果省略或参数为0,则该选项将禁用日志。

  • --slow-start-timeout=timeout

    属性
    命令行格式 --slow-start-timeout=#
    类型 整数
    默认值 15000

    此选项控制Windows服务控制管理器的服务启动超时。 该值是服务控制管理器在启动期间尝试终止Windows服务之前等待的最大毫秒数。 默认值为15000(15秒)。 如果MySQL服务启动时间太长,您可能需要增加此值。 值为0表示没有超时。

  • --socket=path

    属性
    命令行格式 --socket={file_name|pipe_name}
    系统变量 socket
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型
    默认值 (其他) /tmp/mysql.sock
    默认值 (Windows) MySQL

    在Unix上,此选项指定侦听本地连接时要使用的Unix套接字文件。 默认值为 /tmp/mysql.sock 如果给出此选项,则服务器将在数据目录中创建该文件,除非给出绝对路径名以指定其他目录。 在Windows上,该选项指定在侦听使用命名管道的本地连接时要使用的管道名称。 默认值为 MySQL (不区分大小写)。

  • --sql-mode=value[,value[,value...]]

    属性
    命令行格式 --sql-mode=name
    系统变量 sql_mode
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型
    默认值 (> = 8.0.11) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
    默认值 (<= 8.0.4) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
    有效值 (> = 8.0.11)

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    有效值 (> = 8.0.1,<= 8.0.4)

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_CREATE_USER

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_FIELD_OPTIONS

    NO_KEY_OPTIONS

    NO_TABLE_OPTIONS

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    有效值 (8.0.0)

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_CREATE_USER

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_FIELD_OPTIONS

    NO_KEY_OPTIONS

    NO_TABLE_OPTIONS

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    设置SQL模式。 请参见 第5.1.11节“服务器SQL模式”

    注意

    MySQL安装程序可以在安装过程中配置SQL模式。

    如果SQL模式与默认模式或您期望的模式不同,请检查服务器在启动时读取的选项文件中的设置。

  • --sysdate-is-now

    属性
    命令行格式 --sysdate-is-now[={OFF|ON}]
    类型 布尔
    默认值 OFF

    SYSDATE() 默认情况下,返回它执行的时间,而不是它发生的语句开始执行的时间。 这与行为不同 NOW() 此选项导致 SYSDATE() 成为别名 NOW() 有关二进制日志和复制的影响的信息,请参阅用于描述 SYSDATE() 12.7节,“日期和时间函数” SET TIMESTAMP 第5.1.8节,“服务器系统变量”

  • --tc-heuristic-recover={COMMIT|ROLLBACK}

    属性
    命令行格式 --tc-heuristic-recover=name
    类型 列举
    默认值 COMMIT
    有效值

    COMMIT

    ROLLBACK

    在启发式恢复过程中使用的决策类型。 要使用此选项, 必须安装 两个或多个支持 XA 事务的 存储引擎

  • --temp-pool

    属性
    命令行格式 --temp-pool[={OFF|ON}]
    弃用 是(在8.0.1中删除)
    类型 布尔
    默认值 (其他) OFF
    默认值 (Linux) ON

    此选项已过时,已在MySQL 8.0.1中删除。

  • --transaction-isolation=level

    属性
    命令行格式 --transaction-isolation=name
    系统变量 transaction_isolation
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 REPEATABLE-READ
    有效值

    READ-UNCOMMITTED

    READ-COMMITTED

    REPEATABLE-READ

    SERIALIZABLE

    设置默认事务隔离级别。 level 值可以是 READ-UNCOMMITTED READ-COMMITTED REPEATABLE-READ ,或 SERIALIZABLE 请参见 第13.3.7节“SET TRANSACTION语法”

    还可以使用 SET TRANSACTION 语句或通过设置 transaction_isolation 系统变量 在运行时设置缺省事务隔离级别

  • --transaction-read-only

    属性
    命令行格式 --transaction-read-only[={OFF|ON}]
    系统变量 transaction_read_only
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    设置默认事务访问模式。 默认情况下,禁用只读模式,因此模式为读/写。

    要在运行时设置默认事务访问模式,请使用该 SET TRANSACTION 语句或设置 transaction_read_only 系统变量。 请参见 第13.3.7节“SET TRANSACTION语法”

  • --tmpdir=dir_name -t dir_name

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

    用于创建临时文件的目录的路径。 如果您的默认 /tmp 目录位于太小而无法容纳临时表的分区上,则 可能很有用 此选项接受以循环方式使用的多个路径。 路径应该用 : Unix上 的冒号字符( )和 ; Windows上的 分号字符( 分隔

    --tmpdir 可以是非永久位置,例如基于内存的文件系统上的目录或服务器主机重新启动时清除的目录。 如果MySQL服务器充当复制从属服务器,并且您使用的是非永久性位置 --tmpdir ,请考虑使用该 --slave-load-tmpdir 选项 为从属服务器设置不同的临时目录 对于复制从属服务器,用于复制 LOAD DATA 语句 的临时文件 存储在此目录中,因此使用永久位置它们可以在计算机重新启动后继续运行,尽管如果已删除临时文件,复制现在可以在重新启动后继续。

    有关临时文件存储位置的更多信息,请参见 第B.4.3.5节“MySQL存储临时文件的位置”

  • --upgrade=value

    属性
    命令行格式 --upgrade=value
    介绍 8.0.16
    类型 列举
    默认值 AUTO
    有效值

    AUTO

    NONE

    MINIMAL

    FORCE

    此选项控制服务器在启动时是否以及如何执行自动升级。 自动升级包括两个步骤:

    • 第1步:数据字典升级。

      此步骤升级:

      • mysql 架构中 的数据字典表 如果实际数据字典版本低于当前预期版本,则服务器升级数据字典。 如果它不能或阻止这样做,服务器将无法运行。

      • 性能模式和 INFORMATION_SCHEMA

    • 第2步:服务器升级。

      此步骤包括所有其他升级任务。 如果现有安装数据的MySQL版本低于服务器预期,则必须升级:

      • 模式中的系统表 mysql (剩余的非数据字典表)。

      • sys 架构。

      • 用户架构。

    有关升级步骤1和2的详细信息,请参见 第2.11.3节“MySQL升级过程升级”

    这些 --upgrade 选项的允许值:

    • AUTO

      服务器会自动升级发现过期的任何内容(步骤1和2)。 如果 --upgrade 未明确指定, 则这是默认操作

    • NONE

      服务器在启动过程中不执行自动升级步骤(跳过步骤1和2)。 由于此选项值会阻止数据字典升级,因此如果发现数据字典已过期,则服务器将退出并显示错误:

      [错误] [MY-013381] [服务器]服务器因升级而关闭
      必需的,但命令行选项'--upgrade = NONE'禁止。
      [错误] [MY-010334] [服务器]无法初始化DD存储引擎
      [错误] [MY-010020] [服务器]数据字典初始化失败。
      
    • MINIMAL

      INFORMATION_SCHEMA 如有必要 ,服务器会升级数据字典,性能模式和 (步骤1)。 请注意,使用此选项进行升级后,无法启动组复制,因为复制内部所依赖的系统表未更新,并且在其他区域中也可能显示减少的功能。

    • FORCE

      INFORMATION_SCHEMA 如有必要 ,服务器会升级数据字典,性能模式和 (步骤1)。 此外,服务器强制升级其他所有内容(步骤2)。 使用此选项预计服务器启动需要更长时间,因为服务器会检查所有模式中的所有对象。

      FORCE 如果服务器认为不需要,则强制执行第2步操作。 例如,您可能认为系统表丢失或已损坏并且想要强制修复。

    下表总结了服务器对每个选项值所采取的操作。

    期权价值 服务器执行第1步? 服务器执行第2步?
    AUTO 如有必要 如有必要
    NONE 没有 没有
    MINIMAL 如有必要 没有
    FORCE 如有必要
  • --user={user_name|user_id} -u {user_name|user_id}

    属性
    命令行格式 --user=name
    类型

    具有名称 或数字用户ID的用户身份 运行 mysqld 服务器 此上下文中的 用户 是指系统登录帐户,而不是授权表中列出的MySQL用户。) user_name user_id

    启动 mysqld as 时, 此选项是 必需的 服务器在其启动序列期间更改其用户ID,使其作为特定用户而不是作为特定用户运行 请参见 第6.1.1节“安全准则” root root

    为了避免用户 --user=root my.cnf 文件 添加 选项 (从而导致服务器以其运行 root 的可能安全漏洞 mysqld 仅使用 --user 指定 的第一个 选项,并在有多个 --user 选项时 生成警告 选项在 命令行选项之前 /etc/my.cnf 和之后 $MYSQL_HOME/my.cnf 处理,因此建议您将 --user 选项放入 /etc/my.cnf 并指定除以外的值 root 在选项 /etc/my.cnf 之前的任何其他被发现 --user 的选择,这确保了服务器作为比其他用户运行 root ,并且如果 --user 找到 任何其他 选项则会 发出警告

  • --validate-config

    属性
    命令行格式 --validate-config[={OFF|ON}]
    介绍 8.0.16
    类型 布尔
    默认值 OFF

    验证服务器启动配置。 如果未找到任何错误,则服务器将以退出代码0终止。如果发现错误,服务器将显示诊断消息并以退出代码1终止。警告和信息消息也可能会显示,具体取决于 log_error_verbosity 值,但不要立即生成验证终止或退出代码为1.有关更多信息,请参见 第5.1.3节“服务器配置验证”

  • --verbose -v

    使用此选项 --help 可获得详细帮助选项。

  • --version -V

    显示版本信息并退出。

5.1.8服务器系统变量

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

设置全局系统变量运行时值通常需要 SYSTEM_VARIABLES_ADMIN SUPER 权限。 设置会话系统运行时变量值通常不需要特殊权限,可以由任何用户完成,但也有例外。 有关更多信息,请参见 第5.1.9.1节“系统变量权限”

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

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

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

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

本节提供每个系统变量的说明。 有关系统变量摘要表,请参见 第5.1.5节“服务器系统变量参考” 有关操作系统变量的更多信息,请参见 第5.1.9节“使用系统变量”

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

注意

以下变量描述中的一些涉及 启用 禁用 变量。 可以通过将这些变量 SET 设置为 ON or 来启用这些变量 1 ,或者通过将它们设置为 OFF 来禁用 这些变量 0 布尔变量可以在启动时被设置为的值 ON TRUE OFF ,和 FALSE (不区分大小写),以及 1 0 请参见 第4.2.2.4节“程序选项修饰符”

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

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

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

  • activate_all_roles_on_login

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

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

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

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

  • admin_address

    属性
    命令行格式 --admin-address=#
    介绍 8.0.14
    系统变量 admin_address
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

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

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

    • 该值必须是单个IP​​v4地址,IPv6地址或主机名。

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

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

    服务器处理不同类型的地址,如下所示:

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

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

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

    所述 admin_address 系统变量是类似于 bind_address 结合服务器的地址为普通客户端连接系统变量,但这些差异:

  • admin_port

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

    用于管理网络接口上的连接的TCP / IP端口号(请参见 第8.12.4.1节“MySQL如何处理客户端连接” )。 将此变量设置为0会导致使用默认值。

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

  • authentication_windows_log_level

    属性
    命令行格式 --authentication-windows-log-level=#
    介绍 8.0.11
    系统变量 authentication_windows_log_level
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 2
    最低价值 0
    最大价值 4

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

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

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

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

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

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

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

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

  • autocommit

    属性
    命令行格式 --autocommit[={OFF|ON}]
    系统变量 autocommit
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

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

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

    的[mysqld]
    自动提交= 0
    
  • automatic_sp_privileges

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

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

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

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

  • auto_generate_certs

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

    如果服务器是使用OpenSSL编译的,则此变量可用(请参见 第6.3.4节“SSL库相关功能” )。 它控制服务器是否自动生成数据目录中的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在unencypted连接的安全密码交换RSA密钥对文件控制自动生成。

  • avoid_temporal_upgrade

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

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

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

    此变量已弃用,将在以后的MySQL版本中删除。

  • back_log

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

    MySQL可以拥有的未完成连接请求的数量。 当主MySQL线程在很短的时间内获得很多连接请求时,这就会发挥作用。 然后,主线程检查连接并启动新线程需要一些时间(尽管很少)。 back_log 值表示在MySQL暂时停止回答新请求之前的短时间内可以堆叠的请求数。 只有在短时间内预期有大量连接时,才需要增加此值。

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

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

  • basedir

    属性
    命令行格式 --basedir=dir_name
    系统变量 basedir
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 目录名称
    默认值 (> = 8.0.2) parent of mysqld installation directory
    默认值 (<= 8.0.1) configuration-dependent default

    MySQL安装基目录的路径。

  • big_tables

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

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

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

  • bind_address

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

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

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

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

    • 从MySQL 8.0.13开始, bind_address 接受刚刚描述的单个值或逗号分隔值列表。 当变量命名多个值的列表时,每个值必须指定一个非通配符IP地址或主机名; 没有人可以指定一个通配符地址格式( * 0.0.0.0 ,或 :: )。

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

    服务器处理不同类型的地址,如下所示:

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

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

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

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

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

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

    例子:

    • 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 命名单个值(通配符或非通配符)时,服务器侦听单个套接字,通配符地址可以绑定到多个网络接口。 bind_address 命名多个值的列表时,服务器每个值侦听一个套接字,每个套接字绑定到单个网络接口。 套接字的数量与指定的值的数量成线性关系。 根据操作系统连接接受效率,长值列表可能会因接受TCP / IP连接而导致性能下降。

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

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

  • block_encryption_mode

    属性
    命令行格式 --block-encryption-mode=#
    系统变量 block_encryption_mode
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 aes-128-ecb

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

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

    • 加入OpenSSL,允许 mode 的值是: ECB CBC CFB1 CFB8 CFB128 OFB

    • 对于wolfSSL,允许 mode 值是: ECB CBC

    例如,此语句使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
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 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_auto_generate_rsa_keys

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

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

    在启动时,如果满足所有这些条件,则服务器会自动在数据目录中生成RSA私钥/公钥对文件: sha256_password_auto_generate_rsa_keys 或者 caching_sha2_password_auto_generate_rsa_keys 启用系统变量; 没有指定RSA选项; 数据目录中缺少RSA文件。 这些密钥对文件通过未加密的连接使用RSA进行安全密码交换,以便对由 sha256_password or或 caching_sha2_password plugin 进行身份验证的帐户进行安全密码交换 请参见 第6.4.1.2节“SHA-256可插拔认证” 第6.4.1.3节“高速缓存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
    介绍 8.0.3
    系统变量 caching_sha2_password_private_key_path
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 文件名
    默认值 private_key.pem

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

    重要

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

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

  • caching_sha2_password_public_key_path

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

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

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

  • character_set_client

    属性
    系统变量 character_set_client
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.1) utf8mb4
    默认值 (8.0.0) utf8

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

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

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

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

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

  • character_set_connection

    属性
    系统变量 character_set_connection
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.1) utf8mb4
    默认值 (8.0.0) utf8

    用于文字的字符集,没有字符集导入器和数字到字符串转换。 有关介绍人的信息,请参见 第10.3.8节“字符集介绍人”

  • character_set_database

    属性
    系统变量 character_set_database
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.1) utf8mb4
    默认值 (8.0.0) latin1
    脚注 此选项是动态的,但只有服务器应设置此信息。 您不应手动设置此变量的值。

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

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

    不推荐使用 全局 变量 character_set_database collation_database 系统变量,将在未来的MySQL版本中删除它们。

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

  • character_set_filesystem

    属性
    命令行格式 --character-set-filesystem=name
    系统变量 character_set_filesystem
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 binary

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

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

  • character_set_results

    属性
    系统变量 character_set_results
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.1) utf8mb4
    默认值 (8.0.0) utf8

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

  • character_set_server

    属性
    命令行格式 --character-set-server=name
    系统变量 character_set_server
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.1) utf8mb4
    默认值 (8.0.0) latin1

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

  • character_set_system

    属性
    系统变量 character_set_system
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型
    默认值 utf8

    服务器用于存储标识符的字符集。 价值总是如此 utf8

  • character_sets_dir

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

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

  • check_proxy_users

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

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

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

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

  • collation_connection

    属性
    系统变量 collation_connection
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型

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

  • collation_database

    属性
    系统变量 collation_database
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.1) utf8mb4_0900_ai_ci
    默认值 (8.0.0) latin1_swedish_ci
    脚注 此选项是动态的,但只有服务器应设置此信息。 您不应手动设置此变量的值。

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

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

    不推荐使用 全局 变量 character_set_database collation_database 系统变量,将在未来的MySQL版本中删除它们。

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

  • collation_server

    属性
    命令行格式 --collation-server=name
    系统变量 collation_server
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.1) utf8mb4_0900_ai_ci
    默认值 (8.0.0) latin1_swedish_ci

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

  • completion_type

    属性
    命令行格式 --completion-type=#
    系统变量 completion_type
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 NO_CHAIN
    有效值

    NO_CHAIN

    CHAIN

    RELEASE

    0

    1

    2

    交易完成类型。 此变量可以采用下表中显示的值。 可以使用名称值或相应的整数值来指定变量。

    描述
    NO_CHAIN (或0) COMMIT 并且 ROLLBACK 不受影响。 这是默认值。
    CHAIN (或1) COMMIT 并且 ROLLBACK 分别等同于 COMMIT AND CHAIN ROLLBACK AND CHAIN (新事务立即启动,其隔离级别与刚刚终止的事务相同。)
    RELEASE (或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[=#]
    系统变量 concurrent_insert
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 AUTO
    有效值

    NEVER

    AUTO

    ALWAYS

    0

    1

    2

    如果 AUTO (默认值),MySQL允许 INSERT SELECT 语句同时运行 MyISAM 在数据文件中间没有空闲块的表。 如果启动 mysqld的 使用 --skip-new ,这个变量被设置为 NEVER

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

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

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

  • connect_timeout

    属性
    命令行格式 --connect-timeout=#
    系统变量 connect_timeout
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 10
    最低价值 2
    最大价值 31536000

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

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

  • core_file

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

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

  • create_admin_listener_thread

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

    是否在管理网络接口上使用专用侦听线程进行客户端连接(请参见 第8.12.4.1节“MySQL如何处理客户端连接” )。 默认设置是使用用于普通连接的侦听器线程来实现管理接口。

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

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

  • cte_max_recursion_depth

    属性
    命令行格式 --cte-max-recursion-depth=#
    介绍 8.0.3
    系统变量 cte_max_recursion_depth
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1000
    最低价值 0
    最大价值 4294967295

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

  • datadir

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

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

  • date_format

    在MySQL 8.0.3中删除了此系统变量。

  • datetime_format

    在MySQL 8.0.3中删除了此系统变量。

  • debug

    属性
    命令行格式 --debug[=debug_options]
    系统变量 debug
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 (Windows) d:t:i:O,\mysqld.trace
    默认值 (Unix) d:t:i:o,/tmp/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 |
    + --------- +
    

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

  • debug_sync

    属性
    系统变量 debug_sync
    范围 会议
    动态
    SET_VAR 提示适用 没有
    类型

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

    全局变量值是只读的,表示设施是否已启用。 默认情况下,调试Sync被禁用和值 debug_sync OFF 如果服务器开始 ,这里 是一个超时值大于0,调试同步启用和更大的价值 其次是信号的名字。 此外, 成为各个同步点的默认超时。 --debug-sync-timeout=N N debug_sync ON - current signal N

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

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

    有关Debug Sync工具以及如何使用同步点的说明,请参阅 MySQL Internals:Test Synchronization

  • default_authentication_plugin

    属性
    命令行格式 --default-authentication-plugin=plugin_name
    系统变量 default_authentication_plugin
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 列举
    默认值 (> = 8.0.4) caching_sha2_password
    默认值 (<= 8.0.3) mysql_native_password
    有效值 (> = 8.0.3)

    mysql_native_password

    sha256_password

    caching_sha2_password

    有效值 (<= 8.0.2)

    mysql_native_password

    sha256_password

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

    注意

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

    default_authentication_plugin 值会影响服务器操作的这些方面:

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

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

      创建用户...由' cleartext password' 标识;
      
  • default_collation_for_utf8mb4

    属性
    介绍 8.0.11
    系统变量 default_collation_for_utf8mb4
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    有效值

    utf8mb4_0900_ai_ci

    utf8mb4_general_ci

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

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

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

  • default_password_lifetime

    属性
    命令行格式 --default-password-lifetime=#
    系统变量 default_password_lifetime
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 65535

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

    可以使用 CREATE USER ALTER USER 语句 的密码到期选项根据需要覆盖全局密码到期策略 请参见 第6.2.15节“密码管理”

  • default_storage_engine

    属性
    命令行格式 --default-storage-engine=name
    系统变量 default_storage_engine
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 InnoDB

    默认存储引擎。 此变量仅为永久表设置存储引擎。 要为 TEMPORARY 设置存储引擎 ,请设置 default_tmp_storage_engine 系统变量。

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

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

  • default_table_encryption

    属性
    命令行格式 --default-table-encryption=#
    介绍 8.0.16
    系统变量 default_table_encryption
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 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节“持久系统变量”

    有关更多信息,请参阅 为架构和常规表空间定义加密默认值

  • default_tmp_storage_engine

    属性
    命令行格式 --default-tmp-storage-engine=name
    系统变量 default_tmp_storage_engine
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 列举
    默认值 InnoDB

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

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

  • default_week_format

    属性
    命令行格式 --default-week-format=#
    系统变量 default_week_format
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 7

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

  • delay_key_write

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

    ON

    OFF

    ALL

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

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

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

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

    如果 DELAY_KEY_WRITE 为表启用了,则不会在每次索引更新时为表刷新密钥缓冲区,但仅在表关闭时才刷新。 这会大大加快对密钥的写入速度,但是如果使用此功能,则应 MyISAM 通过使用 --myisam-recover-options 选项 启动服务器 来添加所有 表的 自动检查 (例如, --myisam-recover-options=BACKUP,FORCE )。 请参见 第5.1.7节“服务器命令选项” 第16.2.1节“MyISAM启动选项”

    警告

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

  • delayed_insert_limit

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

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

  • delayed_insert_timeout

    属性
    命令行格式 --delayed-insert-timeout=#
    弃用
    系统变量 delayed_insert_timeout
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 300

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

  • delayed_queue_size

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

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

  • disabled_storage_engines

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

    此变量指示哪些存储引擎不能用于创建表或表空间。 例如,要防止 创建 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_engines 不限制为现有的表的其它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

    注意

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

  • disconnect_on_expired_password

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

    此变量控制服务器处理具有过期密码的客户端的方式:

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

  • div_precision_increment

    属性
    命令行格式 --div-precision-increment=#
    系统变量 div_precision_increment
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4
    最低价值 0
    最大价值 30

    该变量表示增加操作员执行的除法运算结果的比例的位数 / 默认值为4.最小值和最大值分别为0和30。 以下示例说明了增加默认值的效果。

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

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

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

    从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.';
    查询正常,0行受影响,1警告(0.00秒)
    
    MySQL的> SHOW WARNINGS\G
    *************************** 1。排******************** *******
      等级:注意
       代码:4569
    消息:接受过滤器配置:
             SET @@ GLOBAL.dragnet.log_error_filter_rules =
             '如果prio!=错误那么未设置prio。';
    

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

    • <> 运营商变更为 !=

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

    • 可选空格已删除。

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

  • end_markers_in_json

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

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

  • eq_range_index_dive_limit

    属性
    命令行格式 --eq-range-index-dive-limit=#
    系统变量 eq_range_index_dive_limit
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 200
    最低价值 0
    最大价值 4294967295

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

    col_nameIN(val1,...,valNcol_name= val1OR ... 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.6.17节“显示错误语法”

  • event_scheduler

    属性
    命令行格式 --event-scheduler[=value]
    系统变量 event_scheduler
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 (> = 8.0.3) ON
    默认值 (<= 8.0.2) OFF
    有效值

    ON

    OFF

    DISABLED

    此变量指示事件调度程序的状态; 可能的值是 ON ,, OFF DISABLED ,默认 值为 ON 在“事件” 一章 的“ 概述”部分 中更详细地讨论了此变量及其对事件调度程序操作的影响

  • explicit_defaults_for_timestamp

    属性
    命令行格式 --explicit-defaults-for-timestamp[={OFF|ON}]
    弃用
    系统变量 explicit_defaults_for_timestamp
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 (> = 8.0.2) ON
    默认值 (<= 8.0.1) OFF

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

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

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

    • TIMESTAMP 未使用该 NULL 属性 显式声明的列将使用该 属性自动声明 NOT NULL 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' 并且不会发出警告。

      根据是否 NO_ZERO_DATE 启用了 严格的SQL模式或 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()

    • TIMESTAMP 未使用该 NOT NULL 属性 显式声明的列 将使用 NULL attribute和permit NULL 自动声明 为此类列分配一个值, NULL 将其设置为 NULL ,而不是当前时间戳。

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

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

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

    • 所述第一 TIMESTAMP 表中的列不从不同的处理 TIMESTAMP 之后的第一个列。

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

    [警告]不推荐使用具有隐式DEFAULT值的TIMESTAMP。
    请使用--explicit_defaults_for_timestamp服务器选项(请参阅
    文档更多细节)。
    

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

    注意

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

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

  • external_user

    属性
    系统变量 external_user
    范围 会议
    动态 没有
    SET_VAR 提示适用 没有
    类型

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

  • flush

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

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

    注意

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

  • flush_time

    属性
    命令行格式 --flush-time=#
    系统变量 flush_time
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0

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

    注意

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

  • foreign_key_checks

    属性
    系统变量 foreign_key_checks
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 ON

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

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

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

    注意

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

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

  • ft_boolean_syntax

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

    使用的布尔全文搜索支持的运算符列表 IN BOOLEAN MODE 请参见 第12.9.2节“布尔全文搜索”

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

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

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

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

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

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

    • 位置10,13,和14(在缺省情况下被设定为 : & | )被保留用于未来的扩展。

  • ft_max_word_len

    属性
    命令行格式 --ft-max-word-len=#
    系统变量 ft_max_word_len
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    最低价值 10

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

    注意

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

  • ft_min_word_len

    属性
    命令行格式 --ft-min-word-len=#
    系统变量 ft_min_word_len
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 4
    最低价值 1

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

    注意

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

  • ft_query_expansion_limit

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

    使用的全文搜索所使用的热门匹配数 WITH QUERY EXPANSION

  • ft_stopword_file

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

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

    注意

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

  • general_log

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

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

  • general_log_file

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

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

  • group_concat_max_len

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

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

  • have_compress

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

  • have_crypt

    在MySQL 8.0.3中删除了此系统变量。

  • have_dynamic_loading

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

  • have_geometry

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

  • have_openssl

    此变量是别名 have_ssl

  • have_profiling

    YES if语句概要分析功能是否存在, NO 如果不 存在 如果存在, profiling 系统变量将控制是启用还是禁用此功能。 请参见 第13.7.6.31节“显示配置文件语法”

    此变量已弃用,将在以后的MySQL版本中删除。

  • have_query_cache

    MySQL 8.0.3中删除了查询缓存。 have_query_cache 不推荐使用,总是具有值 NO ,并将在未来的MySQL版本中删除。

  • have_rtree_keys

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

  • have_ssl

    YES 如果 mysqld 支持SSL连接, NO 如果不 支持 DISABLED 表示服务器是使用SSL支持编译的,但未使用适当的 选项 启动 有关更多信息,请参见 第6.3.5节“使用支持加密连接构建MySQL” --ssl-xxx

  • have_statement_timeout

    属性
    系统变量 have_statement_timeout
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 布尔

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

  • have_symlink

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

    此变量在Windows上没有意义。

    注意

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

  • histogram_generation_max_mem_size

    属性
    命令行格式 --histogram-generation-max-mem-size=#
    介绍 8.0.2
    系统变量 histogram_generation_max_mem_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 20000000
    最低价值 1000000
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    可用于生成直方图统计信息的最大内存量。 请参见 第8.9.6节“优化程序统计信息” 第13.7.3.1节“分析表语法”

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

  • host_cache_size

    属性
    命令行格式 --host-cache-size=#
    系统变量 host_cache_size
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 -1 (表示自动调整大小;不指定此文字值)
    最低价值 0
    最大价值 65536

    此变量控制主机缓存的大小,以及 host_cache 公开缓存内容 的性能模式 的大小 将大小设置为0将禁用主机缓存。 在运行时更改高速缓存大小会导致隐式 FLUSH HOSTS 操作,该操作会清除主机高速缓存,截断 host_cache 表并取消阻止任何被阻止的主机。

    默认值自动调整为128,加上1表示 max_connections 最多500 的值,加上1表示值的 每个增量20超过500, max_connections 上限为2000。

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

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

  • hostname

    属性
    系统变量 hostname
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

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

  • identity

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

  • init_connect

    属性
    命令行格式 --init-connect=name
    系统变量 init_connect
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型

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

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

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

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

  • information_schema_stats_expiry

    属性
    命令行格式 --information-schema-stats-expiry=#
    介绍 8.0.3
    系统变量 information_schema_stats_expiry
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 86400
    最低价值 0
    最大价值 31536000

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

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

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

    默认情况下,MySQL的检索从这些列的缓存值 mysql.index_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 是一个会话变量,每个客户端会话可以定义自己的到期值。 从存储引擎检索并由一个会话缓存的统计信息可供其他会话使用。

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

  • init_file

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

    --init-file 启动服务器时 使用该 选项 指定的文件的名称 这应该是一个包含您希望服务器在启动时执行的SQL语句的文件。 每个声明必须在一行上,不应包含注释。 有关更多信息,请参阅的说明 --init-file

  • innodb_xxx

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

  • insert_id

    插入 由以下 语句 INSERT ALTER TABLE 语句使用的 AUTO_INCREMENT 值。 这主要用于二进制日志。

  • interactive_timeout

    属性
    命令行格式 --interactive-timeout=#
    系统变量 interactive_timeout
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 28800
    最低价值 1

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

  • internal_tmp_disk_storage_engine

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

    MYISAM

    INNODB

    重要

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

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

  • internal_tmp_mem_storage_engine

    属性
    命令行格式 --internal-tmp-mem-storage-engine=#
    介绍 8.0.2
    系统变量 internal_tmp_mem_storage_engine
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 列举
    默认值 TempTable
    有效值

    TempTable

    MEMORY

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

    所述 优化器 使用由限定的存储引擎 internal_tmp_mem_storage_engine 在存储器内部临时表。

  • join_buffer_size

    属性
    命令行格式 --join-buffer-size=#
    系统变量 join_buffer_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最低价值 128
    最大值 (其他,64位平台) 18446744073709547520
    最大值 (其他,32位平台) 4294967295
    最大值 (Windows) 4294967295

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

    除非使用批量密钥访问(BKA),否则设置缓冲区大于保存每个匹配行所需的增益并且所有连接至少分配最小大小都没有收益,因此请谨慎使用此变量全局设置为较大值。 最好保持全局设置较小,仅在进行大型连接的会话中更改为更大的设置。 如果全局大小大于使用它的大多数查询所需的内存分配时间,则会导致性能大幅下降。

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

    默认值为256KB。 允许的最大设置为 join_buffer_size 4GB-1。 64位平台允许更大的值(64位Windows除外,其中大值被截断为4GB-1并带有警告)。

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

  • keep_files_on_create

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

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

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

  • key_buffer_size

    属性
    命令行格式 --key-buffer-size=#
    系统变量 key_buffer_size
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 8388608
    最低价值 8
    最大值 (64位平台) OS_PER_PROCESS_LIMIT
    最大值 (32位平台) 4294967295

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

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

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

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

    您可以通过发出检查键值缓冲区的性能 SHOW STATUS 声明和检查 Key_read_requests Key_reads Key_write_requests ,和 Key_writes 状态变量。 (参见 第13.7.6节“显示语法” 。) 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
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 300
    最低价值 100
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

  • key_cache_block_size

    属性
    命令行格式 --key-cache-block-size=#
    系统变量 key_cache_block_size
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1024
    最低价值 512
    最大价值 16384

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

  • key_cache_division_limit

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

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

  • large_files_support

    属性
    系统变量 large_files_support
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有

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

  • large_pages

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

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

  • large_page_size

    属性
    系统变量 large_page_size
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0

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

  • last_insert_id

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

  • lc_messages

    属性
    命令行格式 --lc-messages=name
    系统变量 lc_messages
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 en_US

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

  • lc_messages_dir

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

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

  • lc_time_names

    属性
    命令行格式 --lc-time-names=value
    系统变量 lc_time_names
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型

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

  • license

    属性
    系统变量 license
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型
    默认值 GPL

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

  • local_infile

    属性
    命令行格式 --local-infile[={OFF|ON}]
    系统变量 local_infile
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 (> = 8.0.2) OFF
    默认值 (<= 8.0.1) ON

    此变量控制 语句的 服务器端 LOCAL 功能 LOAD DATA 根据 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
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 31536000
    最低价值 1
    最大价值 31536000

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

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

    这个超时不适用于隐含访问系统表 mysql 的数据库,如通过修改授权表 GRANT REVOKE 报表或表格记录语句。 超时适用于直接访问的系统表,例如with SELECT UPDATE

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

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

  • locked_in_memory

    属性
    系统变量 locked_in_memory
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有

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

  • log_error

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

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

  • log_error_filter_rules

    属性
    命令行格式 --log-error-filter-rules=value
    介绍 8.0.2
    删除 8.0.4
    系统变量 log_error_filter_rules
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 set by server

    错误记录的过滤规则。 此变量未使用。 它已在MySQL 8.0.4中删除。

  • log_error_services

    属性
    命令行格式 --log-error-services=value
    介绍 8.0.2
    系统变量 log_error_services
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 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
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 empty string

    log_error_suppression_list 系统变量适用于用于错误日志事件,并指定时,他们用的优先级进行打压的事件 WARNING INFORMATION 例如,如果特定类型的警告 在错误日志中 被认为是不合需要的 噪声 ,因为它经常发生但不感兴趣,则可以抑制它。 此变量影响由 log_filter_internal 错误日志过滤器组件 执行的 过滤,该组件默认启用(请参见 第5.5.3节“错误日志组件” )。 如果 log_filter_internal 禁用, log_error_suppression_list 则无效。

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

    ER_SERVER_SHUTDOWN_COMPLETE
    MY-000031
    000031
    MY-31
    31
    

    对于可读性和可移植性,符号值优于数值。 有关允许的错误符号和数字的信息,请参见 第B.3节“错误消息参考”

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

  • log_error_verbosity

    属性
    命令行格式 --log-error-verbosity=#
    系统变量 log_error_verbosity
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (> = 8.0.4) 2
    默认值 (<= 8.0.3) 3
    最低价值 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值
    ERROR 1
    ERROR WARNING 2
    ERROR WARNING INFORMATION 3

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

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

  • log_output

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

    TABLE

    FILE

    NONE

    一般查询日志和慢查询日志输出的目标或目标。 该值是一个列表选自一个或多个以逗号分隔的话 TABLE FILE NONE TABLE 选择记录到 系统数据库中 general_log slow_log mysql 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
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    是否将不使用索引的查询记录到慢查询日志中。 请参见 第5.4.5节“慢查询日志”

  • log_slow_admin_statements

    属性
    命令行格式 --log-slow-admin-statements[={OFF|ON}]
    系统变量 log_slow_admin_statements
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 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
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

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

  • log_syslog

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

    在MySQL 8.0之前,此变量控制是否执行错误记录到系统日志(Windows syslog 的事件日志,以及 Unix和类Unix系统)。

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

  • log_syslog_facility

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

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

  • log_syslog_include_pid

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

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

  • log_syslog_tag

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

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

  • log_timestamps

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

    UTC

    SYSTEM

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

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

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

  • log_throttle_queries_not_using_indexes

    属性
    命令行格式 --log-throttle-queries-not-using-indexes=#
    系统变量 log_throttle_queries_not_using_indexes
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0

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

  • log_warnings

    属性
    命令行格式 --log-warnings[=#]
    弃用 是(在8.0.3中删除)
    系统变量 log_warnings
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 2
    最低价值 0
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    在MySQL 8.0.3中删除了此系统变量。 请改用 log_error_verbosity 系统变量。

  • long_query_time

    属性
    命令行格式 --long-query-time=#
    系统变量 long_query_time
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 数字
    默认值 10
    最低价值 0

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

  • low_priority_updates

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

    如果设置为 1 所有 INSERT UPDATE DELETE LOCK TABLE WRITE 语句等到有没有挂起 SELECT LOCK TABLE READ 受影响的表。 这会影响只使用表级锁只存储引擎(例如 MyISAM MEMORY MERGE )。

  • lower_case_file_system

    属性
    系统变量 lower_case_file_system
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 布尔

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

  • lower_case_table_names

    属性
    命令行格式 --lower-case-table-names[=#]
    系统变量 lower_case_table_names
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 2

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

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

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

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

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

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

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

  • mandatory_roles

    属性
    命令行格式 --mandatory-roles=value
    介绍 8.0.2
    系统变量 mandatory_roles
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 empty string

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

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

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

    除了 设置全局系统变量运行时值通常所需的特权 特权 之外, 设置运行时值还 mandatory_roles 需要 ROLE_ADMIN 特权 SYSTEM_VARIABLES_ADMIN SUPER

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

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

    在值命名的角色 mandatory_roles 不能被撤销 REVOKE 或下降 DROP ROLE DROP USER

    要防止会话默认为系统会话,具有该 SYSTEM_USER 权限 的角色 不能列在 mandatory_roles 系统变量 的值中

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

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

    SHOW GRANTS 根据 第13.7.6.21节“SHOW GRANTS语法”中 描述的规则显示强制角色

  • max_allowed_packet

    属性
    命令行格式 --max-allowed-packet=#
    系统变量 max_allowed_packet
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (> = 8.0.3) 67108864
    默认值 (<= 8.0.2) 4194304
    最低价值 1024
    最大价值 1073741824

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

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

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

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

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

  • max_connect_errors

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

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

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

  • max_connections

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

    允许的最大同时客户端连接数。 有关更多信息,请参见 第8.12.4.1节“MySQL如何处理客户端连接”

  • max_delayed_threads

    属性
    命令行格式 --max-delayed-threads=#
    弃用
    系统变量 max_delayed_threads
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 20
    最低价值 0
    最大价值 16384

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

  • max_digest_length

    属性
    命令行格式 --max-digest-length=#
    系统变量 max_digest_length
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1024
    最低价值 0
    最大价值 1048576

    每个会话保留的最大内存字节数,用于计算规范化语句摘要。 在摘要计算期间使用该空间量后,将发生截断:不会收集来自已解析语句的其他标记或将其计入其摘要值。 仅在解析的令牌的许多字节之后不同的语句产生相同的规范化语句摘要,并且如果比较或者如果聚合用于摘要统计则被认为是相同的。

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

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

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

  • max_error_count

    属性
    命令行格式 --max-error-count=#
    系统变量 max_error_count
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 (> = 8.0.3) 1024
    默认值 (<= 8.0.2) 64
    最低价值 0
    最大价值 65535

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

  • max_execution_time

    属性
    命令行格式 --max-execution-time=#
    系统变量 max_execution_time
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0

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

    max_execution_time 适用如下:

  • max_heap_table_size

    属性
    命令行格式 --max-heap-table-size=#
    系统变量 max_heap_table_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16777216
    最低价值 16384
    最大值 (64位平台) 1844674407370954752
    最大值 (32位平台) 4294967295

    此变量设置 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.4.1.21节“复制和存储器表” 第17.4.1.38节“复制和变量”

  • max_insert_delayed_threads

    属性
    弃用
    系统变量 max_insert_delayed_threads
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数

    此变量是其同义词 max_delayed_threads

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

  • max_join_size

    属性
    命令行格式 --max-join-size=#
    系统变量 max_join_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 18446744073709551615
    最低价值 1
    最大价值 18446744073709551615

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

    将此变量设置 DEFAULT 为非重置值, sql_big_selects 重置 to的值 0 如果 sql_big_selects 再次 设置该 值, max_join_size 则忽略 变量。

  • max_length_for_sort_data

    属性
    命令行格式 --max-length-for-sort-data=#
    系统变量 max_length_for_sort_data
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 (> = 8.0.1) 4096
    默认值 (8.0.0) 1024
    最低价值 4
    最大价值 8388608

    索引值大小的截止值,用于确定 filesort 要使用的算法。 请参见 第8.2.1.15节“ORDER BY Optimization”

  • max_points_in_geometry

    属性
    命令行格式 --max-points-in-geometry=#
    系统变量 max_points_in_geometry
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 65536
    最低价值 3
    最大价值 1048576

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

  • max_prepared_stmt_count

    属性
    命令行格式 --max-prepared-stmt-count=#
    系统变量 max_prepared_stmt_count
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 16382
    最低价值 0
    最大价值 1048576

    此变量限制服务器中已准备语句的总数。 它可以在可能存在拒绝服务攻击的环境中使用,这些攻击基于通过准备大量语句来运行服务器内存不足。 如果该值设置为低于当前预准备语句数,则现有语句不受影响且可以使用,但在当前数字低于限制之前,不能准备新语句。 默认值为16,382。 允许的值范围为0到100万。 将值设置为0将禁用预准备语句。

  • max_seeks_for_key

    属性
    命令行格式 --max-seeks-for-key=#
    系统变量 max_seeks_for_key
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 (64位平台) 18446744073709551615
    默认值 (32位平台) 4294967295
    最低价值 1
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

  • max_sort_length

    属性
    命令行格式 --max-sort-length=#
    系统变量 max_sort_length
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1024
    最低价值 4
    最大价值 8388608

    排序数据值时使用的字节数。 服务器仅使用 max_sort_length 每个值 的第一个 字节,并忽略其余的值。 因此,仅第一后不同的值 max_sort_length 的字节相比较如相等 GROUP BY ORDER BY DISTINCT 操作。

    增加价值 max_sort_length 也可能需要增加价值 sort_buffer_size 有关详细信息,请参见 第8.2.1.15节“ORDER BY优化”

  • max_sp_recursion_depth

    属性
    命令行格式 --max-sp-recursion-depth[=#]
    系统变量 max_sp_recursion_depth
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最大价值 255

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

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

  • max_tmp_tables

    在MySQL 8.0.3中删除了此系统变量。

  • max_user_connections

    属性
    命令行格式 --max-user-connections=#
    系统变量 max_user_connections
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 4294967295

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

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

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

  • max_write_lock_count

    属性
    命令行格式 --max-write-lock-count=#
    系统变量 max_write_lock_count
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (64位平台) 18446744073709551615
    默认值 (32位平台) 4294967295
    最低价值 1
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

  • mecab_rc_file

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

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

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

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

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

  • metadata_locks_cache_size

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

    在MySQL 8.0.13中删除了此系统变量。

  • metadata_locks_hash_instances

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

    在MySQL 8.0.13中删除了此系统变量。

  • min_examined_row_limit

    属性
    命令行格式 --min-examined-row-limit=#
    系统变量 min_examined_row_limit
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

  • multi_range_count

    属性
    命令行格式 --multi-range-count=#
    弃用 是(在8.0.3中删除)
    系统变量 multi_range_count
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 256
    最低价值 1
    最大价值 4294967295

    在MySQL 8.0.3中删除了此系统变量。

  • myisam_data_pointer_size

    属性
    命令行格式 --myisam-data-pointer-size=#
    系统变量 myisam_data_pointer_size
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 6
    最低价值 2
    最大价值 7

    以字节为单位的默认指针大小,通过使用 CREATE TABLE 用于 MyISAM 表没有当 MAX_ROWS 指定选项。 此变量不能小于2或大于7.默认值为6.请参见 第B.4.2.11节“表已满”

  • myisam_max_sort_file_size

    属性
    命令行格式 --myisam-max-sort-file-size=#
    系统变量 myisam_max_sort_file_size
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (64位平台) 9223372036854775807
    默认值 (32位平台) 2147483648

    MySQL正在允许而重新创建一个使用临时文件的最大尺寸 MyISAM 指数(期间 REPAIR TABLE ALTER TABLE LOAD DATA )。 如果文件大小大于此值,则使用密钥缓存创建索引,这样会更慢。 该值以字节为单位。

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

  • myisam_mmap_size

    属性
    命令行格式 --myisam-mmap-size=#
    系统变量 myisam_mmap_size
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (64位平台) 18446744073709551615
    默认值 (32位平台) 4294967295
    最低价值 7
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

  • myisam_recover_options

    属性
    系统变量 myisam_recover_options
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有

    --myisam-recover-options 选项 的价值 请参见 第5.1.7节“服务器命令选项”

  • myisam_repair_threads

    属性
    命令行格式 --myisam-repair-threads=#
    系统变量 myisam_repair_threads
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1
    最低价值 1
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

    注意

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

  • myisam_sort_buffer_size

    属性
    命令行格式 --myisam-sort-buffer-size=#
    系统变量 myisam_sort_buffer_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 8388608
    最低价值 4096
    最大值 (其他,64位平台) 18446744073709551615
    最大值 (其他,32位平台) 4294967295
    最大值 (Windows,64位平台) 18446744073709551615
    最大值 (Windows,32位平台) 4294967295

    排序时被分配的缓冲区的大小 MyISAM 一期间索引 REPAIR TABLE 与创建索引时或 CREATE INDEX ALTER TABLE

  • myisam_stats_method

    属性
    命令行格式 --myisam-stats-method=name
    系统变量 myisam_stats_method
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 nulls_unequal
    有效值

    nulls_equal

    nulls_unequal

    nulls_ignored

    服务器 NULL 在收集有关 MyISAM 的索引值分布的统计信息时 如何处理 这个变量有三个可能的值 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
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

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

  • mysql_native_password_proxy_users

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

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

  • named_pipe

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

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

  • named_pipe_full_access_group

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

    *everyone*

    empty string

    (仅限Windows。)在MySQL服务器创建的命名管道上授予客户端的访问控制设置为现有 --enable-named-pipe 命令行选项 成功通信所需的最小值 ON 较新的MySQL客户端软件无需任何其他配置即可打开命名管道连接,但旧版客户端软件可能仍需要完全访问才能打开命名管道连接。

    此变量设置Windows本地组的名称,其成员被MySQL服务器授予足够的访问权限以使用较旧的命名管道客户端。 最初,该值 '*everyone*' 默认 设置为 ,允许Windows上Everyone组的用户继续使用旧客户端,直到升级旧客户端。 相反,将值设置为空字符串意味着不会授予Windows用户对命名管道的完全访问权限。 默认值 '*everyone*' 提供了一种与语言无关的方式来引用Windows上的Everyone组。

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

  • net_buffer_length

    属性
    命令行格式 --net-buffer-length=#
    系统变量 net_buffer_length
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 16384
    最低价值 1024
    最大价值 1048576

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

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

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

  • net_read_timeout

    属性
    命令行格式 --net-read-timeout=#
    系统变量 net_read_timeout
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 30
    最低价值 1

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

  • net_retry_count

    属性
    命令行格式 --net-retry-count=#
    系统变量 net_retry_count
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 10
    最低价值 1
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

  • net_write_timeout

    属性
    命令行格式 --net-write-timeout=#
    系统变量 net_write_timeout
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 60
    最低价值 1

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

  • new

    属性
    命令行格式 --new[={OFF|ON}]
    系统变量 new
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    残疾人 skip-new
    类型 布尔
    默认值 OFF

    此变量在MySQL 4.0中用于打开一些4.1行为,并保留以便向后兼容。 它的价值永远 OFF

    在NDB Cluster中,将此变量设置为 ON 可以使用除 之外的分区类型 KEY LINEAR KEY 使用 NDB 表。 此功能仅供参考,在生产中不受支持 有关其他信息,请参阅 用户定义的分区和NDB存储引擎(NDB群集)

  • ngram_token_size

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

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

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

  • offline_mode

    属性
    命令行格式 --offline-mode[={OFF|ON}]
    系统变量 offline_mode
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 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
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 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
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

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

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

  • old_passwords

    属性
    命令行格式 --old-passwords=value
    弃用 是(在8.0.11中删除)
    系统变量 old_passwords
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 0
    有效值

    0

    2

    在MySQL 8.0.11中删除了此系统变量。

  • open_files_limit

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

    mysqld可 从操作系统 获得的文件描述符数 mysqld setrlimit() 通过设置此变量或 mysqld_safe --open-files-limit 选项 使用启动时请求的值来 保留描述符 如果 mysqld 给出错误, 您应该尝试增加此变量的值 在内部,此变量的最大值是最大无符号整数值,但实际最大值取决于平台。 Too many open files

    运行时变量值表示系统实际允许的文件描述符数,可能与启动时请求的值不同。 如果无法分配所请求的文件描述符数, mysqld 会向错误日志写入警告。

    有效 open_files_limit 值是基于在系统启动时指定的值(如果有的话)和的值 max_connections table_open_cache 使用这些公式:

    1)10 + max_connections +(table_open_cache * 2)
    2)max_connections * 5
    3)操作系统限制如果是肯定的
    4)如果操作系统限制为无限:
       启动时指定的open_files_limit值,如果没有则为5000
    

    服务器尝试使用这三个值中的最大值来获取文件描述符的数量。 如果无法获得那么多描述符,则服务器会尝试获得系统允许的数量。

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

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

  • optimizer_prune_level

    属性
    命令行格式 --optimizer-prune-level=#
    系统变量 optimizer_prune_level
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最低价值 0
    最大价值 1

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

  • optimizer_search_depth

    属性
    命令行格式 --optimizer-search-depth=#
    系统变量 optimizer_search_depth
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 62
    最低价值 0
    最大价值 62

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

  • optimizer_switch

    属性
    命令行格式 --optimizer-switch=value
    系统变量 optimizer_switch
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型
    有效值 (> = 8.0.13)

    batched_key_access={on|off}

    block_nested_loop={on|off}

    condition_fanout_filter={on|off}

    derived_merge={on|off}

    duplicateweedout={on|off}

    engine_condition_pushdown={on|off}

    firstmatch={on|off}

    index_condition_pushdown={on|off}

    index_merge={on|off}

    index_merge_intersection={on|off}

    index_merge_sort_union={on|off}

    index_merge_union={on|off}

    loosescan={on|off}

    materialization={on|off}

    mrr={on|off}

    mrr_cost_based={on|off}

    semijoin={on|off}

    skip_scan={on|off}

    subquery_materialization_cost_based={on|off}

    use_index_extensions={on|off}

    use_invisible_indexes={on|off}

    有效值 (> = 8.0.3,<= 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}

    有效值 (<= 8.0.2)

    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}

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

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

    MySQL的> SELECT @@optimizer_switch\G
    *************************** 1。排******************** *******
    @@ optimizer_switch:index_merge = on,index_merge_union = on,
                        index_merge_sort_union =开,
                        index_merge_intersection =开,
                        engine_condition_pushdown =开,
                        index_condition_pushdown =开,
                        MRR =开,上mrr_cost_based =,
                        block_nested_loop =开,batched_key_access =关,
                        物化=开,半连接=上,loosescan =开,
                        firstmatch =开,duplicateweedout =开,
                        subquery_materialization_cost_based =开,
                        use_index_extensions =开,
                        condition_fanout_filter =开,derived_merge =开,
                        use_invisible_indexes =关,skip_scan =上
    

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

  • optimizer_trace

    属性
    命令行格式 --optimizer-trace=value
    系统变量 optimizer_trace
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型

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

  • optimizer_trace_features

    属性
    命令行格式 --optimizer-trace-features=value
    系统变量 optimizer_trace_features
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型

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

  • optimizer_trace_limit

    属性
    命令行格式 --optimizer-trace-limit=#
    系统变量 optimizer_trace_limit
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1

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

  • optimizer_trace_max_mem_size

    属性
    命令行格式 --optimizer-trace-max-mem-size=#
    系统变量 optimizer_trace_max_mem_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 (> = 8.0.4) 1048576
    默认值 (<= 8.0.3) 16384

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

  • optimizer_trace_offset

    属性
    命令行格式 --optimizer-trace-offset=#
    系统变量 optimizer_trace_offset
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 -1

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

  • performance_schema_xxx

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

  • parser_max_mem_size

    属性
    命令行格式 --parser-max-mem-size=#
    系统变量 parser_max_mem_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (64位平台) 18446744073709551615
    默认值 (32位平台) 4294967295
    最低价值 10000000
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

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

  • partial_revokes

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

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

    ON (如果存在部分撤销)

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

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

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

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

  • password_history

    属性
    命令行格式 --password-history=#
    介绍 8.0.3
    系统变量 password_history
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 4294967295

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

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

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

  • password_require_current

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

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

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

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

  • password_reuse_interval

    属性
    命令行格式 --password-reuse-interval=#
    介绍 8.0.3
    系统变量 password_reuse_interval
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 4294967295

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

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

    可以使用 语句 PASSWORD REUSE INTERVAL 选项 根据需要覆盖个人帐户的全局时间流逝密码重用策略 请参见 第6.2.15节“密码管理” CREATE USER ALTER USER

  • persisted_globals_load

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

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

    要修改的内容 mysqld-auto.cnf ,使用 SET 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
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型
    默认值 empty string

    SET PERSIST 并将 SET PERSIST_ONLY 系统变量保存到 mysqld-auto.cnf 数据目录中 选项文件中(请参见 第13.7.5.1节“变量赋值的SET语法” )。 持久化系统变量可启用影响后续服务器重新启动的运行时配置更改,这样便于远程管理,无需直接访问MySQL服务器主机选项文件。 但是,某些系统变量是不可消费的,或仅在某些限制条件下持久存在。

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

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

  • pid_file

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

    进程标识文件的路径名。 可以使用该 --pid-file 选项 设置此变量 服务器在数据目录中创建文件,除非给出绝对路径名来指定不同的目录。 如果指定该 --pid-file 选项,则必须指定值。 如果未指定该 --pid-file 选项,MySQL将使用默认值 host_name.pid ,其中 host_name 是主机的名称。

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

  • plugin_dir

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

    插件目录的路径名。

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

  • port

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

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

  • preload_buffer_size

    属性
    命令行格式 --preload-buffer-size=#
    系统变量 preload_buffer_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 32768
    最低价值 1024
    最大价值 1073741824

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

  • print_identified_with_as_hex

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

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

  • profiling

    如果设置为0或 OFF (默认值),则禁用语句分析。 如果设置为1 ON ,则启用语句分析,并且 SHOW PROFILE SHOW PROFILES 语句提供对分析信息的访问。 请参见 第13.7.6.31节“显示配置文件语法”

    此变量已弃用,将在以后的MySQL版本中删除。

  • profiling_history_size

    profiling 启用了 用于维护分析信息的语句数 默认值为15.最大值为100.将值设置为0可有效禁用分析。 请参见 第13.7.6.31节“显示配置文件语法”

    此变量已弃用,将在以后的MySQL版本中删除。

  • protocol_version

    属性
    系统变量 protocol_version
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数

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

  • proxy_user

    属性
    系统变量 proxy_user
    范围 会议
    动态 没有
    SET_VAR 提示适用 没有
    类型

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

  • pseudo_slave_mode

    属性
    系统变量 pseudo_slave_mode
    范围 会议
    动态
    SET_VAR 提示适用 没有
    类型 整数

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

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

    在MySQL 8.0.14及更高版本中, pseudo_slave_mode 对处理设置一个或多个不支持或未知SQL模式的语句具有以下影响:

    • 如果为true,则服务器忽略不支持的模式并发出警告。

    • 如果为false,则服务器拒绝该语句 ER_UNSUPPORTED_SQL_MODE

    mysqlbinlog 在执行任何其他SQL之前将此变量设置为true。

  • pseudo_thread_id

    属性
    系统变量 pseudo_thread_id
    范围 会议
    动态
    SET_VAR 提示适用 没有
    类型 整数

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

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

  • query_alloc_block_size

    属性
    命令行格式 --query-alloc-block-size=#
    系统变量 query_alloc_block_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 8192
    最低价值 1024
    最大价值 4294967295
    块大小 1024

    为在语句解析和执行期间创建的对象分配的内存块的分配大小。 如果您遇到内存碎片问题,则可能有助于增加此参数。

  • query_cache_limit

    属性
    命令行格式 --query-cache-limit=#
    弃用 是(在8.0.3中删除)
    系统变量 query_cache_limit
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1048576
    最低价值 0
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    在MySQL 8.0.3中删除了此系统变量。

  • query_cache_min_res_unit

    属性
    命令行格式 --query-cache-min-res-unit=#
    弃用 是(在8.0.3中删除)
    系统变量 query_cache_min_res_unit
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 4096
    最低价值 512
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    在MySQL 8.0.3中删除了此系统变量。

  • query_cache_size

    属性
    命令行格式 --query-cache-size=#
    弃用 是(在8.0.3中删除)
    系统变量 query_cache_size
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (64位平台,> = 8.0.1) 0
    默认值 (64位平台,8.0.0) 1048576
    默认值 (32位平台,> = 8.0.1) 0
    默认值 (32位平台,8.0.0) 1048576
    最低价值 0
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295

    在MySQL 8.0.3中删除了此系统变量。

  • query_cache_type

    属性
    命令行格式 --query-cache-type=#
    弃用 是(在8.0.3中删除)
    系统变量 query_cache_type
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 0
    有效值

    0

    1

    2

    在MySQL 8.0.3中删除了此系统变量。

  • query_cache_wlock_invalidate

    属性
    命令行格式 --query-cache-wlock-invalidate[={OFF|ON}]
    弃用 是(在8.0.3中删除)
    系统变量 query_cache_wlock_invalidate
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    在MySQL 8.0.3中删除了此系统变量。

  • query_prealloc_size

    属性
    命令行格式 --query-prealloc-size=#
    系统变量 query_prealloc_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 8192
    最低价值 8192
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295
    块大小 1024

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

  • rand_seed1

    属性
    系统变量 rand_seed1
    范围 会议
    动态
    SET_VAR 提示适用 没有
    类型 整数

    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
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 4096
    最低价值 4096
    最大值 (64位平台) 18446744073709547520
    最大价值 4294967295
    块大小 1024

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

  • range_optimizer_max_mem_size

    属性
    命令行格式 --range-optimizer-max-mem-size=#
    系统变量 range_optimizer_max_mem_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 8388608
    最低价值 0
    最大价值 18446744073709551615

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

  • rbr_exec_mode

    属性
    系统变量 rbr_exec_mode
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 STRICT
    有效值

    IDEMPOTENT

    STRICT

    mysqlbinlog 内部使用 此变量在 IDEMPOTENT 模式和 STRICT 模式 之间切换服务器 IDEMPOTENT mode导致 mysqlbinlog BINLOG 生成的语句中 的duplicate-key和no-key-found错误 抑制 在服务器上重放基于行的二进制日志时,此模式非常有用,该服务器会导致与现有数据冲突。 当您 通过将以下内容写入输出来 指定 选项 时, mysqlbinlog 设置此模式 --idempotent

    SET SESSION RBR_EXEC_MODE = IDEMPOTENT;

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

  • read_buffer_size

    属性
    命令行格式 --read-buffer-size=#
    系统变量 read_buffer_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 131072
    最低价值 8200
    最大价值 2147479552

    MyISAM 执行顺序扫描的每个线程为其扫描的每个 表分配此大小的缓冲区(以字节为单位)。 如果执行许多顺序扫描,则可能需要增加此值,默认值为131072.此变量的值应为4KB的倍数。 如果将其设置为不是4KB的倍数的值,则其值将向下舍入到最接近的4KB的倍数。

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

    • 在为行排序时,用于缓存临时文件(不是临时表)中的索引 ORDER BY

    • 用于批量插入分区。

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

    read_buffer_size 还用于另一种特定于存储引擎的方式:确定 MEMORY 的内存块大小

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

  • read_only

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

    read_only 启用了系统变量,该服务器允许除外谁拥有用户没有客户端更新 CONNECTION_ADMIN SUPER 特权。 默认情况下禁用此变量。

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

    即使 read_only 启用,服务器也允许这些操作:

    • 如果服务器是复制从属,则由从属线程执行的更新。 在复制设置中, 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 主服务器上的 更改 不会复制到从属服务器。 可以在从属服务器上设置该值,而与主服务器上的设置无关。

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

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

    • 尝试阻塞,而其他客户端具有任何正在进行的语句,活动 LOCK TABLES WRITE 或持续提交,直到锁被释放并且语句和事务结束。 虽然尝试启用 read_only 是挂起的,但其他客户端对表锁或开始事务的请求也会 read_only 一直 阻塞,直到 设置 为止

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

    • read_only 可以在持有全局读锁(获取 FLUSH TABLES WITH READ LOCK )时 启用, 因为这不涉及表锁。

  • read_rnd_buffer_size

    属性
    命令行格式 --read-rnd-buffer-size=#
    系统变量 read_rnd_buffer_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最低价值 1
    最大价值 2147483647

    此变量用于从 MyISAM 表中 读取 ,对于任何存储引擎,用于多范围读取优化。

    MyISAM 按键排序操作之后按排序顺序 表中 读取行时 ,将通过此缓冲区读取行以避免磁盘搜索。 请参见 第8.2.1.15节“ORDER BY Optimization” 将变量设置为较大的值可以大大提高 ORDER BY 性能。 但是,这是为每个客户端分配的缓冲区,因此不应将全局变量设置为较大的值。 而是仅从需要运行大型查询的客户端中更改会话变量。

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

  • regexp_stack_limit

    属性
    命令行格式 --regexp-stack-limit=#
    介绍 8.0.4
    系统变量 regexp_stack_limit
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 8000000
    最低价值 0
    最大价值 2147483647

    用于由 REGEXP_LIKE() 类似函数 执行的正则表达式匹配操作的内部堆栈的最大可用内存(以字节为单位) (请参见 第12.5.2节“正则表达式” )。

  • regexp_time_limit

    属性
    命令行格式 --regexp-time-limit=#
    介绍 8.0.4
    系统变量 regexp_time_limit
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 32
    最低价值 0
    最大价值 2147483647

    REGEXP_LIKE() 类似函数 执行的正则表达式匹配操作的时间限制 (请参见 第12.5.2节“正则表达式” )。 此限制表示为匹配引擎执行的最大允许步数,因此仅间接影响执行时间。 通常,它大约为毫秒。

  • require_secure_transport

    属性
    命令行格式 --require-secure-transport[={OFF|ON}]
    系统变量 require_secure_transport
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    客户端与服务器的连接是否需要使用某种形式的安全传输。 启用此变量时,服务器仅允许使用SSL的TCP / IP连接,或允许使用套接字文件(在Unix上)或共享内存(在Windows上)的连接。 服务器拒绝不安全的连接尝试,该尝试因 ER_SECURE_TRANSPORT_REQUIRED 错误 而失败

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

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

    另请参阅将 加密连接配置为必需

  • resultset_metadata

    属性
    介绍 8.0.3
    系统变量 resultset_metadata
    范围 会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 FULL
    有效值

    FULL

    NONE

    对于元数据传输是可选的连接,客户端设置 resultset_metadata 系统变量以控制服务器是否返回结果集元数据。 允许的值是 FULL (返回所有元数据;这是默认值)和 NONE (不返回元数据)。

    对于非元数据可选的连接,设置 resultset_metadata NONE 产生错误。

    有关管理结果集元数据传输的详细信息,请参见 第28.7.27节“C API可选结果集元数据”

  • secondary_engine_cost_threshold

    属性
    介绍 8.0.16
    系统变量 secondary_engine_cost_threshold
    范围 会议
    动态
    SET_VAR 提示适用
    类型 数字
    默认值 100000.000000
    最低价值 0
    最大价值 DBL_MAX (maximum double value)

    供将来使用。

  • schema_definition_cache

    属性
    命令行格式 --schema-definition-cache=#
    系统变量 schema_definition_cache
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 256
    最低价值 256
    最大价值 524288

    定义可以保留在字典对象缓存中的架构定义对象(已使用和未使用)的数量限制。

    当使用的数量小于定义的容量时,未使用的模式定义对象仅保留在字典对象缓存中 schema_definition_cache

    设置 0 意味着模式定义对象仅在字典对象缓存中使用时保留。

    有关更多信息,请参见 第14.4节“字典对象高速缓存”

  • secure_auth

    属性
    命令行格式 --secure-auth[={OFF|ON}]
    弃用 是(在8.0.3中删除)
    系统变量 secure_auth
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON
    有效值 ON

    在MySQL 8.0.3中删除了此系统变量。

  • secure_file_priv

    属性
    命令行格式 --secure-file-priv=dir_name
    系统变量 secure_file_priv
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型
    默认值 platform specific
    有效值

    empty string

    dirname

    NULL

    此变量用于限制数据导入和导出操作,如那些由执行的效果 LOAD DATA SELECT ... INTO OUTFILE 报表和 LOAD_FILE() 功能。 仅允许具有此 FILE 权限的 用户执行这些操作

    secure_file_priv 可以设置如下:

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

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

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

    默认值是特定于平台的,取决于 CMake 选项 的值, 如下表所示。 要在 源代码构建时明确 指定默认 值,请使用 CMake 选项。 INSTALL_LAYOUT secure_file_priv INSTALL_SECURE_FILE_PRIVDIR

    INSTALL_LAYOUT 默认 secure_file_priv
    STANDALONE WIN
    DEB RPM SLES SVR4 /var/lib/mysql-files
    除此以外 mysql-files CMAKE_INSTALL_PREFIX 价值 之下

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

  • server_id

    属性
    命令行格式 --server-id=#
    系统变量 server_id
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (> = 8.0.3) 1
    默认值 (<= 8.0.2) 0
    最低价值 0
    最大价值 4294967295

    指定服务器ID。 此变量由 --server-id 选项 设置 server_id 系统变量被默认设置为1。 可以使用此缺省ID启动服务器,但是启用二进制日志记录时,如果未使用该 --server-id 选项 明确指定服务器标识,则会发出信息性消息

    对于复制拓扑中使用的服务器,必须为每个复制服务器指定唯一的服务器ID,范围为1到2 32 - 1. 唯一 表示每个ID必须与正在使用的每个其他ID不同任何其他复制主机或从机。 有关其他信息,请参见 第17.1.6.2节“复制主选项和变量” 第17.1.6.3节“复制从选项和变量”

    如果服务器ID设置为0,则进行二进制日志记录,但服务器ID为0的主服务器拒绝来自从服务器的任何连接,服务器ID为0的从服务器拒绝连接到主服务器。 请注意,虽然您可以将服务器ID动态更改为非零值,但这样做不会立即启动复制。 您必须更改服务器ID,然后重新启动服务器以初始化复制从站。

    有关更多信息,请参见 第17.1.2.2节“设置复制从站配置”

  • session_track_gtids

    属性
    命令行格式 --session-track-gtids=value
    系统变量 session_track_gtids
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 OFF
    有效值

    OFF

    OWN_GTID

    ALL_GTIDS

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

    • OFF :跟踪器不收集GTID。 这是默认值。

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

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

    session_track_gtids 无法在事务上下文中设置。

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

  • session_track_schema

    属性
    命令行格式 --session-track-schema[={OFF|ON}]
    系统变量 session_track_schema
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

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

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

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

  • session_track_state_change

    属性
    命令行格式 --session-track-state-change[={OFF|ON}]
    系统变量 session_track_state_change
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

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

    • 默认架构(数据库)。

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

    • 用户定义的变量。

    • 临时表。

    • 准备好的陈述。

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

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

    注意

    session_track_state_change 自己 分配值 不被视为状态更改,因此不会报告。 但是,如果其名称中列出了其名称,则对其进行的 session_track_system_variables 任何分配都会导致新值的通知。

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

  • session_track_system_variables

    属性
    命令行格式 --session-track-system-variables=#
    系统变量 session_track_system_variables
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 time_zone, autocommit, character_set_client, character_set_results, character_set_connection

    控制服务器是否跟踪会话系统变量的分配,并通知客户端每个分配的变量的名称和值。 变量值是以逗号分隔的变量列表,用于跟踪分配。 默认情况下,通知的启用 time_zone autocommit character_set_client character_set_results ,和 character_set_connection (后三个变量是那些受影响的变量 SET NAMES 。)

    特殊值 * 使服务器跟踪所有会话变量的分配。 如果给定,则必须单独指定此值,而不指定特定的系统变量名称。

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

    如果启用了会话系统变量跟踪,则对跟踪的会话变量的所有分配都会发出通知,即使新值与旧值相同也是如此。

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

  • session_track_transaction_info

    属性
    命令行格式 --session-track-transaction-info=value
    系统变量 session_track_transaction_info
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 OFF
    有效值

    OFF

    STATE

    CHARACTERISTICS

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

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

    • STATE :启用没有特征跟踪的事务状态跟踪。 状态跟踪使客户端能够确定事务是否正在进行以及是否可以将其移动到其他会话而不进行回滚。

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

      隔离级别
      只读 
      读写
      一致的快照
      

    对于客户端将事务安全地重定位到另一个会话,它必须不仅跟踪事务状态而且还跟踪事务特征。 此外,客户端必须跟踪 transaction_isolation transaction_read_only 系统变量以正确确定会话默认值。 (要跟踪这些变量,请将它们列在 session_track_system_variables 系统变量 的值中 。)

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

  • sha256_password_auto_generate_rsa_keys

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

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

    在启动时,如果满足所有这些条件,则服务器会自动在数据目录中生成RSA私钥/公钥对文件: sha256_password_auto_generate_rsa_keys 或者 caching_sha2_password_auto_generate_rsa_keys 启用系统变量; 没有指定RSA选项; 数据目录中缺少RSA文件。 这些密钥对文件通过未加密的连接使用RSA进行安全密码交换,以便对由 sha256_password or或 caching_sha2_password plugin 进行身份验证的帐户进行安全密码交换 请参见 第6.4.1.2节“SHA-256可插拔认证” 第6.4.1.3节“高速缓存SHA-2可插拔认证”

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

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

  • sha256_password_private_key_path

    属性
    命令行格式 --sha256-password-private-key-path=file_name
    系统变量 sha256_password_private_key_path
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 文件名
    默认值 private_key.pem

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

    重要

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

    有关信息 sha256_password ,请参见 第6.4.1.2节“SHA-256可插拔认证”

  • sha256_password_proxy_users

    属性
    命令行格式 --sha256-password-proxy-users[={OFF|ON}]
    系统变量 sha256_password_proxy_users
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

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

  • sha256_password_public_key_path

    属性
    命令行格式 --sha256-password-public-key-path=file_name
    系统变量 sha256_password_public_key_path
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 文件名
    默认值 public_key.pem

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

    有关 sha256_password 客户端如何指定RSA公钥的信息,请参见 第6.4.1.2节“SHA-256可插拔认证”

  • shared_memory

    属性
    命令行格式 --shared-memory[={OFF|ON}]
    系统变量 shared_memory
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    平台特定 视窗
    类型 布尔
    默认值 OFF

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

  • shared_memory_base_name

    属性
    命令行格式 --shared-memory-base-name=name
    系统变量 shared_memory_base_name
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    平台特定 视窗
    类型
    默认值 MYSQL

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

  • show_compatibility_56

    属性
    命令行格式 --show-compatibility-56[={OFF|ON}]
    弃用 是(在8.0.1中删除)
    系统变量 show_compatibility_56
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    此变量用于过渡期间,在此期间,表中的系统和状态变量信息 INFORMATION_SCHEMA 被移动到性能模式表。 该转换期在MySQL 8.0.1中结束,此时此变量已被删除。 有关从 INFORMATION_SCHEMA 迁移到性能架构 表的建议,请参阅 迁移到性能架构系统和状态变量表

  • show_create_table_verbosity

    属性
    命令行格式 --show-create-table-verbosity[={OFF|ON}]
    介绍 8.0.11
    系统变量 show_create_table_verbosity
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    SHOW CREATE TABLE ROW_FORMAT 如果行格式是默认格式,则 通常不显示 表选项。 无论是否为默认格式, 启用此变量都会导致 SHOW CREATE TABLE 显示 ROW_FORMAT

  • show_old_temporals

    属性
    命令行格式 --show-old-temporals[={OFF|ON}]
    弃用
    系统变量 show_old_temporals
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    是否 SHOW CREATE TABLE 输出包括注释来发现在预5.6.4格式标志颞柱( TIME DATETIME ,和 TIMESTAMP 列不为小数精度秒支持)。 默认情况下禁用此变量。 如果启用, SHOW CREATE TABLE 输出如下所示:

    CREATE TABLE`mytbl`(
      `ts` timestamp / * 5.5二进制格式* / NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `dt` datetime / * 5.5二进制格式* / DEFAULT NULL,
      `t`时间/ * 5.5二进制格式* / DEFAULT NULL
    )DEFAULT CHARSET = utf8mb4
    

    表格 COLUMN_TYPE 列的 输出 INFORMATION_SCHEMA.COLUMNS 也会受到类似的影响。

    此变量已弃用,将在以后的MySQL版本中删除。

  • skip_external_locking

    属性
    命令行格式 --skip-external-locking[={OFF|ON}]
    系统变量 skip_external_locking
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

    这是 OFF 如果 mysqld的 使用外部锁定(锁定系统), ON 如果外部锁定被禁用。 这仅影响 MyISAM 表访问。

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

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

  • skip_name_resolve

    属性
    命令行格式 --skip-name-resolve[={OFF|ON}]
    系统变量 skip_name_resolve
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    此变量是从 --skip-name-resolve 选项 的值设置的 如果是 OFF mysqld 在检查客户端连接时解析主机名。 如果是 ON mysqld 只使用IP号码; 在这种情况下, Host 授权表中的 所有 列值必须是IP地址或 localhost 请参见 第8.12.4.2节“DNS查找优化和主机缓存”

  • skip_networking

    属性
    命令行格式 --skip-networking
    系统变量 skip_networking
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有

    这是 ON 服务器仅允许本地(非TCP / IP)连接。 在Unix上,本地连接使用Unix套接字文件。 在Windows上,本地连接使用命名管道或共享内存。 可以 ON 使用该 --skip-networking 选项 将此变量设置为

  • skip_show_database

    属性
    命令行格式 --skip-show-database
    系统变量 skip_show_database
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有

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

    警告

    因为任何静态全局特权被认为是所有数据库的特权,任何静态全局特权使用户能够看到所有的数据库名称 SHOW DATABASES 或通过检查 SCHEMATA INFORMATION_SCHEMA ,除了已经在通过局部撤销数据库级别被限制的数据库。

  • slow_launch_time

    属性
    命令行格式 --slow-launch-time=#
    系统变量 slow_launch_time
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 2

    如果创建线程的时间超过这么多秒,则服务器会递增 Slow_launch_threads 状态变量。

  • slow_query_log

    属性
    命令行格式 --slow-query-log[={OFF|ON}]
    系统变量 slow_query_log
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    是否启用慢查询日志。 该值可以是0(或 OFF )以禁用日志,或1(或 ON )以启用日志。 默认值取决于是否 --slow_query_log 给出 了该 选项。 日志输出的目标由 log_output 系统变量 控制 ; 如果该值为 NONE ,则即使启用了日志,也不会写入任何日志条目。

    long_query_time 变量 的值决定 请参见 第5.4.5节“慢查询日志”

  • slow_query_log_file

    属性
    命令行格式 --slow-query-log-file=file_name
    系统变量 slow_query_log_file
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 文件名
    默认值 host_name-slow.log

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

  • socket

    属性
    命令行格式 --socket={file_name|pipe_name}
    系统变量 socket
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型
    默认值 (其他) /tmp/mysql.sock
    默认值 (Windows) MySQL

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

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

  • sort_buffer_size

    属性
    命令行格式 --sort-buffer-size=#
    系统变量 sort_buffer_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 262144
    最低价值 32768
    最大值 (其他,64位平台) 18446744073709551615
    最大值 (其他,32位平台) 4294967295
    最大值 (Windows) 4294967295

    必须执行排序的每个会话都会分配此大小的缓冲区。 sort_buffer_size 并非特定于任何存储引擎,并且以一般方式应用于优化。 至少该 sort_buffer_size 值必须足够大,以容纳排序缓冲区中的十五个元组。 此外,增加价值 max_sort_length 可能需要增加价值 sort_buffer_size 有关更多信息,请参见 第8.2.1.15节“ORDER BY优化”

    如果 Sort_merge_passes SHOW GLOBAL STATUS 输出中 看到 每秒 很多 ,则可以考虑增加 sort_buffer_size 值以加速 ORDER BY GROUP BY 通过查询优化或改进的索引无法改进的操作。

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

    允许的最大设置为 sort_buffer_size 4GB-1。 64位平台允许更大的值(64位Windows除外,其中大值被截断为4GB-1并带有警告)。

  • sql_auto_is_null

    属性
    系统变量 sql_auto_is_null
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 OFF

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

    SELECT * FROM tbl_nameWHERE为auto_colNULL
    

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

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

    在MySQL 8.0.16之前, 仅在执行语句时才执行 to 的转换, 以便 执行 期间 的值 确定查询是否已转换。 在MySQL 8.0.16及更高版本中,转换在语句准备期间执行。 WHERE auto_col IS NULL WHERE auto_col = LAST_INSERT_ID() sql_auto_is_null

    默认值 sql_auto_is_null OFF

  • sql_big_selects

    属性
    系统变量 sql_big_selects
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 ON

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

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

  • sql_buffer_result

    属性
    系统变量 sql_buffer_result
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 OFF

    如果启用, sql_buffer_result 则会将 SELECT 语句的 强制结果 放入临时表中。 这有助于MySQL尽早释放表锁,并且在需要很长时间将结果发送给客户端的情况下可能是有益的。 默认值为 OFF

  • sql_log_off

    属性
    系统变量 sql_log_off
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF
    有效值

    OFF (启用日志记录)

    ON (禁用日志记录)

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

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

  • sql_mode

    属性
    命令行格式 --sql-mode=name
    系统变量 sql_mode
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型
    默认值 (> = 8.0.11) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
    默认值 (<= 8.0.4) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
    有效值 (> = 8.0.11)

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    有效值 (> = 8.0.1,<= 8.0.4)

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_CREATE_USER

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_FIELD_OPTIONS

    NO_KEY_OPTIONS

    NO_TABLE_OPTIONS

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

    TIME_TRUNCATE_FRACTIONAL

    有效值 (8.0.0)

    ALLOW_INVALID_DATES

    ANSI_QUOTES

    ERROR_FOR_DIVISION_BY_ZERO

    HIGH_NOT_PRECEDENCE

    IGNORE_SPACE

    NO_AUTO_CREATE_USER

    NO_AUTO_VALUE_ON_ZERO

    NO_BACKSLASH_ESCAPES

    NO_DIR_IN_CREATE

    NO_ENGINE_SUBSTITUTION

    NO_FIELD_OPTIONS

    NO_KEY_OPTIONS

    NO_TABLE_OPTIONS

    NO_UNSIGNED_SUBTRACTION

    NO_ZERO_DATE

    NO_ZERO_IN_DATE

    ONLY_FULL_GROUP_BY

    PAD_CHAR_TO_FULL_LENGTH

    PIPES_AS_CONCAT

    REAL_AS_FLOAT

    STRICT_ALL_TABLES

    STRICT_TRANS_TABLES

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

    注意

    MySQL安装程序可以在安装过程中配置SQL模式。

    如果SQL模式与默认模式或您期望的模式不同,请检查服务器在启动时读取的选项文件中的设置。

  • sql_notes

    属性
    系统变量 sql_notes
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

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

  • sql_quote_show_create

    属性
    系统变量 sql_quote_show_create
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

    如果启用(默认值),则服务器为 语句 SHOW CREATE TABLE SHOW CREATE DATABASE 语句 引用标识符 如果禁用,则禁用引用。 默认情况下启用此选项,以便复制适用于需要引用的标识符。 请参见 第13.7.6.10节“SHOW CREATE TABLE语法” 第13.7.6.6节“SHOW CREATE DATABASE语法”

  • sql_require_primary_key

    属性
    命令行格式 --sql-require-primary-key[={OFF|ON}]
    介绍 8.0.13
    系统变量 sql_require_primary_key
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 OFF

    创建新表或更改现有表结构的语句是否强制要求表具有主键。

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

    启用此变量有助于避免在表没有主键时可能发生的基于行的复制中的性能问题。 假设表没有主键,更新或删除修改多行。 在主服务器上,可以使用单个表扫描执行此操作,但是在使用基于行的复制进行复制时,会导致对从属服务器上要修改的每一行进行表扫描。 使用主键,不会发生这些表扫描。

    sql_require_primary_key 适用于基表和 TEMPORARY 表,并且对其值的更改将复制到从属服务器。

    启用时, sql_require_primary_key 具有以下效果:

    • 尝试创建没有主键的新表失败并显示错误。 这包括 CREATE TABLE ... LIKE 它还包括 CREATE TABLE ... SELECT ,除非该 CREATE TABLE 部分包含主键定义。

    • 尝试从现有表中删除主键失败并显示错误,但 ALTER TABLE 允许 删除主键并在同一 语句中 添加主键

      即使表还包含 UNIQUE NOT NULL 索引, 删除主键也会失败

    • 尝试导入没有主键的表失败并显示错误。

  • sql_safe_updates

    属性
    系统变量 sql_safe_updates
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 OFF

    如果这个变量被启用, UPDATE 并且 DELETE 不中使用的关键语句 WHERE 条款或 LIMIT 条款产生错误。 这使得捕获 UPDATE DELETE 未正确使用键的语句 成为可能, 并且 可能会更改或删除大量行。 默认值为 OFF

    对于 mysql 客户端, sql_safe_updates 可以使用该 --safe-updates 选项 启用 有关更多信息,请参阅 使用安全更新模式(--safe-updates)

  • sql_select_limit

    属性
    系统变量 sql_select_limit
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数

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

    新连接的默认值是服务器允许每个表的最大行数。 典型的默认值为(2 32 )-1或(2 64 )-1。 如果更改了限制,则可以通过指定值来恢复默认值 DEFAULT

    如果a SELECT 有一个 LIMIT 子句, LIMIT 则优先于值 sql_select_limit

  • sql_warnings

    属性
    系统变量 sql_warnings
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

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

  • ssl_ca

    属性
    命令行格式 --ssl-ca=file_name
    系统变量 ssl_ca
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型 文件名

    具有受信任SSL证书颁发机构列表的文件的路径。

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • ssl_capath

    属性
    命令行格式 --ssl-capath=dir_name
    系统变量 ssl_capath
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型 目录名称

    包含PEM格式的受信任SSL CA证书的目录的路径。

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • ssl_cert

    属性
    命令行格式 --ssl-cert=file_name
    系统变量 ssl_cert
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型 文件名

    用于建立安全连接的SSL证书文件的名称。

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • ssl_cipher

    属性
    命令行格式 --ssl-cipher=name
    系统变量 ssl_cipher
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型

    SSL加密的允许密码列表。

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • ssl_crl

    属性
    命令行格式 --ssl-crl=file_name
    系统变量 ssl_crl
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型 文件名

    包含证书吊销的文件的路径以PEM格式列出。 对revocation-list功能的支持取决于用于编译MySQL的SSL库。 请参见 第6.3.4节“SSL库相关功能”

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • ssl_crlpath

    属性
    命令行格式 --ssl-crlpath=dir_name
    系统变量 ssl_crlpath
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型 目录名称

    包含PEM格式的证书吊销列表的文件的目录的路径。 对revocation-list功能的支持取决于用于编译MySQL的SSL库。 请参见 第6.3.4节“SSL库相关功能”

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • ssl_fips_mode

    属性
    命令行格式 --ssl-fips-mode={OFF|ON|STRICT}
    介绍 8.0.11
    系统变量 ssl_fips_mode
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 OFF
    有效值

    OFF (或0)

    ON (或1)

    STRICT (或2)

    控制是否在服务器端启用FIPS模式。 所述 ssl_fips_mode 系统变量与其它的不同 的选项,因为它不用于控制服务器的许可证是否加密连接,而是影响允许哪些加密操作。 请参见 第6.5节“FIPS支持” --ssl-xxx

    ssl_fips_mode 允许 这些 值:

    • OFF (或0):禁用FIPS模式。

    • ON (或1):启用FIPS模式。

    • STRICT (或2):启用 严格 FIPS模式。

    注意

    如果OpenSSL的FIPS对象模块不可用时,对于唯一的允许值 ssl_fips_mode OFF 在这种情况下,设置 ssl_fips_mode ON STRICT 启动时会导致服务器生成错误消息并退出。

  • ssl_key

    属性
    命令行格式 --ssl-key=file_name
    系统变量 ssl_key
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型 文件名

    用于建立安全连接的SSL密钥文件的名称。

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • stored_program_cache

    属性
    命令行格式 --stored-program-cache=#
    系统变量 stored_program_cache
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 256
    最低价值 16
    最大价值 524288

    为每个连接的高速缓存存储例程数设置软上限。 此变量的值是根据MySQL服务器分别为存储过程和存储函数维护的两个高速缓存中的每个高速缓存中保存的例程数来指定的。

    每当执行存储的例程时,在解析例程中的第一个或顶级语句之前检查该高速缓存大小; 如果相同类型的例程(存储过程或正在执行的存储过程)的数量超过此变量指定的限制,则刷新相应的高速缓存并释放先前为高速缓存的对象分配的内存。 这允许安全地刷新缓存,即使存储的例程之间存在依赖关系。

    存储过程和存储的函数高速缓存与 字典对象高速缓存 的存储的程序定义高速缓存分区并行存在 存储过程和存储的函数高速缓存是每个连接,而存储的程序定义高速缓存是共享的。 存储过程和存储的函数高速缓存中对象的存在不依赖于存储的程序定义高速缓存中的对象的存在,反之亦然。 有关更多信息,请参见 第14.4节“字典对象高速缓存”

  • stored_program_definition_cache

    属性
    命令行格式 --stored-program-definition-cache=#
    系统变量 stored_program_definition_cache
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 256
    最低价值 256
    最大价值 524288

    定义可以保存在字典对象缓存中的已存储程序定义对象(已使用和未使用)的数量限制。

    当使用的数量小于定义的容量时,未使用的存储程序定义对象仅保留在字典对象缓存中 stored_program_definition_cache

    设置为0表示存储的程序定义对象仅在使用时保存在字典对象缓存中。

    存储的程序定义高速缓存分区与使用该 stored_program_cache 选项 配置的存储过程和存储的函数高速缓存并行存在

    stored_program_cache 选项为每个连接的高速缓存存储过程或函数的数量设置软上限,并在每次连接执行存储过程或函数时检查限制。 另一方面,存储的程序定义高速缓存分区是共享高速缓存,其存储用于其他目的的存储的程序定义对象。 存储的程序定义高速缓存分区中对象的存在不依赖于存储过程高速缓存或存储的函数高速缓存中的对象的存在,反之亦然。

    有关相关信息,请参见 第14.4节“字典对象缓存”

  • super_read_only

    属性
    命令行格式 --super-read-only[={OFF|ON}]
    系统变量 super_read_only
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    如果 read_only 启用 系统变量,则服务器仅允许具有该 SUPER 权限的 用户进行客户端更新 如果 super_read_only 还启用 系统变量,则服务器甚至禁止具有的客户端更新 SUPER 有关 read_only 只读模式的说明以及有关如何 read_only super_read_only 交互的 信息, 请参阅 系统变量的说明

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

  • syseventlog.facility

    属性
    命令行格式 --syseventlog.facility=value
    介绍 8.0.13
    系统变量 syseventlog.facility
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 daemon

    写入错误日志输出的工具 syslog (发送消息的程序类型)。 除非 log_sink_syseventlog 安装 错误日志组件, 否则此变量不可用 请参见 第5.4.2.7节“记录到系统日志的错误”

    允许的值可能因操作系统而异; 请参阅您的系统 syslog 文档。

    Windows上不存在此变量。

  • syseventlog.include_pid

    属性
    命令行格式 --syseventlog.include-pid[={OFF|ON}]
    介绍 8.0.13
    系统变量 syseventlog.include_pid
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

    是否在写入的每行错误日志输出中包含服务器进程ID syslog 除非 log_sink_syseventlog 安装 错误日志组件, 否则此变量不可用 请参见 第5.4.2.7节“记录到系统日志的错误”

    Windows上不存在此变量。

  • syseventlog.tag

    属性
    命令行格式 --syseventlog.tag=tag
    介绍 8.0.13
    系统变量 syseventlog.tag
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 empty string

    要写入错误日志输出 syslog 或Windows事件日志中 的服务器标识符的标记 除非 log_sink_syseventlog 安装 错误日志组件, 否则此变量不可用 请参见 第5.4.2.7节“记录到系统日志的错误”

    默认情况下,未设置任何标记,因此服务器标识符仅 MySQL 在Windows上以及 mysqld 其他平台上。 如果 tag 指定 了标记值 ,则将其附加到带有前导连字符的服务器标识符,从而生成 (或 在Windows上) syslog 标识符 mysqld-tag MySQL-tag

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

  • system_time_zone

    属性
    系统变量 system_time_zone
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

    服务器系统时区。 当服务器开始执行时,它从机器默认值继承时区设置,可能由用于运行服务器或启动脚本的帐户环境修改。 该值用于设置 system_time_zone 通常,时区由 TZ 环境变量 指定 它也可以使用 mysqld_safe 脚本 --timezone 选项 指定

    system_time_zone 变量不同于 time_zone 虽然它们可能具有相同的值,但后一个变量用于初始化连接的每个客户端的时区。 请参见 第5.1.13节“MySQL服务器时区支持”

  • table_definition_cache

    属性
    命令行格式 --table-definition-cache=#
    系统变量 table_definition_cache
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 -1 (表示自动调整大小;不指定此文字值)
    最低价值 400
    最大价值 524288

    可以存储在定义高速缓存中的表定义数。 如果使用大量表,则可以创建大型表定义高速缓存以加快表的打开速度。 与普通表缓存不同,表定义缓存占用的空间更少,不使用文件描述符。 最小值为400.默认值基于以下公式,上限为2000:

    MIN(400 + table_open_cache / 2,2000)
    

    For InnoDB table_definition_cache 充当 InnoDB 数据字典高速缓存 中打开表实例数量的软限制 如果打开的表实例的数量超过 table_definition_cache 设置,则LRU机制开始标记用于驱逐的表实例,并最终将它们从数据字典高速缓存中删除。 该限制有助于解决在下一次服务器重新启动之前将使用大量内存来缓存很少使用的表实例的情况。 具有缓存元数据的表实例数可能高于定义的限制 table_definition_cache ,因为具有外键关系的父表和子表实例未放置在LRU列表中,并且不会从内存中逐出。

    此外,还 table_definition_cache 定义了 InnoDB 可以一次打开的每表文件表空间 数的软限制,该 表空间也由 innodb_open_files 如果同时 设置 table_definition_cache innodb_open_files ,则使用最高设置。 如果未设置任何变量 table_definition_cache ,则使用具有更高默认值的 变量 如果打开的表空间文件句柄的数量超过 table_definition_cache or 定义的限制 innodb_open_files ,则LRU机制在表空间文件LRU列表中搜索完全刷新且当前未扩展的文件。 每次打开新表空间时都会执行此过程。 如果没有 非活动 表空间,不关闭任何表空间文件。

    表定义高速缓存与 字典对象高速缓存 的表定义高速缓存分区并行存在 两个缓存都存储表定义,但服务于MySQL服务器的不同部分。 一个缓存中的对象不依赖于另一个缓存中的存在对象。 有关更多信息,请参见 第14.4节“字典对象高速缓存”

  • table_encryption_privilege_check

    属性
    命令行格式 --table-encryption-privilege-check[={OFF|ON}]
    介绍 8.0.16
    系统变量 table_encryption_privilege_check
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    控制 TABLE_ENCRYPTION_ADMIN 在创建或更改加密与 default_table_encryption 设置 不同的模式或常规表空间 时,或者在创建或更改加密设置与默认模式加密不同的表时 发生 权限检查 默认情况下禁用该检查。

    table_encryption_privilege_check 在运行时 设置 需要该 SUPER 权限。

    table_encryption_privilege_check 支持 SET PERSIST SET PERSIST_ONLY 语法。 请参见 第5.1.9.3节“持久系统变量”

    有关更多信息,请参阅 为架构和常规表空间定义加密默认值

  • table_open_cache

    属性
    命令行格式 --table-open-cache=#
    系统变量 table_open_cache
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (> = 8.0.4) 4000
    默认值 (<= 8.0.3) 2000
    最低价值 1
    最大价值 524288

    所有线程的打开表的数量。 增加此值会增加 mysqld 所需的 文件描述符数 您可以通过检查 Opened_tables 状态变量 来检查是否需要增加表缓存 请参见 第5.1.10节“服务器状态变量” 如果值 Opened_tables 很大并且您不 FLUSH TABLES 经常 使用 (这只会强制关闭并重新打开所有表),那么您应该增加 table_open_cache 变量 的值 有关表缓存的更多信息,请参见 第8.4.3.1节“MySQL如何打开和关闭表”

  • table_open_cache_instances

    属性
    命令行格式 --table-open-cache-instances=#
    系统变量 table_open_cache_instances
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 16
    最低价值 1
    最大价值 64

    打开表缓存实例的数量。 为了通过减少会话之间的争用来提高可伸缩性,可以将打开表缓存划分为几个较小的大小 table_open_cache /的 缓存实例 table_open_cache_instances 会话需要仅锁定一个实例以访问DML语句。 这会在实例之间对高速缓存进行分段访问,从而在有许多会话访问表时允许使用高速缓存的操作具有更高的性能。 (DDL语句仍然需要锁定整个缓存,但这些语句比DML语句要频繁得多。)

    对于常规使用16个或更多内核的系统,建议使用值8或16。

  • tablespace_definition_cache

    属性
    命令行格式 --tablespace-definition-cache=#
    系统变量 tablespace_definition_cache
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 256
    最低价值 256
    最大价值 524288

    定义可以保留在字典对象缓存中的表空间定义对象(已使用和未使用)的数量限制。

    当使用的数量小于定义的容量时,未使用的表空间定义对象仅保留在字典对象缓存中 tablespace_definition_cache

    设置 0 意味着表空间定义对象仅在字典对象缓存中使用时保留。

    有关更多信息,请参见 第14.4节“字典对象高速缓存”

  • temptable_max_ram

    属性
    命令行格式 --temptable-max-ram=#
    介绍 8.0.2
    系统变量 temptable_max_ram
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1073741824
    最低价值 2097152
    最大价值 2^64-1

    定义 TempTable 存储引擎在开始在磁盘上存储数据之前 可以占用的最大内存量 默认值为1073741824字节(1GiB)。 有关更多信息,请参见 第8.4.4节“MySQL中的内部临时表使用”

  • temptable_use_mmap

    属性
    命令行格式 --temptable-use-mmap[={OFF|ON}]
    介绍 8.0.16
    系统变量 temptable_use_mmap
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

    定义当TempTable存储引擎占用的内存量超过 temptable_max_ram 变量 定义的限制时,TempTable存储引擎是否为内部内存临时表分配空间作为内存映射的临时文件 temptable_use_mmap 被禁用时,不是Temptable存储引擎使用 InnoDB 的磁盘上的内部临时表来代替。 有关更多信息,请参见 第8.4.4节“MySQL中的内部临时表使用”

  • thread_cache_size

    属性
    命令行格式 --thread-cache-size=#
    系统变量 thread_cache_size
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 -1 (表示自动调整大小;不指定此文字值)
    最低价值 0
    最大价值 16384

    服务器应缓存多少个线程以供重用。 当客户端断开连接时,如果客户端的线程少于 thread_cache_size 线程, 则将其放入缓存中 如果可能,通过重用从高速缓存中获取的线程来满足线程请求,并且仅当高速缓存为空时才创建新线程。 如果您有许多新连接,可以增加此变量以提高性能。 通常,如果您有一个良好的线程实现,这不会提供显着的性能改进。 但是,如果您的服务器每秒看到数百个连接,则通常应该设置 thread_cache_size 足够高,以便大多数新连接使用缓存线程。 通过检查 Connections Threads_created 状态变量 之间的差异 ,您可以看到线程缓存的效率。 有关详细信息,请参见 第5.1.10节“服务器状态变量”

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

    8 +(max_connections / 100)
    
  • thread_handling

    属性
    命令行格式 --thread-handling=name
    系统变量 thread_handling
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 列举
    默认值 one-thread-per-connection
    有效值

    no-threads

    one-thread-per-connection

    loaded-dynamically

    服务器用于连接线程的线程处理模型。 允许的值是 no-threads (服务器使用单个线程来处理一个连接)和 one-thread-per-connection (服务器使用一个线程来处理每个客户端连接)。 no-threads 在Linux下调试很有用; 请参见 第29.5节“调试和移植MySQL”

  • thread_pool_algorithm

    属性
    命令行格式 --thread-pool-algorithm=#
    介绍 8.0.11
    系统变量 thread_pool_algorithm
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 1

    此变量控制线程池插件使用的算法:

    • 值0(默认值)使用保守的低并发算法,该算法经过最好的测试,并且已知可以产生非常好的结果。

    • 值1会增加并发性并使用更积极的算法,有时已知该算法在最佳线程数上的性能提高了5-10%,但随着连接数量的增加,性能会下降。 它的使用应被视为实验性的,不受支持。

    仅当启用了线程池插件时,此变量才可用。 请参见 第5.6.3节“MySQL企业线程池”

  • thread_pool_high_priority_connection

    属性
    命令行格式 --thread-pool-high-priority-connection=#
    介绍 8.0.11
    系统变量 thread_pool_high_priority_connection
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 1

    此变量影响执行前新语句的排队。 如果值为0(false,默认值),则语句排队使用低优先级队列和高优先级队列。 如果值为1(true),则排队语句始终转到高优先级队列。

    仅当启用了线程池插件时,此变量才可用。 请参见 第5.6.3节“MySQL企业线程池”

  • thread_pool_max_unused_threads

    属性
    命令行格式 --thread-pool-max-unused-threads=#
    介绍 8.0.11
    系统变量 thread_pool_max_unused_threads
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0
    最低价值 0
    最大价值 4096

    线程池中允许的最大未使用线程数。 此变量可以限制休眠线程使用的内存量。

    值0(默认值)表示对休眠线程数没有限制。 的值 N ,其中 N 大于0意味着1个消费者线程和 N -1储备线程。 在这种情况下,如果一个线程准备好睡眠但睡眠线程的数量已经达到最大值,则线程退出而不是进入休眠状态。

    休眠线程作为消费者线程或预留线程休眠。 线程池允许一个线程在休眠时成为消费者线程。 如果一个线程进入休眠状态并且没有现有的消费者线程,它将作为消费者线程休眠。 当必须唤醒线程时,如果存在消费者线程,则选择该消费者线程。 仅当没有消费者线程被唤醒时,才会选择保留线程。

    仅当启用了线程池插件时,此变量才可用。 请参见 第5.6.3节“MySQL企业线程池”

  • thread_pool_prio_kickup_timer

    属性
    命令行格式 --thread-pool-prio-kickup-timer=#
    介绍 8.0.11
    系统变量 thread_pool_prio_kickup_timer
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 1000
    最低价值 0
    最大价值 4294967294

    此变量影响等待在低优先级队列中执行的语句。 该值是等待语句移动到高优先级队列之前的毫秒数。 默认值为1000(1秒)。 值的范围是0到2 32 - 2。

    仅当启用了线程池插件时,此变量才可用。 请参见 第5.6.3节“MySQL企业线程池”

  • thread_pool_size

    属性
    命令行格式 --thread-pool-size=#
    介绍 8.0.11
    系统变量 thread_pool_size
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 16
    最低价值 1
    最大价值 64

    线程池中的线程组数。 这是控制线程池性能的最重要参数。 它会影响可以同时执行的语句数。 默认值为16,允许值范围为1到64。 如果指定了此范围之外的值,则不会加载线程池插件,并且服务器会将消息写入错误日志。

    仅当启用了线程池插件时,此变量才可用。 请参见 第5.6.3节“MySQL企业线程池”

  • thread_pool_stall_limit

    属性
    命令行格式 --thread-pool-stall-limit=#
    介绍 8.0.11
    系统变量 thread_pool_stall_limit
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 6
    最低价值 4
    最大价值 600

    此变量影响执行语句。 该值是语句在被定义为停顿之前必须在开始执行之后完成的时间量,此时线程池允许线程组开始执行另一个语句。 该值以10毫秒为单位进行测量,因此值(默认值)为60毫秒。 值的范围是4到600(40ms到6s)。 短等待值允许线程更快地启动。 短值也可以更好地避免死锁情况。 长等待值对于包含长时间运行语句的工作负载很有用,以避免在当前执行时发出太多新语句。

    仅当启用了线程池插件时,此变量才可用。 请参见 第5.6.3节“MySQL企业线程池”

  • thread_stack

    属性
    命令行格式 --thread-stack=#
    系统变量 thread_stack
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 (64位平台,> = 8.0.2) 286720
    默认值 (64位平台,<= 8.0.1) 262144
    默认值 (32位平台,> = 8.0.2) 221184
    默认值 (32位平台,<= 8.0.1) 196608
    最低价值 131072
    最大值 (64位平台) 18446744073709551615
    最大值 (32位平台) 4294967295
    块大小 1024

    每个线程的堆栈大小。 默认值足以进行正常操作。 如果线程堆栈大小太小,则会限制服务器可以处理的SQL语句的复杂性,存储过程的递归深度以及其他消耗内存的操作。

  • time_format

    在MySQL 8.0.3中删除了此系统变量。

  • time_zone

    属性
    系统变量 time_zone
    范围 全球,会议
    动态
    SET_VAR 提示适用 (> = 8.0.17)
    SET_VAR 提示适用 (<= 8.0.16) 没有
    类型

    当前时区。 此变量用于初始化连接的每个客户端的时区。 默认情况下,它的初始值是 'SYSTEM' (表示 使用值 system_time_zone )。 可以使用该 --default-time-zone 选项 在服务器启动时显式指定该值 请参见 第5.1.13节“MySQL服务器时区支持”

    注意

    如果设置为 SYSTEM ,则每个需要时区计算的MySQL函数调用都会调用系统库来确定当前系统时区。 此调用可能受全局互斥锁保护,从而导致争用。

  • timestamp

    属性
    系统变量 timestamp
    范围 会议
    动态
    SET_VAR 提示适用
    类型 数字

    设置此客户端的时间。 如果使用二进制日志还原行,则用于获取原始时间戳。 timestamp_value 应该是一个Unix纪元时间戳(一个像返回 UNIX_TIMESTAMP() 的值,而不是 'YYYY-MM-DD hh:mm:ss' 格式 的值 )或 DEFAULT

    设置 timestamp 为常量值会使其保留该值,直到再次更改为止。 设置 timestamp DEFAULT 使其值为访问时的当前日期和时间。

    在MySQL 8.0, timestamp 是一个 DOUBLE ,而不是 BIGINT 因为它的值包括微秒的部分。

    SET timestamp 影响返回的值 NOW() 但不 影响 SYSDATE() 这意味着二进制日志中的时间戳设置对调用没有影响 SYSDATE() 可以使用 --sysdate-is-now 选项 启动服务器 SYSDATE() 以使其成为别名 NOW() ,在这种情况下 SET timestamp 会影响这两个函数。

  • tls_ciphersuites

    属性
    命令行格式 --tls-ciphersuites=ciphersuite_list
    介绍 8.0.16
    系统变量 tls_ciphersuites
    范围 全球
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 empty string

    服务器允许加密连接的TLSv1.3密码组。 该值是一个或多个以冒号分隔的密码组名称的列表。 可以为此变量命名的密码套件取决于用于编译MySQL的SSL库。 有关详细信息,请参见 第6.3.6节“加密连接协议和密码”

  • tls_version

    属性
    命令行格式 --tls-version=protocol_list
    系统变量 tls_version
    范围 全球
    动态 (> = 8.0.16)
    动态 (<= 8.0.15) 没有
    SET_VAR 提示适用 没有
    类型
    默认值 (> = 8.0.16)

    TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 (OpenSSL 1.1.1及更高版本)

    TLSv1,TLSv1.1,TLSv1.2 (除此以外)

    默认值 (> = 8.0.11,<= 8.0.15) TLSv1,TLSv1.1,TLSv1.2
    默认值 (<= 8.0.4)

    TLSv1,TLSv1.1,TLSv1.2 (OpenSSL的)

    TLSv1,TLSv1.1 (yaSSL)

    服务器允许加密连接的协议。 该值是一个或多个以逗号分隔的协议名称的列表。 可以为此变量命名的协议取决于用于编译MySQL的SSL库。 有关详细信息,请参见 第6.3.6节“加密连接协议和密码”

    从MySQL 8.0.16开始,此变量是动态的,可以在运行时进行修改,以影响服务器用于新连接的SSL上下文。 请参阅 加密连接的服务器端运行时配置 在MySQL 8.0.16之前,只能在服务器启动时设置此变量。

  • tmp_table_size

    属性
    命令行格式 --tmp-table-size=#
    系统变量 tmp_table_size
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 16777216
    最低价值 1024
    最大价值 18446744073709551615

    内部内存临时表的最大大小。 此变量不适用于用户创建的 MEMORY 表。

    实际限制是根据 tmp_table_size max_heap_table_size 的较小 值确定的 如果内存中的临时表超出限制,MySQL会自动将其转换为磁盘上的临时表。 有关 详细信息, 请参阅 磁盘内部临时表的存储引擎

    如果您执行许多高级 查询并且内存 很多 tmp_table_size max_heap_table_size 增加 (以及 必要时) 的值 GROUP BY

    您可以将创建的内部磁盘上临时表的数量与通过比较 Created_tmp_disk_tables Created_tmp_tables 变量 的值创建的内部临时表的总数进行比较

    另请参见 第8.4.4节“MySQL中的内部临时表使用”

  • tmpdir

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

    用于创建临时文件的目录的路径。 如果您的默认 /tmp 目录位于太小而无法容纳临时表的分区上,则 可能很有用 此变量可以设置为以循环方式使用的多个路径的列表。 路径应该用 : Unix上 的冒号字符( )和 ; Windows上的 分号字符( 分隔

    tmpdir 可以是非永久位置,例如基于内存的文件系统上的目录或服务器主机重新启动时清除的目录。 如果MySQL服务器充当复制从属服务器,并且您使用的是非永久性位置 tmpdir ,请考虑使用该 slave_load_tmpdir 变量 为从属服务器设置不同的临时目录 对于复制从属服务器,用于复制 LOAD DATA 语句 的临时文件 存储在此目录中,因此使用永久位置它们可以在计算机重新启动后继续运行,尽管如果已删除临时文件,复制现在可以在重新启动后继续。

    有关临时文件存储位置的更多信息,请参见 第B.4.3.5节“MySQL存储临时文件的位置”

  • transaction_alloc_block_size

    属性
    命令行格式 --transaction-alloc-block-size=#
    系统变量 transaction_alloc_block_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 8192
    最低价值 1024
    最大价值 131072
    块大小 1024

    增加需要内存的每事务内存池的字节数。 请参阅说明 transaction_prealloc_size

  • transaction_isolation

    属性
    命令行格式 --transaction-isolation=name
    系统变量 transaction_isolation
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 REPEATABLE-READ
    有效值

    READ-UNCOMMITTED

    READ-COMMITTED

    REPEATABLE-READ

    SERIALIZABLE

    事务隔离级别。 默认是 REPEATABLE-READ

    事务隔离级别有三个范围:全局,会话和下一个事务。 这个三范围实现导致一些非标准的隔离级别分配语义,如稍后所述。

    要在启动时设置全局事务隔离级别,请使用 --transaction-isolation 服务器选项。

    在运行时,可以使用 SET 语句 直接设置隔离级别, 以便为 transaction_isolation 系统变量赋值,或者间接使用 SET TRANSACTION 语句。 如果 transaction_isolation 直接 设置 为包含空格的隔离级别名称,则名称应括在引号内,并用空格替换空格。 例如,使用此 SET 语句设置全局值:

    SET GLOBAL transaction_isolation ='READ-COMMITTED';
    

    设置全局 transaction_isolation 值可设置所有后续会话的隔离级别。 现有会话不受影响。

    要设置会话或下一级 transaction_isolation 值,请使用该 SET 语句。 对于大多数会话系统变量,这些语句是设置值的等效方法:

    SET @@ SESSION。var_name= value;
    SET SESSION var_name= value;
    SET var_name= value;
    SET @@ var_name= value;
    

    如前所述,除了全局和会话范围之外,事务隔离级别还具有下一个事务范围。 要启用下一个事务范围, SET 分配会话系统变量值的语法具有非标准语义 transaction_isolation

    • 要设置会话隔离级别,请使用以下任何语法:

      SET @@ SESSION.transaction_isolation = value;
      SET SESSION transaction_isolation = value;
      SET transaction_isolation = value;
      

      对于每种语法,这些语义适用:

      • 设置会话中执行的所有后续事务的隔离级别。

      • 在交易中允许,但不影响当前正在进行的交易。

      • 如果在事务之间执行,则覆盖设置下一事务隔离级别的任何先前语句。

      • 对应于 SET SESSION TRANSACTION ISOLATION LEVEL (使用 SESSION 关键字)。

    • 要设置下一个事务隔离级别,请使用以下语法:

      SET @@ transaction_isolation = value;
      

      对于该语法,这些语义适用:

      • 仅为会话中执行的下一个单个事务设置隔离级别。

      • 后续事务将恢复为会话隔离级别。

      • 交易中不允许。

      • 对应于 SET TRANSACTION ISOLATION LEVEL (没有 SESSION 关键字)。

    有关 SET TRANSACTION 它及其与 transaction_isolation 系统变量的 关系的 更多信息 ,请参见 第13.3.7节“SET TRANSACTION语法”

  • transaction_prealloc_size

    属性
    命令行格式 --transaction-prealloc-size=#
    系统变量 transaction_prealloc_size
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 4096
    最低价值 1024
    最大价值 131072
    块大小 1024

    有一个每事务内存池,各种与事务相关的分配从中获取内存。 池的初始大小(以字节为单位) transaction_prealloc_size 对于池中无法满足的每个分配,因为它没有足够的可用内存,因此池会增加 transaction_alloc_block_size 字节数。 事务结束时,池被截断为 transaction_prealloc_size 字节。

    通过使 transaction_prealloc_size 足够大以包含单个事务中的所有语句,您可以避免许多 malloc() 调用。

  • transaction_read_only

    属性
    命令行格式 --transaction-read-only[={OFF|ON}]
    系统变量 transaction_read_only
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    交易访问模式。 值可以是 OFF (读/写;默认值)或 ON (只读)。

    事务访问模式有三个范围:全局,会话和下一个事务。 这种三范围实现导致一些非标准的访问模式分配语义,如稍后所述。

    要在启动时设置全局事务访问模式,请使用 --transaction-read-only 服务器选项。

    在运行时,可以使用 SET 语句 直接设置访问模式, 以便为 transaction_read_only 系统变量赋值,或者间接使用 SET TRANSACTION 语句。 例如,使用此 SET 语句设置全局值:

    SET GLOBAL transaction_read_only = ON;
    

    设置全局 transaction_read_only 值可设置所有后续会话的访问模式。 现有会话不受影响。

    要设置会话或下一级 transaction_read_only 值,请使用该 SET 语句。 对于大多数会话系统变量,这些语句是设置值的等效方法:

    SET @@ SESSION。var_name= value;
    SET SESSION var_name= value;
    SET var_name= value;
    SET @@ var_name= value;
    

    如前所述,除了全局和会话范围之外,事务访问模式还具有下一个事务范围。 要启用下一个事务范围, SET 分配会话系统变量值的语法具有非标准语义 transaction_read_only

    • 要设置会话访问模式,请使用以下任何语法:

      SET @@ SESSION.transaction_read_only = value;
      SET SESSION transaction_read_only = value;
      SET transaction_read_only = value;
      

      对于每种语法,这些语义适用:

      • 设置会话中执行的所有后续事务的访问模式。

      • 在交易中允许,但不影响当前正在进行的交易。

      • 如果在事务之间执行,则覆盖设置下一事务访问模式的任何先前语句。

      • 对应于 SET SESSION TRANSACTION {READ WRITE | READ ONLY} (使用 SESSION 关键字)。

    • 要设置下一个事务访问模式,请使用以下语法:

      SET @@ transaction_read_only = value;
      

      对于该语法,这些语义适用:

      • 仅为会话中执行的下一个单个事务设置访问模式。

      • 后续事务将恢复为会话访问模式。

      • 交易中不允许。

      • 对应于 SET TRANSACTION {READ WRITE | READ ONLY} (没有 SESSION 关键字)。

    有关 SET TRANSACTION 它及其与 transaction_read_only 系统变量的 关系的 更多信息 ,请参见 第13.3.7节“SET TRANSACTION语法”

  • tx_isolation

    属性
    弃用 是(在8.0.3中删除)
    系统变量 tx_isolation
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 列举
    默认值 REPEATABLE-READ
    有效值

    READ-UNCOMMITTED

    READ-COMMITTED

    REPEATABLE-READ

    SERIALIZABLE

    在MySQL 8.0.3中删除了此系统变量。 transaction_isolation 改用。

  • tx_read_only

    属性
    弃用 是(在8.0.3中删除)
    系统变量 tx_read_only
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 OFF

    在MySQL 8.0.3中删除了此系统变量。 transaction_read_only 改用。

  • unique_checks

    属性
    系统变量 unique_checks
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 ON

    如果设置为1(默认值), InnoDB 则执行表中 二级索引的唯一性检查 如果设置为0,则允许存储引擎假定输入数据中不存在重复键。 如果您确定您的数据不包含唯一性违规,则可以将其设置为0以加快大型表的导入速度 InnoDB

    将此变量设置为0 不需要 存储引擎忽略重复键。 仍然允许引擎检查它们并在检测到它们时发出重复键错误。

  • updatable_views_with_limit

    属性
    命令行格式 --updatable-views-with-limit[={OFF|ON}]
    系统变量 updatable_views_with_limit
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 1

    如果update语句包含 LIMIT 子句 ,则此变量控制是否可以在视图不包含基础表中定义的主键的所有列时对视图进行更新 (此类更新通常由GUI工具生成。)更新是一个 UPDATE DELETE 语句。 这里的主键表示a PRIMARY KEY UNIQUE 不包含列 索引 NULL

    变量可以有两个值:

    • 1 YES :仅发出警告(不是错误消息)。 这是默认值。

    • 0 NO :禁止更新。

  • use_secondary_engine

    属性
    介绍 8.0.13
    系统变量 use_secondary_engine
    范围 会议
    动态
    SET_VAR 提示适用
    类型 列举
    默认值 ON
    有效值

    OFF

    ON

    FORCE

    供将来使用。

  • validate_password.xxx

    validate_password 组件实现了一组具有表单名称的系统变量 这些变量会影响该组件的密码测试; 请参见 第6.4.3.2节“密码验证选项和变量” validate_password.xxx

  • validate_user_plugins

    属性
    命令行格式 --validate-user-plugins[={OFF|ON}]
    系统变量 validate_user_plugins
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型 布尔
    默认值 ON

    如果启用此变量(默认值),则服务器会检查每个用户帐户,并在发现会导致帐户无法使用的条件时生成警告:

    • 该帐户需要未加载的身份验证插件。

    • 该帐户需要 sha256_password caching_sha2_password 身份验证插件,但服务器启动时既没有启用SSL也没有启用RSA。

    启用 validate_user_plugins 会降低服务器初始化速度 FLUSH PRIVILEGES 如果您不需要额外检查,则可以在启动时禁用此变量以避免性能下降。

  • version

    服务器的版本号。 该值还可能包括指示服务器构建或配置信息的后缀。 -debug 表示服务器是在启用调试支持的情况下构建的。

  • version_comment

    属性
    系统变量 version_comment
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

    CMake的 配置程序有一个 COMPILATION_COMMENT_SERVER 选项,允许评论构建MySQL时指定。 此变量包含该注释的值。 (在MySQL 8.0.14之前, version_comment COMPILATION_COMMENT 选项 设置 。)请参见 第2.9.4节“MySQL源配置选项”

  • version_compile_machine

    属性
    系统变量 version_compile_machine
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

    服务器二进制文件的类型。

  • version_compile_os

    属性
    系统变量 version_compile_os
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

    构建MySQL的操作系统类型。

  • version_compile_zlib

    属性
    介绍 8.0.11
    系统变量 version_compile_zlib
    范围 全球
    动态 没有
    SET_VAR 提示适用 没有
    类型

    已编译 zlib 的版本

  • wait_timeout

    属性
    命令行格式 --wait-timeout=#
    系统变量 wait_timeout
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型 整数
    默认值 28800
    最低价值 1
    最大价值 (其他) 31536000
    最大值 (Windows) 2147483

    服务器在关闭非交互式连接之前等待活动的秒数。

    在线程启动时,会话 wait_timeout 值从全局 wait_timeout 值或 全局 初始化 interactive_timeout ,具体取决于客户端的类型(由 CLIENT_INTERACTIVE connect选项 定义 mysql_real_connect() )。 另见 interactive_timeout

  • warning_count

    生成消息的最后一个语句产生的错误,警告和注释的数量。 此变量是只读的。 请参见 第13.7.6.40节“显示警告语法”

  • windowing_use_high_precision

    属性
    命令行格式 --windowing-use-high-precision[={OFF|ON}]
    介绍 8.0.2
    系统变量 windowing_use_high_precision
    范围 全球,会议
    动态
    SET_VAR 提示适用
    类型 布尔
    默认值 ON

    是否在不损失精度的情况下计算窗口操作。 请参见 第8.2.1.20节“窗口函数优化”

5.1.9使用系统变量

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

内置了许多系统变量。系统变量也可以由服务器插件或组件安装:

  • 安装插件时会公开由服务器插件实现的系统变量,并且名称以插件名称开头。 例如, audit_log 插件实现了一个名为的系统变量 audit_log_policy

  • 服务器组件实现的系统变量在安装组件时公开,其名称以特定于组件的前缀开头。 例如, log_filter_dragnet 错误日志过滤器组件实现了一个名为的系统变量 log_error_filter_rules ,其全名是 dragnet.log_error_filter_rules 要引用此变量,请使用全名。

存在两个系统变量的范围。 全局变量会影响服务器的整体操作。 会话变量会影响其对各个客户端连接的操作。 给定的系统变量可以同时具有全局值和会话值。 全局和会话系统变量相关如下:

  • 服务器启动时,会将每个全局变量初始化为其默认值。 可以通过命令行或选项文件中指定的选项更改这些默认值。 (请参见 第4.2.2节“指定程序选项” 。)

  • 服务器还为每个连接的客户端维护一组会话变量。 使用相应全局变量的当前值在连接时初始化客户端的会话变量。 例如,客户端的SQL模式由会话 sql_mode 控制,会话 值在客户端连接到全局 sql_mode 的值时初始化

    对于某些系统变量,会话值不会从相应的全局值初始化; 如果是,则在变量描述中指出。

通过在命令行或选项文件中使用选项,可以在服务器启动时全局设置系统变量值。 当使用启动选项设置一个变量,需要一个数字值,该值可以与一个后缀被给予 K M G (大写或小写),以指示1024一乘法器,1024 2 或1024 3 ; 也就是说,分别是千字节,兆字节或千兆字节的单位。 从MySQL 8.0.14的,后缀也可以是 T P E 以指示1024乘法器 4 ,1024 5 或1024 6 因此,以下命令启动服务器 InnoDB 日志文件大小为16兆字节,最大数据包大小为1千兆字节:

mysqld --innodb-log-file-size = 16M --max-allowed-packet = 1G

在选项文件中,这些变量设置如下:

的[mysqld]
innodb_log_file_size = 16M
max_allowed_pa​​cket的= 1G

后缀字母的字母无关紧要; 16M 16m 是等价的,因为是 1G 1g

要限制在运行时可以使用 SET 语句 设置系统变量的 最大值,请 在服务器启动时 使用表单选项指定此最大值 例如,要防止 在运行时 将值 增加到大于32MB,请使用该选项 --maximum-var_name=value innodb_log_file_size --maximum-innodb-log-file-size=32M

许多系统变量都是动态的,可以在运行时使用该 SET 语句 进行更改 有关列表,请参见 第5.1.9.2节“动态系统变量” 要使用更改系统变量 SET ,请按名称引用它,可选地在其前面加上修饰符。 以下示例简要说明了此语法:

  • 设置全局系统变量:

    SET GLOBAL max_connections = 1000;
    SET @@ GLOBAL.max_connections = 1000;
    
  • 将全局系统变量保留到 mysqld-auto.cnf 文件中(并设置运行时值):

    SET PERSIST max_connections = 1000;
    SET @@ PERSIST.max_connections = 1000;
    
  • 将全局系统变量保留到 mysqld-auto.cnf 文件中(不设置运行时值):

    SET PERSIST_ONLY back_log = 1000;
    SET @@ PERSIST_ONLY.back_log = 1000;
    
  • 设置会话系统变量:

    SET SESSION sql_mode ='TRADITIONAL';
    SET @@ SESSION.sql_mode ='TRADITIONAL';
    SET @@ sql_mode ='TRADITIONAL';
    

有关 SET 语法的 完整详细信息 ,请参见 第13.7.5.1节“变量赋值的SET语法” 有关设置和保留系统变量的权限要求的说明,请参见 第5.1.9.1节“系统变量权限”

在服务器启动时设置变量时,可以使用指定值乘数的后缀,但不能 SET 在运行时 设置值 另一方面, SET 您可以使用表达式分配变量的值,但在服务器启动时设置变量时,这不是真的。 例如,以下第一行在服务器启动时是合法的,但第二行不是:

shell> mysql --max_allowed_packet=16M
shell>mysql --max_allowed_packet=16*1024*1024

相反,以下第二行在运行时是合法的,但第一行不是:

mysql> SET GLOBAL max_allowed_packet=16M;
mysql>SET GLOBAL max_allowed_packet=16*1024*1024;
注意

某些系统变量可以 SET 通过将它们设置为 ON or 来启用 1 ,或者通过将它们设置为 OFF 来禁用 0 但是,要在命令行或选项文件中设置此类变量,必须将其设置为 1 0 ; 将其设置为 ON OFF 将不起作用。 例如,在命令行上, --delay_key_write=1 可以工作但 --delay_key_write=ON 不能。

要显示系统变量名称和值,请使用以下 SHOW VARIABLES 语句:

MySQL的> SHOW VARIABLES;
+ --------------------------------- + --------------- -------------------- +
| Variable_name | 价值|
+ --------------------------------- + --------------- -------------------- +
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| automatic_sp_privileges | ON |
| back_log | 151 |
| basedir | / home / mysql / |
| binlog_cache_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | 二进制|
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | / home / mysql / share / mysql / charsets / |
| collat​​ion_connection | utf8_general_ci |
| collat​​ion_database | utf8mb4_0900_ai_ci |
| collat​​ion_server | utf8mb4_0900_ai_ci |
...
| innodb_autoextend_increment | 8 |
| innodb_buffer_pool_size | 8388608 |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
...
| 版本| 8.0.1-dmr-log |
| version_comment | 来源分布|
| version_compile_machine | i686 |
| version_compile_os | suse-linux |
| wait_timeout | 28800 |
+ --------------------------------- + --------------- -------------------- +

使用 LIKE 子句,语句仅显示与模式匹配的变量。 要获取特定变量名称,请使用 LIKE 如下所示 子句:

显示变量如'max_join_size';
显示会话变量类似'max_join_size';

要获取名称与模式匹配的变量列表,请 % LIKE 子句中 使用 通配符

显示变量如'%size%';
显示全球变量如'%size%';

通配符可用于要匹配的模式中的任何位置。 严格来说,因为 _ 是一个匹配任何单个字符的通配符,你应该将其转义为 \_ 按字面意思匹配它。 实际上,这很少是必要的。

因为 SHOW VARIABLES ,如果你既 GLOBAL 没有 指定也 没有 SESSION ,MySQL返回 SESSION 值。

GLOBAL 在设置 GLOBAL -only变量 需要 关键字 但在检索变量 不需要 关键字 的原因 是为了防止将来出现问题:

  • 如果 SESSION 要删除与 GLOBAL 变量 同名的 变量,具有足以修改全局变量的权限的客户端可能会意外地更改 GLOBAL 变量而不仅仅是 SESSION 变量用于其自己的会话。

  • 如果 SESSION 要添加 变量与变量同名 GLOBAL ,则打算更改 GLOBAL 变量 的客户端 可能只发现自己的 SESSION 变量已更改。

5.1.9.1系统变量权限

系统变量可以具有影响整个服务器操作的全局值,仅影响当前会话的会话值,或两者:

  • 对于动态系统变量,该 SET 语句可用于更改其全局或会话运行时值(或两者),以影响当前服务器实例的操作。 (有关动态变量的信息,请参见 第5.1.9.2节“动态系统变量” 。)

  • 对于某些全局系统变量, SET 可以使用它们将其值保存到 mysqld-auto.cnf 数据目录中 文件,以影响后续启动的服务器操作。 (有关持久化系统变量和 mysqld-auto.cnf 文件的信息,请参见 第5.1.9.3节“持久系统变量” 。)

  • 对于持久化的全局系统变量, RESET PERSIST 可用于从中删除它们的值 mysqld-auto.cnf ,以影响后续启动的服务器操作。

本节介绍在运行时为系统变量赋值的操作所需的权限。 这包括影响运行时值的操作以及持久保存值的操作。

要设置全局系统变量,请使用 SET 带有相应关键字 语句。 这些特权适用:

要从文件中删除持久化的全局系统变量 mysqld-auto.cnf ,请使用该 RESET PERSIST 语句。 这些特权适用:

如果全局系统变量对前面的权限要求有任何例外,则变量描述表示这些例外。 示例包括 default_table_encryption mandatory_roles ,需要其他权限。 这些附加权限适用于设置全局运行时值的操作,但不适用于持久保存该值的操作。

要设置会话系统变量运行时值,请使用该 SET SESSION 语句。 与设置全局运行时值相反,设置会话运行时值通常不需要特殊权限,任何用户都可以使用它来影响当前会话。 对于某些系统变量,设置会话值可能会在当前会话之外产生影响,因此是受限制的操作,只能由具有特殊权限的用户执行:

如果会话系统变量受限制,则变量描述指示该限制。 例子包括 binlog_format sql_log_bin 设置这些变量的会话值会影响当前会话的二进制日志记录,但也可能对服务器复制和备份的完整性产生更广泛的影响。

SESSION_VARIABLES_ADMIN 使管理员能够最小化之前已被授予的用户的权限足迹, SYSTEM_VARIABLES_ADMIN 或者 SUPER 使他们能够修改受限制的会话系统变量。 假设管理员已创建以下角色以授予设置受限会话系统变量的能力:

CREATE ROLE set_session_sysvars;
GRANT SYSTEM_VARIABLES_ADMIN ON *。* TO set_session_sysvars;

授予该 set_session_sysvars 角色的 任何用户 (以及具有该角色的用户)都可以设置受限制的会话系统变量。 但是,该用户还能够设置全局系统变量,这可能是不合需要的。

通过修改角色来 SESSION_VARIABLES_ADMIN 代替 SYSTEM_VARIABLES_ADMIN ,角色特权可以减少到设置受限制的会话系统变量的能力,而不是其他任何东西。 要修改角色,请使用以下语句:

GRANT SESSION_VARIABLES_ADMIN ON *。* TO set_session_sysvars;
REVOKE SYSTEM_VARIABLES_ADMIN ON *。* FROM set_session_sysvars;

修改角色具有直接影响:授予 set_session_sysvars 角色的 任何帐户 不再具有 SYSTEM_VARIABLES_ADMIN 且无法设置全局系统变量而未明确授予该功能。 类似 GRANT / REVOKE 序列可以应用于 SYSTEM_VARIABLES_ADMIN 直接 授予的任何帐户, 而不是通过角色。

5.1.9.2动态系统变量

许多服务器系统变量是动态的,可以在运行时设置。 请参见 第13.7.5.1节“变量赋值的SET语法” 有关设置系统变量的权限要求的说明,请参见 第5.1.9.1节“系统变量权限”

下表列出了适用的所有动态系统变量 mysqld

该表列出了每个变量的数据类型和范围。 最后一列指示每个变量的范围是全局,会话还是两者。 有关设置和使用变量的详细信息,请参阅相应的项目说明。 在适当的情况下,提供有关物品的进一步信息的直接链接。

具有 string 类型的变量 采用字符串值。 具有 数字 类型的变量 采用数值。 具有 boolean 类型的变量 可以设置为0,1 ON OFF 标记为 枚举 ”的 变量 通常应设置为变量的可用值之一,但也可以设置为与所需枚举值对应的数字。 对于枚举的系统变量,第一个枚举值对应于0.这与 ENUM 用于表列的数据类型,第一个枚举值对应于1。

表5.4动态系统变量摘要

变量名 变量类型 可变范围
activate_all_roles_on_login 布尔 全球
audit_log_connection_policy 列举 全球
audit_log_exclude_accounts 全球
audit_log_flush 布尔 全球
audit_log_include_accounts 全球
audit_log_read_buffer_size 整数 不定
audit_log_rotate_on_size 整数 全球
audit_log_statement_policy 列举 全球
authentication_ldap_sasl_auth_method_name 全球
authentication_ldap_sasl_bind_base_dn 全球
authentication_ldap_sasl_bind_root_dn 全球
authentication_ldap_sasl_bind_root_pwd 全球
authentication_ldap_sasl_ca_path 全球
authentication_ldap_sasl_group_search_attr 全球
authentication_ldap_sasl_group_search_filter 全球
authentication_ldap_sasl_init_pool_size 整数 全球
authentication_ldap_sasl_log_status 整数 全球
authentication_ldap_sasl_max_pool_size 整数 全球
authentication_ldap_sasl_server_host 全球
authentication_ldap_sasl_server_port 整数 全球
authentication_ldap_sasl_tls 布尔 全球
authentication_ldap_sasl_user_search_attr 全球
authentication_ldap_simple_auth_method_name 全球
authentication_ldap_simple_bind_base_dn 全球
authentication_ldap_simple_bind_root_dn 全球
authentication_ldap_simple_bind_root_pwd 全球
authentication_ldap_simple_ca_path 全球
authentication_ldap_simple_group_search_attr 全球
authentication_ldap_simple_group_search_filter 全球
authentication_ldap_simple_init_pool_size 整数 全球
authentication_ldap_simple_log_status 整数 全球
authentication_ldap_simple_max_pool_size 整数 全球
authentication_ldap_simple_server_host 全球
authentication_ldap_simple_server_port 整数 全球
authentication_ldap_simple_tls 布尔 全球
authentication_ldap_simple_user_search_attr 全球
auto_increment_increment 整数
auto_increment_offset 整数
自动提交 布尔
automatic_sp_privileges 布尔 全球
avoid_temporal_upgrade 布尔 全球
big_tables 布尔
binlog_cache_size 整数 全球
binlog_checksum 全球
binlog_direct_non_transactional_updates 布尔
binlog_encryption 布尔 全球
binlog_error_action 列举 全球
binlog_expire_logs_seconds 整数 全球
binlog_format 列举
binlog_group_commit_sync_delay 整数 全球
binlog_group_commit_sync_no_delay_count 整数 全球
binlog_max_flush_queue_time 整数 全球
binlog_order_commits 布尔 全球
binlog_row_image 列举
binlog_row_metadata 列举 全球
binlog_row_value_options
binlog_rows_query_log_events 布尔
binlog_stmt_cache_size 整数 全球
binlog_transaction_dependency_history_size 整数 全球
binlog_transaction_dependency_tracking 列举 全球
block_encryption_mode
bulk_insert_buffer_size 整数
character_set_client字符
是character_set_connection
character_set_database
character_set_filesystem
character_set_results
被character_set_server
check_proxy_users 布尔 全球
collat​​ion_connection是
collat​​ion_database查看
collat​​ion_server的
completion_type 列举
concurrent_insert 列举 全球
connect_timeout 整数 全球
connection_control_failed_connections_threshold 整数 全球
connection_control_max_connection_delay 整数 全球
connection_control_min_connection_delay 整数 全球
cte_max_recursion_depth 整数
调试
debug_sync 会议
default_collat​​ion_for_utf8mb4 列举
default_password_lifetime 整数 全球
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 整数 全球
div_precision_increment 整数
dragnet.log_error_filter_rules 全球
end_markers_in_json 布尔
enforce_gtid_consistency 列举 全球
enforce_gtid_consistency 列举 全球
eq_range_index_dive_limit 整数
event_scheduler 列举 全球
expire_logs_days 整数 全球
explicit_defaults_for_timestamp 布尔
红晕 布尔 全球
flush_time 整数 全球
FOREIGN_KEY_CHECKS 布尔
ft_boolean_syntax 全球
general_log 布尔 全球
general_log_file 文件名 全球
group_concat_max_len 整数
group_replication_allow_local_disjoint_gtids_join 布尔 全球
group_replication_allow_local_lower_version_join 布尔 全球
group_replication_auto_increment_increment 整数 全球
group_replication_autorejoin_tries 整数 全球
group_replication_bootstrap_group 布尔 全球
group_replication_communication_debug_options 全球
group_replication_communication_max_message_size 整数 全球
group_replication_components_stop_timeout 整数 全球
group_replication_compression_threshold 整数 全球
group_replication_consistency 列举
group_replication_enforce_update_everywhere_checks 布尔 全球
group_replication_exit_state_action 列举 全球
group_replication_flow_control_applier_threshold 整数 全球
group_replication_flow_control_certifier_threshold 整数 全球
group_replication_flow_control_hold_percent 整数 全球
group_replication_flow_control_max_commit_quota 整数 全球
group_replication_flow_control_member_quota_percent 整数 全球
group_replication_flow_control_min_quota 整数 全球
group_replication_flow_control_min_recovery_quota 整数 全球
group_replication_flow_control_mode 列举 全球
group_replication_flow_control_period 整数 全球
group_replication_flow_control_release_percent 整数 全球
group_replication_force_members 全球
group_replication_group_name 全球
group_replication_group_seeds 全球
group_replication_gtid_assignment_block_size 整数 全球
group_replication_ip_whitelist 全球
group_replication_local_address 全球
group_replication_member_expel_timeout 整数 全球
group_replication_member_weight 整数 全球
group_replication_message_cache_size 整数 全球
group_replication_poll_spin_loops 整数 全球
group_replication_recovery_complete_at 列举 全球
group_replication_recovery_get_public_key 布尔 全球
group_replication_recovery_public_key_path 文件名 全球
group_replication_recovery_reconnect_interval 整数 全球
group_replication_recovery_retry_count 整数 全球
group_replication_recovery_ssl_ca 全球
group_replication_recovery_ssl_capath 全球
group_replication_recovery_ssl_cert 全球
group_replication_recovery_ssl_cipher 全球
group_replication_recovery_ssl_crl 文件名 全球
group_replication_recovery_ssl_crlpath 目录名称 全球
group_replication_recovery_ssl_key 全球
group_replication_recovery_ssl_verify_server_cert 布尔 全球
group_replication_recovery_use_ssl 布尔 全球
group_replication_single_primary_mode 布尔 全球
group_replication_ssl_mode 列举 全球
group_replication_start_on_boot 布尔 全球
group_replication_transaction_size_limit 整数 全球
group_replication_unreachable_majority_timeout 整数 全球
gtid_executed_compression_period 整数 全球
gtid_mode 列举 全球
gtid_mode 列举 全球
gtid_next 列举 会议
gtid_purged 全球
histogram_generation_max_mem_size 整数
host_cache_size 整数 全球
身分 整数 会议
immediate_server_version 整数 会议
information_schema_stats_expiry 整数
init_connect 全球
init_slave 全球
innodb_adaptive_flushing 布尔 全球
innodb_adaptive_flushing_lwm 整数 全球
innodb_adaptive_hash_index 布尔 全球
innodb_adaptive_max_sleep_delay 整数 全球
innodb_api_bk_commit_interval 整数 全球
innodb_api_trx_level 整数 全球
innodb_autoextend_increment 整数 全球
innodb_background_drop_list_empty 布尔 全球
innodb_buffer_pool_dump_at_shutdown 布尔 全球
innodb_buffer_pool_dump_now 布尔 全球
innodb_buffer_pool_dump_pct 整数 全球
innodb_buffer_pool_filename 文件名 全球
innodb_buffer_pool_in_core_file 布尔 全球
innodb_buffer_pool_load_abort 布尔 全球
innodb_buffer_pool_load_now 布尔 全球
innodb_buffer_pool_size 整数 全球
innodb_change_buffer_max_size 整数 全球
innodb_change_buffering 列举 全球
innodb_change_buffering_debug 整数 全球
innodb_checkpoint_disabled 布尔 全球
innodb_checksum_algorithm 列举 全球
innodb_cmp_per_index_enabled 布尔 全球
innodb_commit_concurrency 整数 全球
innodb_compress_debug 列举 全球
innodb_compression_failure_threshold_pct 整数 全球
innodb_compression_level 整数 全球
innodb_compression_pad_pct_max 整数 全球
innodb_concurrency_tickets 整数 全球
innodb_ddl_log_crash_reset_debug 布尔 全球
innodb_deadlock_detect 布尔 全球
innodb_default_row_format 列举 全球
innodb_disable_sort_file_cache 布尔 全球
innodb_fast_shutdown 整数 全球
innodb_fil_make_page_dirty_debug 整数 全球
innodb_file_per_table 布尔 全球
innodb_fill_factor 整数 全球
innodb_flush_log_at_timeout 整数 全球
的innodb_flush_log_at_trx_commit 列举 全球
innodb_flush_neighbors 列举 全球
innodb_flush_sync 布尔 全球
innodb_flushing_avg_loops 整数 全球
innodb_fsync_threshold 整数 全球
innodb_ft_aux_table 全球
innodb_ft_enable_diag_print 布尔 全球
innodb_ft_enable_stopword 布尔
innodb_ft_num_word_optimize 整数 全球
innodb_ft_result_cache_limit 整数 全球
innodb_ft_server_stopword_table 全球
innodb_ft_user_stopword_table
innodb_io_capacity 整数 全球
innodb_io_capacity_max 整数 全球
innodb_limit_optimistic_insert_debug 整数 全球
innodb_lock_wait_timeout 整数
innodb_log_buffer_size 整数 全球
innodb_log_checkpoint_fuzzy_now 布尔 全球
innodb_log_checkpoint_now 布尔 全球
innodb_log_checksums 布尔 全球
innodb_log_compressed_pa​​ges 布尔 全球
innodb_log_spin_cpu_abs_lwm 整数 全球
innodb_log_spin_cpu_pct_hwm 整数 全球
innodb_log_wait_for_flush_spin_hwm 整数 全球
innodb_log_write_ahead_size 整数 全球
innodb_lru_scan_depth 整数 全球
innodb_max_dirty_pages_pct 数字 全球
innodb_max_dirty_pages_pct_lwm 数字 全球
innodb_max_purge_lag 整数 全球
innodb_max_purge_lag_delay 整数 全球
innodb_max_undo_log_size 整数 全球
innodb_merge_threshold_set_all_debug 整数 全球
innodb_monitor_disable 全球
innodb_monitor_enable 全球
innodb_monitor_reset 列举 全球
innodb_monitor_reset_all 列举 全球
innodb_old_blocks_pct 整数 全球
innodb_old_blocks_time 整数 全球
innodb_online_alter_log_max_size 整数 全球
innodb_optimize_fulltext_only 布尔 全球
innodb_parallel_read_threads 整数 会议
innodb_print_all_deadlocks 布尔 全球
innodb_print_ddl_logs 布尔 全球
innodb_purge_batch_size 整数 全球
innodb_purge_rseg_truncate_frequency 整数 全球
innodb_random_read_ahead 布尔 全球
innodb_read_ahead_threshold 整数 全球
innodb_redo_log_encrypt 布尔 全球
innodb_replication_delay 整数 全球
innodb_rollback_segments 整数 全球
innodb_saved_pa​​ge_number_debug 整数 全球
innodb_spin_wait_delay 整数 全球
innodb_spin_wait_pause_multiplier 整数 全球
innodb_stats_auto_recalc 布尔 全球
innodb_stats_include_delete_marked 布尔 全球
innodb_stats_method 列举 全球
innodb_stats_on_metadata 布尔 全球
innodb_stats_persistent 布尔 全球
innodb_stats_persistent_sample_pages 整数 全球
innodb_stats_transient_sample_pages 整数 全球
innodb_status_output 布尔 全球
innodb_status_output_locks 布尔 全球
innodb_strict_mode 布尔
innodb_sync_spin_loops 整数 全球
innodb_table_locks 布尔
innodb_thread_concurrency参数 整数 全球
innodb_thread_sleep_delay 整数 全球
innodb_tmpdir 目录名称
innodb_trx_purge_view_update_only_debug 布尔 全球
innodb_trx_rseg_n_slots_debug 整数 全球
innodb_undo_log_encrypt 布尔 全球
innodb_undo_log_truncate 布尔 全球
innodb_undo_logs 整数 全球
innodb_undo_tablespaces 整数 全球
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 整数 全球
keyring_aws_cmk_id 全球
keyring_aws_region 列举 全球
keyring_encrypted_file_data 文件名 全球
keyring_encrypted_file_password 全球
keyring_file_data 文件名 全球
keyring_okv_conf_dir 目录名称 全球
keyring_operations 布尔 全球
LAST_INSERT_ID 整数 会议
LC_MESSAGES
lc_time_names
local_infile 布尔 全球
lock_wait_timeout 整数
log_bin_trust_function_creators 布尔 全球
log_builtin_as_identified_by_password 布尔 全球
log_error_filter_rules 全球
log_error_services 全球
log_error_suppression_list 全球
log_error_verbosity 整数 全球
log_output 全球
log_queries_not_using_indexes 布尔 全球
log_slow_admin_statements 布尔 全球
log_slow_extra 布尔 全球
log_slow_slave_statements 布尔 全球
log_statements_unsafe_for_binlog 布尔 全球
log_syslog 布尔 全球
log_syslog_facility 全球
log_syslog_include_pid 布尔 全球
log_syslog_tag 全球
log_throttle_queries_not_using_indexes 整数 全球
log_timestamps 列举 全球
log_warnings 整数 全球
long_query_time时间 数字
LOW_PRIORITY_UPDATES 布尔
mandatory_roles 全球
master_info_repository 全球
master_verify_checksum 布尔 全球
max_allowed_pa​​cket的 整数
max_binlog_cache_size 整数 全球
max_binlog_size 整数 全球
max_binlog_stmt_cache_size 整数 全球
max_connect_errors次 整数 全球
MAX_CONNECTIONS 整数 全球
max_delayed_threads 整数
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_relay_log_size 整数 全球
max_seeks_for_key 整数
max_sort_length个 整数
max_sp_recursion_depth 整数
max_tmp_tables 整数
MAX_USER_CONNECTIONS 整数
max_write_lock_count 整数 全球
min_examined_row_limit 整数
multi_range_count 整数
myisam_data_pointer_size 整数 全球
myisam_max_sort_file_size 整数 全球
myisam_repair_threads 整数
myisam_sort_buffer_size 整数
myisam_stats_method 列举
myisam_use_mmap 布尔 全球
mysql_firewall_mode 布尔 全球
mysql_firewall_trace 布尔 全球
mysql_native_password_proxy_users 布尔 全球
mysqlx_connect_timeout 整数 全球
mysqlx_document_id_unique_prefix 整数 全球
mysqlx_enable_hello_notice 布尔 全球
mysqlx_idle_worker_thread_timeout 整数 全球
mysqlx_interactive_timeout 整数 全球
mysqlx_max_allowed_pa​​cket 整数 全球
mysqlx_max_connections 整数 全球
mysqlx_min_worker_threads 整数 全球
mysqlx_read_timeout 整数 会议
mysqlx_wait_timeout 整数 会议
mysqlx_write_timeout 整数 会议
ndb_allow_copying_alter_table 布尔
ndb_autoincrement_prefetch_sz 整数
ndb_blob_read_batch_bytes 整数
ndb_blob_write_batch_bytes 整数
ndb_cache_check_time 整数 全球
ndb_clear_apply_status 布尔 全球
ndb_data_node_neighbour 整数 全球
ndb_default_column_format 列举 全球
ndb_default_column_format 列举 全球
ndb_deferred_constraints 整数
ndb_deferred_constraints 整数
ndb_distribution 列举 全球
ndb_distribution 列举 全球
ndb_eventbuffer_free_percent 整数 全球
ndb_eventbuffer_max_alloc 整数 全球
ndb_extra_logging 整数 全球
ndb_force_send 布尔
ndb_fully_replicated 布尔
ndb_index_stat_enable 布尔
ndb_index_stat_option
ndb_join_pushdown 布尔
ndb_log_bin 布尔
ndb_log_binlog_index 布尔 全球
ndb_log_empty_epochs 布尔 全球
ndb_log_empty_epochs 布尔 全球
ndb_log_empty_update 布尔 全球
ndb_log_empty_update 布尔 全球
ndb_log_exclusive_reads 布尔
ndb_log_exclusive_reads 布尔
ndb_log_update_as_write 布尔 全球
ndb_log_update_minimal 布尔 全球
ndb_log_updated_only 布尔 全球
ndb_metadata_check 布尔 全球
ndb_metadata_check_interval 整数 全球
ndb_optimization_delay 整数 全球
ndb_read_backup 布尔 全球
ndb_recv_thread_activation_threshold 整数 全球
ndb_recv_thread_cpu_mask 位图 全球
ndb_report_thresh_binlog_epoch_slip 整数 全球
ndb_report_thresh_binlog_mem_usage 整数 全球
ndb_row_checksum 整数
ndb_show_foreign_key_mock_tables 布尔 全球
ndb_slave_conflict_role 列举 全球
ndb_table_no_logging 布尔 会议
ndb_table_temporary 布尔 会议
ndb_use_exact_count 布尔
ndb_use_transactions 布尔
ndbinfo_max_bytes 整数
ndbinfo_max_rows 整数
ndbinfo_offline 布尔 全球
ndbinfo_show_hidden 布尔
ndbinfo_table_prefix
的net_buffer_length 整数
net_read_timeout 整数
net_retry_count 整数
net_write_timeout 整数
布尔
离线模式 布尔 全球
old_alter_table 布尔
old_passwords 列举
optimizer_prune_level 整数
optimizer_search_depth 整数
optimizer_switch
optimizer_trace
optimizer_trace_features
optimizer_trace_limit 整数
optimizer_trace_max_mem_size 整数
optimizer_trace_offset 整数
original_commit_timestamp 数字 会议
original_server_version 整数 会议
parser_max_mem_size 整数
partial_revokes 布尔 全球
PASSWORD_HISTORY 整数 全球
password_require_current 布尔 全球
password_reuse_interval 整数 全球
performance_schema_max_digest_sample_age 整数 全球
preload_buffer_size 整数
print_identified_with_as_hex 布尔
剖析 布尔
profiling_history_size 整数
pseudo_slave_mode 整数 会议
pseudo_thread_id 整数 会议
query_alloc_block_size 整数
query_cache_limit 整数 全球
query_cache_min_res_unit变量 整数 全球
query_cache_size变量 整数 全球
query_cache_type的 列举
query_cache_wlock_invalidate 布尔
query_prealloc_size 整数
rand_seed1 整数 会议
rand_seed2 整数 会议
range_alloc_block_size 整数
range_optimizer_max_mem_size 整数
rbr_exec_mode 列举
read_buffer_size 整数
只读 布尔 全球
read_rnd_buffer_size 整数
regexp_stack_limit 整数 全球
regexp_time_limit 整数 全球
relay_log_info_repository 全球
relay_log_purge 布尔 全球
require_secure_transport 布尔 全球
resultset_metadata 列举 会议
rewriter_enabled 布尔 全球
rewriter_verbose 整数 全球
rpl_read_size 整数 全球
rpl_semi_sync_master_enabled 布尔 全球
rpl_semi_sync_master_timeout 整数 全球
rpl_semi_sync_master_trace_level 整数 全球
rpl_semi_sync_master_wait_for_slave_count 整数 全球
rpl_semi_sync_master_wait_no_slave 布尔 全球
rpl_semi_sync_master_wait_point 列举 全球
rpl_semi_sync_slave_enabled 布尔 全球
rpl_semi_sync_slave_trace_level 整数 全球
rpl_stop_slave_timeout 整数 全球
schema_definition_cache 整数 全球
secondary_engine_cost_threshold 数字 会议
secure_auth 布尔 全球
SERVER_ID 整数 全球
session_track_gtids 列举
session_track_schema 布尔
session_track_state_change 布尔
session_track_system_variables
session_track_transaction_info 列举
sha256_password_proxy_users 布尔 全球
show_compatibility_56 布尔 全球
show_create_table_verbosity 布尔
show_old_temporals 布尔
slave_allow_batching 布尔 全球
slave_checkpoint_group 整数 全球
slave_checkpoint_period 整数 全球
slave_compressed_protocol 布尔 全球
slave_exec_mode 列举 全球
slave_max_allowed_pa​​cket 整数 全球
slave_net_timeout 整数 全球
slave_parallel_type 列举 全球
slave_parallel_workers 整数 全球
slave_pending_jobs_size_max 整数 全球
slave_preserve_commit_order 布尔 全球
slave_rows_search_algorithms 全球
slave_sql_verify_checksum 布尔 全球
slave_transaction_retries 整数 全球
slow_launch_time 整数 全球
slow_query_log 布尔 全球
slow_query_log_file 文件名 全球
sort_buffer_size的值 整数
sql_auto_is_null 布尔
SQL_BIG_SELECTS 布尔
SQL_BUFFER_RESULT 布尔
SQL_LOG_BIN 布尔 会议
sql_log_off 布尔
的sql_mode
sql_notes 布尔
sql_quote_show_create 布尔
sql_require_primary_key 布尔
sql_safe_updates 布尔
SQL_SELECT_LIMIT 整数
SQL_SLAVE_SKIP_COUNTER 整数 全球
sql_warnings 布尔
ssl_ca 文件名 全球
ssl_capath 目录名称 全球
ssl_cert 文件名 全球
ssl_cipher 全球
ssl_crl 文件名 全球
ssl_crlpath 目录名称 全球
ssl_fips_mode 列举 全球
ssl_key 文件名 全球
stored_program_cache 整数 全球
stored_program_definition_cache 整数 全球
super_read_only 布尔 全球
sync_binlog 整数 全球
sync_master_info 整数 全球
sync_relay_log 整数 全球
sync_relay_log_info 整数 全球
syseventlog.facility 全球
syseventlog.include_pid 布尔 全球
syseventlog.tag 全球
table_definition_cache 整数 全球
table_encryption_privilege_check 布尔 全球
table_open_cache 整数 全球
tablespace_definition_cache 整数 全球
temptable_max_ram 整数 全球
temptable_use_mmap 布尔 全球
thread_cache_size的 整数 全球
thread_pool_high_priority_connection 整数
thread_pool_max_unused_threads 整数 全球
thread_pool_prio_kickup_timer 整数
thread_pool_stall_limit 整数 全球
时区
时间戳 数字 会议
tls_ciphersuites 全球
tls_version 全球
tmp_table_size的 整数
transaction_alloc_block_size 整数
transaction_allow_batching 布尔 会议
transaction_isolation 列举
transaction_prealloc_size 整数
transaction_read_only 布尔
transaction_write_set_extraction 列举
TX_ISOLATION 列举
tx_read_only 布尔
UNIQUE_CHECKS 布尔
updatable_views_with_limit 布尔
use_secondary_engine 列举 会议
validate_password_check_user_name 布尔 全球
validate_password_dictionary_file 文件名 全球
validate_password_length 整数 全球
validate_password_mixed_case_count 整数 全球
validate_password_number_count 整数 全球
validate_password_policy 列举 全球
validate_password_special_char_count 整数 全球
validate_password.check_user_name 布尔 全球
validate_password.dictionary_file 文件名 全球
validate_password.length 整数 全球
validate_password.mixed_case_count 整数 全球
validate_password.number_count 整数 全球
validate_password.policy 列举 全球
validate_password.special_char_count 整数 全球
version_tokens_session
WAIT_TIMEOUT 整数
windowing_use_high_precision 布尔

5.1.9.3持久系统变量

MySQL服务器维护配置其操作的系统变量。 系统变量可以具有影响整个服务器操作的全局值,影响当前会话的会话值,或两者。 许多系统变量是动态的,可以在运行时使用该 SET 语句 更改, 以影响当前服务器实例的操作。 SET 还可以用于将某些全局系统变量持久保存到 mysqld-auto.cnf 数据目录中 文件,以影响后续启动的服务器操作。 RESET PERSIST 从中删除持久设置 mysqld-auto.cnf

以下讨论描述了持久化系统变量的各个方面:

持久系统变量概述

在运行时持久保存全局系统变量的功能使服务器配置能够在服务器启动时保持不变。 尽管可以在启动时从 my.cnf 选项文件 设置许多系统变量 ,或者在运行时使用该 SET 语句 设置许多系统变量 ,但配置服务器的这些方法要么需要登录访问服务器主机,要么不提供在运行时持久配置服务器的功能。远程:

  • 修改选项文件需要直接访问该文件,这需要登录访问MySQL服务器主机。 这并不总是方便的。

  • 修改系统变量 SET GLOBAL 是一种运行时功能,可以从本地或远程主机运行的客户端完成,但这些更改仅影响当前运行的服务器实例。 这些设置不是持久性的,不会延续到后续服务器启动。

为了增加服务器配置的管理功能,超出了通过编辑选项文件或使用可实现的功能 SET GLOBAL ,MySQL提供了 SET 语法 变体, 将系统变量设置保存到 mysqld-auto.cnf 数据目录中 的文件名为 file。 例子:

SET PERSIST max_connections = 1000;
SET @@ PERSIST.max_connections = 1000;

SET PERSIST_ONLY back_log = 100;
SET @@ PERSIST_ONLY.back_log = 100;

MySQL还提供了一个 RESET PERSIST 从中删除持久化系统变量 语句 mysqld-auto.cnf

通过持久化系统变量执行的服务器配置具有以下特征:

  • 持久设置是在运行时进行的。

  • 持久设置是永久性的。 它们适用于服务器重启。

  • 可以从本地客户端或从远程主机连接的客户端进行持久设置。 这提供了从中央客户端主机远程配置多个MySQL服务器的便利。

  • 要保留系统变量,您无需具有对MySQL服务器主机的登录访问权限或对选项文件的文件系统访问权限。 使用MySQL权限系统控制持久设置的能力。 请参见 第5.1.9.1节“系统变量权限”

  • 具有足够权限的管理员可以通过保留系统变量来重新配置服务器,然后通过执行 RESTART 语句 使服务器立即使用更改的设置

  • 持久设置提供有关错误的即时反馈。 手动输入的设置中的错误可能要到很晚才发现。 SET 持久化系统变量的语句可以避免设置格式错误的可能性,因为具有语法错误的设置不会成功,也不会更改服务器配置。

持久化系统变量的语法

这些 SET 语法选项可用于持久化系统变量:

  • 要将全局系统变量持久保存到 mysqld-auto.cnf 数据目录中 选项文件,请在变量名前面加上 PERSIST 关键字或 @@PERSIST. 限定符:

    SET PERSIST max_connections = 1000;
    SET @@ PERSIST.max_connections = 1000;
    

    比如 SET GLOBAL SET PERSIST 设置全局变量运行时值,但也将变量设置写入 mysqld-auto.cnf 文件(如果有的话,替换任何现有的变量设置)。

  • 要在 mysqld-auto.cnf 不设置全局变量运行时值的情况下将 全局系统变量保留到 文件,请在变量名前面加上 PERSIST_ONLY 关键字或 @@PERSIST_ONLY. 限定符:

    SET PERSIST_ONLY back_log = 1000;
    SET @@ PERSIST_ONLY.back_log = 1000;
    

    比如 PERSIST PERSIST_ONLY 将变量设置写入 mysqld-auto.cnf 但是,与之不同 PERSIST PERSIST_ONLY 不会修改全局变量运行时值。 PERSIST_ONLY 适用于配置只能在服务器启动时设置的只读系统变量。

有关更多信息 SET ,请参见 第13.7.5.1节“变量赋值的SET语法”

这些 RESET PERSIST 语法选项可用于删除持久化的系统变量:

  • 要从中删除所有持久变量 mysqld-auto.cnf ,请在 RESET PERSIST 不命名任何系统变量的情况下 使用

    重置持有人;
    
  • 要从中删除特定的持久变量 mysqld-auto.cnf ,请在语句中对其进行命名:

    重置持有人system_var_name;
    

    这包括插件系统变量,即使当前未安装插件也是如此。 如果文件中不存在该变量,则会发生错误。

  • 要从文件中删除特定的持久变量 mysqld-auto.cnf ,但如果文件中不存在该变量,则产生警告而不是错误 IF EXISTS ,请在以前的语法中 添加一个 子句:

    如果存在,重置持续system_var_name;
    

有关更多信息 RESET PERSIST ,请参见 第13.7.7.7节“重置PERSIST语法”

使用 SET 一个全局系统变量坚持到的值 DEFAULT 或者它的字面默认值赋给变量的默认值,并增加了对变量的设置 mysqld-auto.cnf 要从文件中删除变量,请使用 RESET PERSIST

某些系统变量无法持久化。 请参见 第5.1.9.4节“不可容忍且持久限制的系统变量”

如果在 SET 执行语句 时安装了插件,则可以持久保存由插件实现的系统变量 如果仍然安装了插件,则持久插件变量的分配将对后续服务器重新启动生效。 如果不再安装插件,则在服务器读取 mysqld-auto.cnf 文件 时,插件变量将不存在 在这种情况下,服务器会向错误日志写入警告并继续:

目前未知的变量' var_name'
从持久化的配置文件中读取
获取有关持久系统变量的信息

性能模式 persisted_variables 表提供了 mysqld-auto.cnf 文件 的SQL接口 ,允许在运行时使用 SELECT 语句 检查其内容 请参见 第26.12.13.1节“性能模式persisted_variables表”

性能模式 variables_info 表包含显示最近设置每个系统变量的用户的时间和位置的信息。 请参见 第26.12.13.2节“性能模式variables_info表”

RESET PERSIST persisted_variables 因为表内容对应于 mysqld-auto.cnf 文件 的内容,所以 会影响 表的内容 另一方面,因为 RESET PERSIST 不更改变量值,所以在 variables_info 重新启动服务器之前 它对 的内容没有影响

mysqld-auto.cnf文件的格式和服务器处理

mysqld-auto.cnf 文件使用这样的 JSON 格式(为了便于阅读,略微重新格式化):

{
  “版本”:1,
  “mysql_server”:{
    “max_connections”:{
      “价值”:“152”,
      “元数据”:{
        “时间戳”:1.519921356e + 15,
        “用户”:“root”,
        “主持人”:“localhost”
      }
    },
    “transaction_isolation”:{
      “价值”:“读书承诺”,
      “元数据”:{
        “时间戳”:1.519921553e + 15,
        “用户”:“root”,
        “主持人”:“localhost”
      }
    },
    “mysql_server_static_options”:{
      “innodb_api_enable_mdl”:{
        “价值”:“0”,
        “元数据”:{
          “时间戳”:1.519921573e + 15,
          “用户”:“root”,
          “主持人”:“localhost”
        }
      },
      “log_slave_updates”:{
        “价值”:“1”,
        “元数据”:{
          “时间戳”:1.519921582e + 15,
          “用户”:“root”,
          “主持人”:“localhost”
        }
      }
    }
  }
}

启动时,服务器会 mysqld-auto.cnf 在所有其他选项文件之后 处理该 文件(请参见 第4.2.2.2节“使用选项文件” )。 服务器处理文件内容如下:

  • 如果 persisted_globals_load 禁用 系统变量,则服务器将忽略该 mysqld-auto.cnf 文件。

  • SET PERSIST_ONLY "mysql_server_static_options" 部分中 显示 持久使用的只读变量 此部分中存在的所有变量都附加到命令行,并使用其他命令行选项进行处理。

  • 所有剩余的持久变量都是通过 SET GLOBAL 稍后在服务器开始侦听客户端连接之前 执行等效的 语句 来设置的 因此,这些设置直到启动过程的后期才会生效,这可能不适用于某些系统变量。 最好设置这些变量 my.cnf 而不是in mysqld-auto.cnf

mysqld-auto.cnf 文件 管理 应留给服务器。 文件的操作应仅使用 SET RESET PERSIST 语句 执行 ,而不是手动执行:

  • 删除文件会导致下次服务器启动时丢失所有持久设置。 (如果您的目的是在没有这些设置的情况下重新配置服务器,则允许这样做。)要删除文件中的所有设置而不删除文件本身,请使用以下语句:

    重置持有人;
    
  • 手动更改文件可能会导致服务器启动时出现解析错误。 在这种情况下,服务器报告错误并退出。 如果出现此问题,请在 persisted_globals_load 禁用系统变量或使用该 --no-defaults 选项的 情况下启动服务器 或者,删除该 mysqld-auto.cnf 文件。 但是,如前所述,删除此文件会导致丢失所有持久设置。

5.1.9.4不可容忍和持久限制的系统变量

SET PERSIST 并将 SET PERSIST_ONLY 全局系统变量保持为 mysqld-auto.cnf 数据目录中 选项文件(请参见 第13.7.5.1节“变量赋值的SET语法” )。 但是,并非所有系统变量都可以保留,或者只能在某些限制条件下保留。 以下是系统变量可能无法容忍或持久限制的一些原因:

  • 会话系统变量无法持久化。 在服务器启动时无法设置会话变量,因此没有理由坚持它们。

  • 全局系统变量可能涉及敏感数据,因此只能由可直接访问服务器主机的用户设置。

  • 全局系统变量可能是只读的(即,仅由服务器设置)。 在这种情况下,无论是在服务器启动时还是在运行时,都无法由用户设置。

  • 全局系统变量可能仅供内部使用。

在任何情况下都不能保留不可容许的系统变量。 从MySQL 8.0.14开始,持久限制的系统变量可以持久化 SET PERSIST_ONLY ,但仅限于满足以下条件的用户:

例如,它 protocol_version 是只读的并且仅由服务器设置,因此在任何情况下都不能保留。 另一方面, bind_address 是持久限制的,因此可以由满足前述条件的用户设置。

以下系统变量是不可分辨的。 此列表可能会随着持续发展而变化。

audit_log_current_session
audit_log_filter_id
character_set_system
core_file
have_statement_timeout
have_symlink
主机名
innodb_version
large_files_support
large_page_size
执照
locked_in_memory
log_bin
log_bin_basename
log_bin_index
lower_case_file_system
ndb_version
ndb_version_string
persist_only_admin_x509_subject
persisted_globals_load
PROTOCOL_VERSION
relay_log_basename
relay_log_index
server_uuid
skip_external_locking
system_time_zone
version_comment
version_compile_machine
version_compile_os
version_compile_zlib

持久限制的系统变量是只读的,可以在命令行或选项文件中设置,而不是 persist_only_admin_x509_subject persisted_globals_load 此列表可能会随着持续发展而变化。

audit_log_file
audit_log_format
auto_generate_certs
BASEDIR
bind_address
caching_sha2_password_auto_generate_rsa_keys
caching_sha2_password_private_key_path
caching_sha2_password_public_key_path
character_sets_dir
daemon_memcached_engine_lib_name
daemon_memcached_engine_lib_path
daemon_memcached_option
DATADIR
default_authentication_plugin
ft_stopword_file
init_file
innodb_buffer_pool_load_at_startup
innodb_data_file_path中
innodb_data_home_dir
innodb_dedicated_server
innodb_directories
innodb_force_load_corrupted
innodb_log_group_home_dir
innodb_page_size
innodb_read_only
innodb_temp_data_file_path
innodb_temp_tablespaces_dir
innodb_undo_directory
innodb_undo_tablespaces
keyring_encrypted_file_data
keyring_encrypted_file_password
lc_messages_dir
的log_error
mecab_rc_file
named_pipe
pid_file
PLUGIN_DIR
港口
relay_log
relay_log_info_file
secure_file_priv
sha256_password_auto_generate_rsa_keys
sha256_password_private_key_path
sha256_password_public_key_path
shared_memory
shared_memory_base_name
skip_networking
slave_load_tmpdir
插座
ssl_ca
ssl_capath
ssl_cert
ssl_crl
ssl_crlpath
ssl_key
TMPDIR
version_tokens_session_number

要配置服务器以启用持久限制的系统变量,请使用以下过程:

  1. 确保将MySQL配置为支持加密连接。 请参见 第6.3.1节“配置MySQL以使用加密连接”

  2. 指定SSL证书X.509主题值,表示持久限制系统变量的持久性,并生成具有该主题的证书。 请参见 第6.3.3节“创建SSL和RSA证书和密钥”

  3. 启动服务器并将其 persist_only_admin_x509_subject 设置为指定的主题值。 例如,将这些行放在服务器 my.cnf 文件中:

    的[mysqld]
    persist_only_admin_x509_subject =“ subject-value

    Subject值的格式与用于的格式相同 CREATE USER ... REQUIRE SUBJECT 请参见 第13.7.1.3节“创建用户语法”

    您必须直接在MySQL服务器主机上执行此步骤,因为 persist_only_admin_x509_subject 它本身无法在运行时保留。

  4. 重启服务器。

  5. 将具有指定Subject值的SSL证书分发给允许持久限制系统变量的用户。

假设这 myclient-cert.pem 是可以持久保留受限制的系统变量的客户端使用的SSL证书。 使用 openssl 命令 显示证书内容

外壳> openssl x509 -text -in myclient-cert.pem
证书:
    数据:
        版本:3(0x2)
        序列号:2(0x2)
    签名算法:md5WithRSAEncryption
        发行人:C = US,ST = IL,L =芝加哥,O = MyOrg,OU = CA,CN = MyCN
        合法性
            不是之前:格林尼治标准时间10月18日17:03:03 2018 GMT
            不是之后:格林尼治标准时间10月15日17:03:03 2028
        主题:C = US,ST = IL,L =芝加哥,O = MyOrg,OU =客户,CN = MyCN
...

OpenSSL的 输出显示证书主题值是:

C = US,ST = IL,L =芝加哥,O = MyOrg,OU =客户,CN = MyCN

要指定MySQL的Subject,请使用以下格式:

/ C = US / ST = IL / L =芝加哥/ O = MYORG / OU =客户端/ CN = MYCN

my.cnf 使用Subject值 配置服务器 文件:

的[mysqld]
persist_only_admin_x509_subject = “/ C = US / ST = IL / L =芝加哥/ O = MYORG / OU =客户端/ CN = MYCN”

重新启动服务器,以使新配置生效。

将SSL证书(以及任何其他关联的SSL文件)分发给相应的用户。 然后,这样的用户使用证书和建立加密连接所需的任何其他SSL选项连接到服务器。

要使用X.509,客户端必须指定 要连接的选项 --ssl-key --ssl-cert 选项。 建议但不要求 --ssl-ca 也指定,以便验证服务器提供的公共证书。 例如:

外壳> mysql --ssl-key=myclient-key.pem --ssl-cert=myclient-cert.pem --ssl-ca=mycacert.pem

假设用户有足够的权限使用 SET PERSIST_ONLY ,可以持久化受限制的系统变量,如下所示:

MySQL的> SET PERSIST_ONLY socket = '/tmp/mysql.sock';
查询正常,0行受影响(0.00秒)

如果服务器未配置为启用持久性受限制的系统变量,或者用户不满足该功能所需的条件,则会发生错误:

MySQL的> SET PERSIST_ONLY socket = '/tmp/mysql.sock';
错误1238(HY000):变量'socket'是非持久只读变量

5.1.9.5结构化系统变量

结构化变量在两个方面与常规系统变量不同:

  • 它的值是一个结构,其中的组件指定被认为密切相关的服务器参数。

  • 可能存在给定类型的结构化变量的若干实例。 每个名称都有不同的名称,并指向服务器维护的不同资源。

MySQL支持一种结构化变量类型,它指定控制密钥缓存操作的参数。 密钥缓存结构变量具有以下组件:

本节介绍引用结构化变量的语法。 密钥缓存变量用于语法示例,但有关密钥缓存如何操作的具体详细信息,请参见 第8.10.2节“MyISAM密钥缓存”

要引用结构化变量实例的组件,可以使用 instance_name.component_name 格式 的复合名称 例子:

hot_cache.key_buffer_size
hot_cache.key_cache_block_size
cold_cache.key_cache_block_size

对于每个结构化系统变量, default 始终预定义 名称为的实例 如果引用没有任何实例名称的结构化变量的组件, default 则使用 实例。 因此, default.key_buffer_size key_buffer_size 这两个指代相同的系统变量。

结构化变量实例和组件遵循以下命名规则:

  • 对于给定类型的结构化变量,每个实例必须具有 该类型的变量中 唯一的名称 但是,实例名称 结构化变量类型中 不必是唯一的 例如,每个结构化变量都有一个名为的实例 default ,因此 default 在变量类型中不是唯一的。

  • 每个结构化变量类型的组件名称在所有系统变量名称中必须是唯一的。 如果不是这样(也就是说,如果两种不同类型的结构化变量可以共享组件成员名称),则不清楚哪个默认结构化变量用于引用不受实例名称限定的成员名称。

  • 如果结构化变量实例名称不合法作为不带引号的标识符,请使用反引号将其称为带引号的标识符。 例如, hot-cache 不合法,但是 `hot-cache`

  • global ,, session local 不是合法的实例名称。 这避免了与符号的冲突,例如 引用非结构化系统变量。 @@GLOBAL.var_name

目前,前两个规则不可能被违反,因为唯一的结构化变量类型是密钥缓存的类型。 如果将来创建其他类型的结构化变量,这些规则将具有更大的意义。

除了一个例外,您可以在可能出现简单变量名的任何上下文中使用复合名称来引用结构化变量组件。 例如,您可以使用命令行选项为结构化变量赋值:

外壳> mysqld --hot_cache.key_buffer_size=64K

在选项文件中,使用以下语法:

的[mysqld]
hot_cache.key_buffer_size = 64K

如果使用此选项启动服务器, hot_cache 除了默认密钥缓存(默认大小为8MB)之外 ,它还会创建一个 大小为64KB的密钥缓存。

假设您按如下方式启动服务器:

外壳> mysqld --key_buffer_size=256K \
         --extra_cache.key_buffer_size=128K \
         --extra_cache.key_cache_block_size=2048

在这种情况下,服务器将默认密钥缓存的大小设置为256KB。 (您也可以编写 --default.key_buffer_size=256K 。)此外,服务器还会创建一个名为 extra_cache 128KB 的第二个密钥缓存 ,缓存表索引块的块缓冲区大小设置为2048字节。

以下示例使用三个不同的密钥缓存启动服务器,这些密钥缓存的大小为3:1:1:

外壳> mysqld --key_buffer_size=6M \
         --hot_cache.key_buffer_size=2M \
         --cold_cache.key_buffer_size=2M

也可以在运行时设置和检索结构化变量值。 例如,要设置名为 hot_cache 10MB 的密钥缓存 ,请使用以下任一语句:

mysql> SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql>SET @@GLOBAL.hot_cache.key_buffer_size = 10*1024*1024;

要检索缓存大小,请执行以下操作:

MySQL的> SELECT @@GLOBAL.hot_cache.key_buffer_size;

但是,以下声明不起作用。 该变量不会被解释为复合名称,而是作为 LIKE 模式匹配操作 的简单字符串

MySQL的> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';

这是能够在任何可能出现简单变量名称的地方使用结构化变量名称的例外。

5.1.10服务器状态变量

MySQL服务器维护许多状态变量,提供有关其操作的信息。 您可以使用该 SHOW [GLOBAL | SESSION] STATUS 语句 查看这些变量及其值 (请参见 第13.7.6.35节“SHOW STATUS语法” )。 可选 GLOBAL 关键字聚合所有连接上 SESSION 的值 ,并 显示当前连接的值。

MySQL的> SHOW GLOBAL STATUS;
+ ----------------------------------- + ------------ +
| Variable_name | 价值|
+ ----------------------------------- + ------------ +
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Bytes_received | 155372598 |
| Bytes_sent | 1176560426 |
...
| 连接| 30023 |
| Created_tmp_disk_tables | 0 |
| Created_tmp_files | 3 |
| Created_tmp_tables | 2 |
...
| Threads_created | 217 |
| Threads_running | 88 |
| 正常运行时间| 1389872 |
+ ----------------------------------- + ------------ +

FLUSH STATUS 语句 将许多状态变量重置为0

本节提供每个状态变量的说明。 有关状态变量摘要,请参见 第5.1.6节“服务器状态变量参考”

状态变量具有以下含义。

5.1.11服务器SQL模式

MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于 sql_mode 系统变量 的值 DBA可以设置全局SQL模式以匹配站点服务器操作要求,并且每个应用程序可以将其会话SQL模式设置为其自己的要求。

模式会影响MySQL支持的SQL语法以及它执行的数据验证检查。 这使得在不同环境中使用MySQL以及将MySQL与其他数据库服务器一起使用变得更加容易。

有关MySQL中服务器SQL模式的 常见问题的 答案,请参见 第A.3节“MySQL 8.0 FAQ:服务器SQL模式”

使用 InnoDB 表时,还要考虑 innodb_strict_mode 系统变量。 它可以对 InnoDB 进行额外的错误检查

设置SQL模式

在MySQL 8.0的默认SQL模式包括以下模式: ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO ,和 NO_ENGINE_SUBSTITUTION

要在服务器启动时设置SQL模式,请 在命令行上或 (Unix操作系统)或 (Windows) 等选项文件中 使用该 选项 是逗号分隔的不同模式的列表。 要显式清除SQL模式,请 在命令行或 选项文件 中将其设置为空字符串 --sql-mode="modes" sql-mode="modes" my.cnf my.ini modes --sql-mode="" sql-mode=""

注意

MySQL安装程序可以在安装过程中配置SQL模式。

如果SQL模式与默认模式或您期望的模式不同,请检查服务器在启动时读取的选项文件中的设置。

要在运行时更改SQL模式,请 sql_mode 使用以下 SET 语句 设置全局或会话 系统变量

SET GLOBAL sql_mode =' modes';
SET SESSION sql_mode =' modes';

设置 GLOBAL 变量需要 SYSTEM_VARIABLES_ADMIN SUPER 特权,并影响从那时起连接的所有客户端的操作。 设置 SESSION 变量仅影响当前客户端。 每个客户端都可以随时更改其会话 sql_mode 值。

要确定当前的全局或会话 sql_mode 设置,请选择其值:

SELECT @@ GLOBAL.sql_mode;
SELECT @@ SESSION.sql_mode;
重要

SQL模式和用户定义的分区。  在创建数据并将数据插入分区表后更改服务器SQL模式可能会导致此类表的行为发生重大更改,并可能导致数据丢失或损坏。 强烈建议您在创建使用用户定义分区的表后永远不要更改SQL模式。

复制分区表时,主服务器和从服务器上的不同SQL模式也会导致问题。 为获得最佳结果,应始终在主服务器和从服务器上使用相同的服务器SQL模式。

有关更多信息,请参见 第23.6节“分区的限制和限制”

最重要的SQL模式

最重要的 sql_mode 价值可能是这些:

  • ANSI

    此模式更改语法和行为以更符合标准SQL。 它是 本节末尾列出 的特殊 组合模式 之一。

  • STRICT_TRANS_TABLES

    如果无法将值插入事务表中,则中止该语句。 对于非事务性表,如果值出现在单行语句或多行语句的第一行中,则中止该语句。 更多细节将在本节后面给出。

  • TRADITIONAL

    使MySQL的行为类似于 传统的 SQL数据库系统。 向列中插入不正确的值时 ,此模式的简单描述是 给出错误而不是警告 它是 本节末尾列出 的特殊 组合模式 之一。

    注意

    随着 TRADITIONAL 模式允许, INSERT 或者 UPDATE 只要发生错误中止。 如果您使用的是非事务性存储引擎,则可能不是您想要的,因为在错误之前进行的数据更改可能无法回滚,从而导致 部分完成 更新。

当本手册涉及 严格模式 ”时 ,表示具有一个或两个 STRICT_TRANS_TABLES STRICT_ALL_TABLES 启用 的模式

SQL模式的完整列表

以下列表描述了所有支持的SQL模式:

  • ALLOW_INVALID_DATES

    不要对日期进行全面检查。 仅检查月份是否在1到12的范围内,并且日期在1到31的范围内。这对于在三个不同字段中获取年,月和日并准确存储用户的Web应用程序非常有用。插入,没有日期验证。 此模式适用于 DATE DATETIME 列。 它不应用 TIMESTAMP 列,它始终需要有效日期。

    ALLOW_INVALID_DATES 启用,服务器需要月份和日期值是合法的,而不是仅仅在范围为1〜12和1〜31,分别。 禁用严格模式后,将生成无效日期,例如 '2004-04-31' 转换为 '0000-00-00' 和警告。 启用严格模式后,无效日期会生成错误。 要允许此类日期,请启用 ALLOW_INVALID_DATES

  • ANSI_QUOTES

    治疗 " 作为标识符引号字符(如 ` 引号字符),而不是作为一个字符串引号字符。 您仍然可以使用 ` 此模式启用引用标识符。 ANSI_QUOTES 启用,则不能使用双引号,因为它们被解释为标识符引用文字字符串。

  • ERROR_FOR_DIVISION_BY_ZERO

    ERROR_FOR_DIVISION_BY_ZERO 模式影响除零处理,包括 对于数据更改操作( ),其效果还取决于是否启用了严格的SQL模式。 MOD(N,0) INSERT UPDATE

    • 如果未启用此模式,则除以零并不 NULL 产生警告。

    • 如果启用此模式,则除以零 NULL 并生成警告。

    • 如果启用此模式和严格模式,除非 IGNORE 同时给出 ,除以零会产生错误 对于 INSERT IGNORE UPDATE IGNORE ,除以零插入 NULL 并产生警告。

    因为 SELECT ,除以零回报 NULL 启用 ERROR_FOR_DIVISION_BY_ZERO 原因的警告要制造为好,而不管是否启用了严格模式。

    ERROR_FOR_DIVISION_BY_ZERO 已弃用。 ERROR_FOR_DIVISION_BY_ZERO 不是严格模式的一部分,但应与严格模式一起使用,默认情况下启用。 如果 ERROR_FOR_DIVISION_BY_ZERO 启用但未启用严格模式, 则会发出警告, 反之亦然。

    因为 ERROR_FOR_DIVISION_BY_ZERO 已弃用,它将在未来的MySQL版本中作为单独的模式名称删除,其效果包含在严格SQL模式的效果中。

  • HIGH_NOT_PRECEDENCE

    NOT 运算符 的优先级 是这样的表达式,如 NOT a BETWEEN b AND c 解析为 NOT (a BETWEEN b AND c) 在某些旧版本的MySQL中,表达式被解析为 (NOT a) BETWEEN b AND c 通过启用 HIGH_NOT_PRECEDENCE SQL模式 可以获得旧的高优先级行为

    mysql> SET sql_mode = '';
    mysql>SELECT NOT 1 BETWEEN -5 AND 5;
            - > 0
    mysql> SET sql_mode = 'HIGH_NOT_PRECEDENCE';
    mysql>SELECT NOT 1 BETWEEN -5 AND 5;
            - > 1
    
  • IGNORE_SPACE

    允许函数名称和 ( 字符 之间的空格 这会导致内置函数名称被视为保留字。 因此,必须引用与函数名称相同的标识符,如 第9.2节“架构对象名称”中所述 例如,因为有一个 COUNT() 函数, count 在以下语句中 使用 作为表名会导致错误:

    MySQL的> CREATE TABLE count (i INT);
    错误1064(42000):您的SQL语法有错误
    

    应引用表名:

    MySQL的> CREATE TABLE `count` (i INT);
    查询正常,0行受影响(0.00秒)
    

    IGNORE_SPACE SQL模式适用于内置函数,而不是用户定义的函数或存储功能。 无论是否 IGNORE_SPACE 启用 ,始终允许在UDF或存储的函数名后面有空格

    有关进一步的讨论 IGNORE_SPACE ,请参见 第9.2.4节“函数名称解析和解决方案”

  • NO_AUTO_VALUE_ON_ZERO

    NO_AUTO_VALUE_ON_ZERO 影响 AUTO_INCREMENT 列的 处理 通常,通过插入 NULL 插入列来生成列的下一个序列号 0 NO_AUTO_VALUE_ON_ZERO 抑制此行为, 0 以便仅 NULL 生成下一个序列号。

    如果 0 已存储在表的 AUTO_INCREMENT 列中, 则此模式非常有用 0 顺便说一下, 存储 不是推荐的做法。)例如,如果您使用 mysqldump 转储表 然后重新加载它,MySQL通常会在遇到 0 时生成新的序列号 ,从而生成一个内容与表中的内容不同的表那被倾倒了。 NO_AUTO_VALUE_ON_ZERO 在重新加载转储文件之前 启用 可以解决此问题。 出于这个原因, mysqldump 在其输出中自动包含一个启用的语句 NO_AUTO_VALUE_ON_ZERO

  • NO_BACKSLASH_ESCAPES

    禁止使用反斜杠字符( \ )作为字符串和标识符中的转义字符。 启用此模式后,反斜杠就像其他任何一个普通字符一样。

  • NO_DIR_IN_CREATE

    创建表时,请忽略all INDEX DIRECTORY DATA DIRECTORY 指令。 此选项在从属复制服务器上很有用。

  • NO_ENGINE_SUBSTITUTION

    在诸如 CREATE TABLE ALTER TABLE 指定禁用或未编译的存储引擎之 类的语句时控制默认存储引擎的自动替换

    默认情况下, NO_ENGINE_SUBSTITUTION 已启用。

    由于存储引擎可以在运行时插入,因此不可用的引擎也会以相同的方式处理:

    随着 NO_ENGINE_SUBSTITUTION 禁止, CREATE TABLE 默认引擎使用,如果需要的引擎不可用时发出警告。 因为 ALTER TABLE ,会发出警告并且不会更改表格。

    NO_ENGINE_SUBSTITUTION 启用,则会出现错误,并且不会创建或修改的表,如果所需的引擎不可用。

  • NO_UNSIGNED_SUBTRACTION

    UNSIGNED 默认情况下, 整数值之间的减法(其中一个是类型 )会产生无符号结果。 如果结果否则为负,则会导致错误:

    MySQL的> SET sql_mode = '';
    查询正常,0行受影响(0.00秒)
    
    mysql> ERROR 1690(22003):BIGINT UNSIGNED值超出范围'(强制转换(0为无符号) -  1)'SELECT CAST(0 AS UNSIGNED) - 1;
    
    

    如果 NO_UNSIGNED_SUBTRACTION 启用 SQL模式,则结果为负:

    mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
    mysql>SELECT CAST(0 AS UNSIGNED) - 1;
    + ------------------------- +
    | CAST(0 AS UNSIGNED) -  1 |
    + ------------------------- +
    | -1 |
    + ------------------------- +
    

    如果使用此类操作的结果更新 UNSIGNED 整数列,则结果将剪切为列类型的最大值,或者如果 NO_UNSIGNED_SUBTRACTION 启用 则剪切为0 启用严格的SQL模式后,会发生错误并且列保持不变。

    NO_UNSIGNED_SUBTRACTION 启用时,减法结果是签订了, 即使任何操作数是无符号 例如,比较列的类型 c2 在表 t1 与该列的 c2 t2

    
    mysql> SET sql_mode='';
    mysql> CREATE TABLE test (c1 BIGINT UNSIGNED NOT NULL);
    mysql> CREATE TABLE t1 SELECT c1 - 1 AS c2 FROM test;
    mysql>DESCRIBE t1;
    + ------- + --------------------- + ------ + ----- + ------ --- + ------- +
    | 领域| 输入| 空| 钥匙| 默认| 额外的|
    + ------- + --------------------- + ------ + ----- + ------ --- + ------- +
    | c2 | bigint(21)unsigned | 没有| | 0 | |
    + ------- + --------------------- + ------ + ----- + ------ --- + ------- +
    
    mysql> SET sql_mode='NO_UNSIGNED_SUBTRACTION';
    mysql> CREATE TABLE t2 SELECT c1 - 1 AS c2 FROM test;
    mysql>DESCRIBE t2;
    + ------- + ------------ + ------ + ------ + --------- + ----- -  +
    | 领域| 输入| 空| 钥匙| 默认| 额外的|
    + ------- + ------------ + ------ + ------ + --------- + ----- -  +
    | c2 | bigint(21)| 没有| | 0 | |
    + ------- + ------------ + ------ + ------ + --------- + ----- -  +
    

    这意味着 BIGINT UNSIGNED 在所有上下文中都不是100%可用的。 请参见 第12.10节“强制转换函数和运算符”

  • NO_ZERO_DATE

    NO_ZERO_DATE 模式会影响服务器是否允许 '0000-00-00' 作为有效日期。 它的效果还取决于是否启用了严格的SQL模式。

    • 如果未启用此模式, '0000-00-00' 则允许并且插入不会产生警告。

    • 如果启用此模式, '0000-00-00' 则允许并且插入产生警告。

    • 如果启用此模式和严格模式, '0000-00-00' 则不允许插入产生错误,除非 IGNORE 同时给出。 对于 INSERT IGNORE UPDATE IGNORE '0000-00-00' 允许和插入产生警告。

    NO_ZERO_DATE 已弃用。 NO_ZERO_DATE 不是严格模式的一部分,但应与严格模式一起使用,默认情况下启用。 如果 NO_ZERO_DATE 启用但未启用严格模式, 则会发出警告, 反之亦然。

    因为 NO_ZERO_DATE 已弃用,它将在未来的MySQL版本中作为单独的模式名称删除,其效果包含在严格SQL模式的效果中。

  • NO_ZERO_IN_DATE

    NO_ZERO_IN_DATE 模式会影响服务器是否允许年份部分为非零但月份或日期部分为0的日期。(此模式会影响日期,例如 '2010-00-01' '2010-01-00' ,但不会 '0000-00-00' 。要控制服务器是否允许 '0000-00-00' ,请使用 NO_ZERO_DATE 模式。)效果的 NO_ZERO_IN_DATE 还取决于是否启用严格的SQL模式。

    • 如果未启用此模式,则允许零件的日期,并且插入不会产生警告。

    • 如果启用此模式,则插入零件的日期 '0000-00-00' 并生成警告。

    • 如果启用此模式和严格模式,则不允许零件的日期,并且插入会产生错误,除非 IGNORE 同时给出。 对于 INSERT IGNORE UPDATE IGNORE ,插入零件的日期 '0000-00-00' 并生成警告。

    NO_ZERO_IN_DATE 已弃用。 NO_ZERO_IN_DATE 不是严格模式的一部分,但应与严格模式一起使用,默认情况下启用。 如果 NO_ZERO_IN_DATE 启用但未启用严格模式, 则会发出警告, 反之亦然。

    因为 NO_ZERO_IN_DATE 已弃用,它将在未来的MySQL版本中作为单独的模式名称删除,其效果包含在严格SQL模式的效果中。

  • ONLY_FULL_GROUP_BY

    拒绝选择列表, HAVING 条件或 ORDER BY 列表引用非聚合列的 查询,这些 列既不在 GROUP BY 子句中 命名, 也不在功能上依赖于(唯一确定的) GROUP BY 列。

    标准SQL的MySQL扩展允许 HAVING 子句中的 引用 到选择列表中的别名表达式。 HAVING 无论是否 ONLY_FULL_GROUP_BY 启用, 子句都可以引用别名

    有关其他讨论和示例,请参见 第12.20.3节“GROUP BY的MySQL处理”

  • PAD_CHAR_TO_FULL_LENGTH

    默认情况下, CHAR 在检索时 列值 中修剪尾随空格 如果 PAD_CHAR_TO_FULL_LENGTH 启用,则不会进行修剪,并且检索的 CHAR 值将填充到其全长。 此模式不适 VARCHAR 用于在检索时保留尾随空格的列。

    注意

    从MySQL 8.0.13开始, PAD_CHAR_TO_FULL_LENGTH 不推荐使用。 它将在未来的MySQL版本中删除。

    
    MySQL的> CREATE TABLE t1 (c1 CHAR(10));
    查询OK,0行受影响(0.37秒)
    
    MySQL的> INSERT INTO t1 (c1) VALUES('xy');
    查询OK,1行受影响(0.01秒)
    
    MySQL的> SET sql_mode = '';
    查询正常,0行受影响(0.00秒)
    
    MySQL的> SELECT c1, CHAR_LENGTH(c1) FROM t1;
    + ------ + ----------------- +
    | c1 | CHAR_LENGTH(c1)|
    + ------ + ----------------- +
    | xy | 2 |
    + ------ + ----------------- +
    1排(0.00秒)
    
    MySQL的> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
    查询正常,0行受影响(0.00秒)
    
    MySQL的> SELECT c1, CHAR_LENGTH(c1) FROM t1;
    + ------------ + ----------------- +
    | c1 | CHAR_LENGTH(c1)|
    + ------------ + ----------------- +
    | xy | 10 |
    + ------------ + ----------------- +
    1排(0.00秒)
    
  • PIPES_AS_CONCAT

    治疗 || 作为字符串并置运算符(同 CONCAT() ),而不是作为一个同义词 OR

  • REAL_AS_FLOAT

    对待 REAL 作为一个代名词 FLOAT 默认情况下,MySQL将其 REAL 视为同义词 DOUBLE

  • STRICT_ALL_TABLES

    为所有存储引擎启用严格SQL模式。 无效的数据值被拒绝。 有关详细信息,请参阅 严格SQL模式

  • STRICT_TRANS_TABLES

    为事务存储引擎启用严格的SQL模式,并在可能的情况下为非事务性存储引擎启用。 有关详细信息,请参阅 严格SQL模式

  • TIME_TRUNCATE_FRACTIONAL

    控制是否舍入或插入发生时截断 TIME DATE TIMESTAMP 与小数部分秒值转换成具有相同的类型,但更少的小数位的列。 默认行为是使用舍入。 如果启用此模式,则会发生截断。 以下序列的陈述说明了不同之处:

    CREATE TABLE t(id INT,tval TIME(1));
    SET sql_mode ='';
    INSERT INTO t(id,tval)VALUES(1,1.55);
    SET sql_mode ='TIME_TRUNCATE_FRACTIONAL';
    INSERT INTO t(id,tval)VALUES(2,1.55);
    

    生成的表内容如下所示,其中第一个值已经过舍入而第二个值被截断:

    MySQL的> SELECT id, tval FROM t ORDER BY id;
    + ------ + ------------ +
    | id | tval |
    + ------ + ------------ +
    | 1 | 00:00:01.6 |
    | 2 | 00:00:01.5 |
    + ------ + ------------ +
    

    另请参见 第11.3.5节“时间值中的小数秒”

组合SQL模式

提供以下特殊模式作为前一列表中模式值组合的简写。

严格的SQL模式

严格模式控制MySQL如何处理数据更改语句(如 INSERT 或)中的 无效或缺失值 UPDATE 由于多种原因,值可能无效。 例如,列可能具有错误的数据类型,或者可能超出范围。 当要插入的新行不包含 其定义中 NULL 没有显式 DEFAULT 子句 的非 的值时,缺少值 (对于 NULL 列, NULL 如果缺少值 则插入。)严格模式也会影响DDL语句,例如 CREATE TABLE

如果严格模式不起作用,MySQL会为无效值或缺失值插入调整值并产生警告(请参见 第13.7.6.40节“显示警告语法” )。 在严格模式下,您可以使用 INSERT IGNORE 生成此行为 UPDATE IGNORE

对于 SELECT 不更改数据的 语句 ,无效值会在严格模式下生成警告,而不是错误。

严格模式会在尝试创建超过最大密钥长度的密钥时产生错误。 如果未启用严格模式,则会导致警告并将密钥截断为最大密钥长度。

严格模式不会影响是否检查外键约束。 foreign_key_checks 可以用于此。 (请参见 第5.1.8节“服务器系统变量” 。)

如果其中一个 STRICT_ALL_TABLES STRICT_TRANS_TABLES 已启用, 则严格的SQL模式有效 ,尽管这些模式的效果有所不同:

  • 对于事务表,当 启用 STRICT_ALL_TABLES STRICT_TRANS_TABLES 启用 时,数据更改语句中的值无效或缺失时会发生错误 该声明被中止并回滚。

  • 对于非事务性表,如果在要插入或更新的第一行中出现错误值,则对于任一模式的行为都是相同的:语句被中止并且表保持不变。 如果语句插入或修改多行,并且在第二行或更高行中出现错误值,则结果取决于启用的严格模式:

    • 对于 STRICT_ALL_TABLES ,MySQL返回错误并忽略其余行。 但是,由于已插入或更新了较早的行,因此结果是部分更新。 要避免这种情况,请使用单行语句,可以在不更改表的情况下中止。

    • 对于 STRICT_TRANS_TABLES ,MySQL将无效值转换为列的最接近的有效值,并插入调整后的值。 如果缺少值,MySQL将插入列数据类型的隐式默认值。 在任何一种情况下,MySQL都会生成警告而不是错误,并继续处理该语句。 第11.7节“数据类型默认值” 中描述了隐式 默认值

严格模式会影响日期中除以零,零日期和零的处理,如下所示:

  • 严格模式影响除零处理,包括 MOD(N,0)

    对于数据更改操作( INSERT UPDATE ):

    • 如果未启用严格模式,则除以零插入 NULL 并不产生警告。

    • 如果启用了严格模式,除非 IGNORE 同时给出 ,除以零会产生错误 对于 INSERT IGNORE UPDATE IGNORE ,除以零插入 NULL 并产生警告。

    因为 SELECT ,除以零回报 NULL 启用严格模式也会产生警告。

  • 严格模式会影响服务器是否允许 '0000-00-00' 作为有效日期:

    • 如果未启用严格模式, '0000-00-00' 则允许并且插入不产生警告。

    • 如果启用了严格模式, '0000-00-00' 则不允许插入产生错误,除非 IGNORE 同时给出。 对于 INSERT IGNORE UPDATE IGNORE '0000-00-00' 允许和插入产生警告。

  • 严格模式会影响服务器是否允许年份部分为非零但日期或日期部分为0的日期(日期为 '2010-00-01' 或等 '2010-01-00' ):

    • 如果未启用严格模式,则允许零件的日期,并且插入不会产生警告。

    • 如果启用了严格模式,则不允许零件的日期,并且插入会产生错误,除非 IGNORE 也给出 了错误 对于 INSERT IGNORE UPDATE IGNORE ,插入零件的日期 '0000-00-00' (被视为有效 IGNORE )并产生警告。

有关严格模式的更多信息 IGNORE ,请参阅 IGNORE关键字和严格SQL模式的比较

严格模式由零,零日期,并在日期零与结合影响分裂的处理 ERROR_FOR_DIVISION_BY_ZERO NO_ZERO_DATE NO_ZERO_IN_DATE 模式。

IGNORE关键字和严格SQL模式的比较

本节比较 IGNORE 关键字的 语句执行 (将错误降级为警告)和严格的SQL模式(将警告升级为错误)的影响。 它描述了它们影响的语句以及它们适用的错误。

下表显示了默认情况下产生错误与警告时语句行为的摘要比较。 默认情况下产生错误的示例是将a插入 NULL NOT NULL 列中。 默认情况下产生警告的示例是将错误数据类型的值插入到列中(例如将字符串 'abc' 插入整数列)。

运作模式 当Statement Default为Error时 当Statement Default为Warning时
没有 IGNORE 或严格的SQL模式 错误 警告
IGNORE 警告 警告(与没有 IGNORE 或严格的SQL模式相同)
使用严格的SQL模式 错误(与没有 IGNORE 或严格的SQL模式相同) 错误
IGNORE 和严格的SQL模式 警告 警告

从表中得出的一个结论是,当 IGNORE 关键字和严格的SQL模式都有效时, IGNORE 优先。 这意味着,虽然 IGNORE 严格的SQL模式可以被认为对错误处理有相反的影响,但它们在一起使用时不会取消。

IGNORE对语句执行的影响

MySQL中的几个语句支持可选 IGNORE 关键字。 此关键字会导致服务器降级某些类型的错误并生成警告。 对于多行语句, IGNORE 会导致语句跳到下一行而不是中止。

例如,如果表 t 具有主键列 i ,则尝试将相同值 i 插入多行通常会产生重复键错误:

MySQL的> INSERT INTO t (i) VALUES(1),(1);
ERROR 1062(23000):键'PRIMARY'重复输入'1'

使用时 IGNORE ,仍未插入包含重复键的行,但会发出警告而不是错误:


MySQL的> INSERT IGNORE INTO t (i) VALUES(1),(1);
查询正常,1行受影响,1警告(0.01秒)
记录:2个重复:1个警告:1

MySQL的> SHOW WARNINGS;
+ --------- + ------ + -------------------------------- ------- +
| 等级| 代码| 消息|
+ --------- + ------ + -------------------------------- ------- +
| 警告| 1062 | 键'PRIMARY'|的重复条目'1'
+ --------- + ------ + -------------------------------- ------- +
1排(0.00秒)

这些语句支持 IGNORE 关键字:

  • CREATE TABLE ... SELECT IGNORE 不适用于 语句的部分 CREATE TABLE SELECT 部分,而是插入到由表生成的行的表中 SELECT 复制唯一键值上现有行的行将被丢弃。

  • DELETE IGNORE 导致MySQL在删除行的过程中忽略错误。

  • INSERT :使用 IGNORE ,复制唯一键值上现有行的行将被丢弃。 设置为可能导致数据转换错误的值的行将设置为最接近的有效值。

    对于未找到与给定值匹配的分区的分区表, IGNORE 导致插入操作对包含不匹配值的行进行静默失败。

  • LOAD DATA LOAD XML :使用 IGNORE 复制唯一键值上现有行的行将被丢弃。

  • UPDATE :使用 IGNORE ,不会更新在唯一键值上发生重复键冲突的行。 更新为导致数据转换错误的值的行将更新为最接近的有效值。

IGNORE 关键字适用于以下错误:

ER_BAD_NULL_ERROR
ER_DUP_ENTRY
ER_DUP_ENTRY_WITH_KEY_NAME
ER_DUP_KEY
ER_NO_PARTITION_FOR_GIVEN_VALUE
ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT
ER_NO_REFERENCED_ROW_2
ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET
ER_ROW_IS_REFERENCED_2
ER_SUBQUERY_NO_1_ROW
ER_VIEW_CHECK_FAILED
严格SQL模式对语句执行的影响

MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于 sql_mode 系统变量 的值 严格 SQL模式下,服务器会将某些警告升级为错误。

例如,在非严格SQL模式下,将字符串 'abc' 插入整数列会导致将值转换为0并发出警告:

MySQL的> SET sql_mode = '';
查询正常,0行受影响(0.00秒)

MySQL的> INSERT INTO t (i) VALUES('abc');
查询正常,1行受影响,1警告(0.01秒)

MySQL的> SHOW WARNINGS;
+ --------- + ------ + -------------------------------- ------------------------ +
| 等级| 代码| 消息|
+ --------- + ------ + -------------------------------- ------------------------ +
| 警告| 1366 | 不正确的整数值:第1行|列'i'的'abc'
+ --------- + ------ + -------------------------------- ------------------------ +
1排(0.00秒)

在严格的SQL模式下,拒绝无效值并显示错误:

MySQL的> SET sql_mode = 'STRICT_ALL_TABLES';
查询正常,0行受影响(0.00秒)

MySQL的> INSERT INTO t (i) VALUES('abc');
ERROR 1366(HY000):不正确的整数值:第1行的列'i'为'abc'

有关 sql_mode 系统变量 可能设置的更多信息 ,请参见 第5.1.11节“服务器SQL模式”

严格的SQL模式适用于某些值可能超出范围或者在表中插入或删除无效行的条件下的以下语句:

在存储的程序中,如果在严格模式生效时定义了程序,则列出的类型的各个语句将以严格的SQL模式执行。

严格的SQL模式适用于以下错误,表示输入值无效或缺失的一类错误。 如果值具有错误的列数据类型或可能超出范围,则该值无效。 如果要插入的新行不包含 其定义中 NOT NULL 没有显式 DEFAULT 子句 的值,则缺少值

ER_BAD_NULL_ERROR
ER_CUT_VALUE_GROUP_CONCAT
ER_DATA_TOO_LONG
ER_DATETIME_FUNCTION_OVERFLOW
ER_DIVISION_BY_ZERO
ER_INVALID_ARGUMENT_FOR_LOGARITHM
ER_NO_DEFAULT_FOR_FIELD
ER_NO_DEFAULT_FOR_VIEW_FIELD
ER_TOO_LONG_KEY
ER_TRUNCATED_WRONG_VALUE
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
ER_WARN_DATA_OUT_OF_RANGE
ER_WARN_NULL_TO_NOTNULL
ER_WARN_TOO_FEW_RECORDS
ER_WRONG_ARGUMENTS
ER_WRONG_VALUE_FOR_TYPE
WARN_DATA_TRUNCATED

5.1.12 IPv6支持

MySQL中对IPv6的支持包括以下功能:

以下部分描述了如何设置MySQL以便客户端可以通过IPv6连接到服务器。

5.1.12.1验证IPv6的系统支持

在MySQL Server可以接受IPv6连接之前,服务器主机上的操作系统必须支持IPv6。 作为确定是否为真的简单测试,请尝试以下命令:

外壳> ping6 ::1
来自:: 1的16个字节,icmp_seq = 0 hlim = 64时间= 0.171 ms
来自:: 1的16个字节,icmp_seq = 1个hlim = 64个时间= 0.077毫秒
...

要生成系统网络接口的描述,请调用 ifconfig -a 并在输出中查找IPv6地址。

如果主机不支持IPv6,请参阅系统文档以获取有关启用它的说明。 您可能只需重新配置现有网络接口即可添加IPv6地址。 或者可能需要进行更广泛的更改,例如在启用IPv6选项的情况下重建内核。

这些链接可能有助于在各种平台上设置IPv6:

5.1.12.2配置MySQL服务器以允许IPv6连接

MySQL服务器侦听一个或多个网络套接字以进行TCP / IP连接。 每个套接字绑定到一个地址,但地址可以映射到多个网络接口。

bind_address 在服务器启动时 设置 系统变量以指定服务器实例接受的TCP / IP连接。 从MySQL 8.0.13开始,您可以为此选项指定多个值,包括IPv6地址,IPv4地址和解析为IPv6或IPv4地址的主机名的任意组合。 或者,您可以指定允许侦听多个网络接口的通配符地址格式之一。 值*(默认值或值 :: )允许所有服务器主机IPv4和IPv6接口上的IPv4和IPv6连接。 欲了解更多信息,请参阅 bind_address 在描述 第5.1.8节,“服务器系统变量”

5.1.12.3使用IPv6本地主机地址进行连接

以下过程说明如何配置MySQL以允许使用 ::1 本地主机地址 连接到本地服务器的客户端进行IPv6连接 此处给出的说明假定您的系统支持IPv6。

  1. 使用适当的 bind_address 设置 启动MySQL服务器 以允许它接受IPv6连接。 例如,将以下行放在服务器选项文件中并重新启动服务器:

    的[mysqld]
    bind_address = *
    

    将*(或 :: 指定 bind_address 允许所有服务器主机IPv4和IPv6接口上的IPv4和IPv6连接 的值 如果要将服务器绑定到特定的地址列表,可以通过为逗号分隔的值列表为MySQL 8.0.13执行此操作 bind_address 此示例指定IPv4和IPv6的本地主机地址:

    的[mysqld]
    bind_address = 127.0.0.1,:: 1
    

    欲了解更多信息,请参阅 bind_address 在描述 第5.1.8节,“服务器系统变量”

  2. 作为管理员,连接到服务器并为将从 ::1 本地IPv6主机地址 连接的本地用户创建帐户

    MySQL的> CREATE USER 'ipv6user'@'::1' IDENTIFIED BY 'ipv6pass';
    

    有关帐户名中IPv6地址的允许语法,请参见 第6.2.4节“指定帐户名” 除了该 CREATE USER 语句之外,您还可以发出 GRANT 为帐户提供特定权限的语句,但这对于此过程中的其余步骤不是必需的。

  3. 使用新帐户 调用 mysql 客户端连接到服务器:

    外壳> mysql -h ::1 -u ipv6user -pipv6pass
    
  4. 尝试一些显示连接信息的简单语句:

    MySQL的> STATUS
    ...
    连接::: 1通过TCP / IP
    ...
    
    MySQL的> SELECT CURRENT_USER(), @@bind_address;
    + ---------------- + ---------------- +
    | CURRENT_USER()| @@ bind_address |
    + ---------------- + ---------------- +
    | ipv6user @ :: 1 | :: |
    + ---------------- + ---------------- +
    

5.1.12.4使用IPv6非本地主机地址进行连接

以下过程说明如何配置MySQL以允许远程客户端进行IPv6连接。 它与本地客户端的上述过程类似,但服务器和客户端主机是不同的,并且每个主机都有自己的非本地IPv6地址。 该示例使用以下地址:

服务器主机:2001:db8:0:f101 :: 1
客户端主机:2001:db8:0:f101 :: 2

这些地址是从 IANA 推荐的非可路由地址范围中选择的, 用于文档目的,并且足以在本地网络上进行测试。 要接受来自本地网络外部客户端的IPv6连接,服务器主机必须具有公共地址。 如果您的网络提供商为您分配了IPv6地址,则可以使用该地址。 否则,另一种获取地址的方法是使用IPv6代理; 请参见 第5.1.12.5节“从代理获取IPv6地址”

  1. 使用适当的 bind_address 设置 启动MySQL服务器 以允许它接受IPv6连接。 例如,将以下行放在服务器选项文件中并重新启动服务器:

    的[mysqld]
    bind_address = *
    

    将*(或 :: 指定 bind_address 允许所有服务器主机IPv4和IPv6接口上的IPv4和IPv6连接 的值 如果要将服务器绑定到特定的地址列表,可以通过为逗号分隔的值列表为MySQL 8.0.13执行此操作 bind_address 此示例指定IPv4地址以及所需的服务器主机IPv6地址:

    的[mysqld]
    bind_address = 198.51.100.20,2001:db8:0:f101 :: 1
    

    欲了解更多信息,请参阅 bind_address 在描述 第5.1.8节,“服务器系统变量”

  2. 在服务器主机( 2001:db8:0:f101::1 )上,为将从客户端主机( 2001:db8:0:f101::2 连接的用户创建一个帐户

    MySQL的> CREATE USER 'remoteipv6user'@'2001:db8:0:f101::2' IDENTIFIED BY 'remoteipv6pass';
    
  3. 在客户端host( 2001:db8:0:f101::2 )上, 使用新帐户 调用 mysql 客户端连接到服务器:

    外壳> mysql -h 2001:db8:0:f101::1 -u remoteipv6user -premoteipv6pass
    
  4. 尝试一些显示连接信息的简单语句:

    MySQL的> STATUS
    ...
    连接:2001:db8:0:f101 :: 1通过TCP / IP
    ...
    
    MySQL的> SELECT CURRENT_USER(), @@bind_address;
    + ----------------------------------- + ------------- --- +
    | CURRENT_USER()| @@ bind_address |
    + ----------------------------------- + ------------- --- +
    | remoteipv6user @ 2001:db8:0:f101 :: 2 | :: |
    + ----------------------------------- + ------------- --- +
    

5.1.12.5从代理获取IPv6地址

如果您没有允许系统通过本地网络外的IPv6进行通信的公共IPv6地址,则可以从IPv6代理获取一个。 维基百科的IPv6隧道代理页 列出了几个经纪人和他们的功能,如是否提供静态地址和所支持的路由协议。

配置服务器主机以使用代理提供的IPv6地址后,使用适当的 bind_address 设置 启动MySQL服务器 以允许服务器接受IPv6连接。 您可以指定*(或 :: )作为 bind_address 值,或将服务器绑定到代理提供的特定IPv6地址。 欲了解更多信息,请参阅 bind_address 在描述 第5.1.8节,“服务器系统变量”

请注意,如果代理分配动态地址,则下次连接到代理时,为系统提供的地址可能会更改。 如果是这样,您创建的任何名称原始地址的帐户将变为无效。 要绑定到特定地址但避免此地址更改问题,您可以与代理安排静态IPv6地址。

以下示例显示如何将Freenet6用作 Gentoo Linux上 的代理和 gogoc IPv6客户端软件包。

  1. 通过访问此URL并注册,在Freenet6上创建一个帐户:

    http://gogonet.gogo6.com
    
  2. 创建帐户后,转到此URL,登录并为IPv6代理创建用户ID和密码:

    http://gogonet.gogo6.com/page/freenet6-registration
    

  3. 作为 root ,安装 gogoc

    外壳> emerge gogoc
    
  4. 编辑 /etc/gogoc/gogoc.conf 以设置 userid password 值。 例如:

    用户ID = gogouser
    的passwd = gogopass
    
  5. 启动 gogoc

    外壳> /etc/init.d/gogoc start
    

    每次系统引导时 启动 gogoc ,请执行以下命令:

    外壳> rc-update add gogoc default
    
  6. 使用 ping6 尝试ping主机:

    外壳> ping6 ipv6.google.com
    
  7. 要查看您的IPv6地址:

    外壳> ifconfig tun
    

5.1.13 MySQL服务器时区支持

本节介绍MySQL维护的时区设置,如何加载命名时间支持所需的系统表,如何保持当前时区更改以及如何启用闰秒支持。

有关复制设置中时区设置的信息,请参见 第17.4.1节“复制功能和问题”

时区变量

MySQL Server维护多个时区设置:

  • 系统时区。 当服务器启动时,它会尝试自动确定主机的时区,并使用它来设置 system_time_zone 系统变量。 此后该值不会改变。

    要在启动时显式指定MySQL Server的系统时区,请在启动 mysqld TZ 之前 设置 环境变量 如果使用 mysqld_safe 启动服务器 ,则其 选项提供了另一种设置系统时区的方法。 允许值 系统相关。 请参阅操作系统文档以了解可接受的值。 --timezone TZ --timezone

  • 服务器当前时区。 全局 time_zone 系统变量指示服务器当前运行的时区。初始 time_zone 值为 'SYSTEM' ,表示服务器时区与系统时区相同。

    注意

    如果设置为 SYSTEM ,则每个需要时区计算的MySQL函数调用都会调用系统库来确定当前系统时区。 此调用可能受全局互斥锁保护,从而导致争用。

    可以在启动时使用 --default-time-zone 命令行上的选项 显式指定初始全局服务器时区值,也可以 在选项文件中使用以下行:

    default-time-zone =' timezone'
    

    如果您具有 SYSTEM_VARIABLES_ADMIN SUPER 权限,则可以使用以下语句在运行时设置全局服务器时区值:

    SET GLOBAL time_zone = timezone;
    
  • 每个会话时区。 连接的每个客户端都有自己的会话时区设置,由会话 time_zone 变量 给定 最初,会话变量从全局变量中获取其值 time_zone ,但客户端可以使用以下语句更改自己的时区:

    SET time_zone = timezone;
    

会话时区设置会影响区域敏感的时间值的显示和存储。 这包括由诸如 NOW() or之类 的函数显示的值 CURTIME() ,以及存储在 TIMESTAMP 中和从 中检索的值 TIMESTAMP 列的 从会话时区转换为UTC以进行存储,并从UTC转换为会话时区以进行检索。

会话时区设置不影响由功能显示的值,如 UTC_TIMESTAMP() 在或值 DATE TIME DATETIME 列。 这些数据类型中的值也不是以UTC格式存储的; 时区仅在从 TIMESTAMP 转换时适用于它们 如果你想区域特定算术 DATE TIME DATETIME 值,将其转换为UTC,执行算术,然后再转换回。

可以像这样检索当前的全局和会话时区值:

SELECT @@ GLOBAL.time_zone,@ @ SESSION.time_zone;

timezone 值可以以多种格式给出,其中没有一种格式区分大小写:

  • 作为值 'SYSTEM' ,表示服务器时区与系统时区相同。

  • 作为指示与UTC的偏移的字符串,例如 '+10:00' '-6:00'

  • 作为命名的时区,例如 'Europe/Helsinki' 'US/Eastern' 'MET' 仅当 mysql 已创建并填充数据库中 的时区信息表时,才能使用命名时区

填充时区表

mysql 系统模式中存在 若干表 来存储时区信息(请参见 第5.3节“mysql系统模式” )。 MySQL安装过程会创建时区表,但不会加载它们。 要手动执行此操作,请使用以下说明。

注意

加载时区信息不一定是一次性操作,因为信息偶尔会改变。 发生此类更改时,使用旧规则的应用程序会过时,您可能会发现有必要重新加载时区表以使MySQL服务器使用的信息保持最新状态。 请参阅 随时区变化保持最新状态

如果您的系统有自己的 zoneinfo 数据库(描述时区的文件集),请使用 mysql_tzinfo_to_sql 程序加载时区表。 此类系统的示例是Linux,macOS,FreeBSD和Solaris。 这些文件的一个可能位置是 /usr/share/zoneinfo 目录。 如果您的系统没有zoneinfo数据库,则可以使用可下载的软件包,如本节后面所述。

要从命令行加载时区表,请将zoneinfo目录路径名传递给 mysql_tzinfo_to_sql 并将输出发送到 mysql 程序。 例如:

mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root -p mysql

此处显示 mysql 命令假定您使用诸如 root 具有修改 mysql 系统架构中的 表的权限 的帐户连接到服务器 根据需要调整连接参数。

mysql_tzinfo_to_sql 读取系统的时区文件并从中生成SQL语句。 mysql 处理这些语句以加载时区表。

mysql_tzinfo_to_sql 也可用于加载单个时区文件或生成闰秒信息:

  • 要加载 tz_file 与时区名称对应 的单个时区文件 像这样 tz_name 调用 mysql_tzinfo_to_sql

    mysql_tzinfo_to_sql | mysql -u root -p mysql
    tz_file tz_name

    使用此方法,您必须执行单独的命令来为服务器需要了解的每个命名区域加载时区文件。

  • 如果您的时区必须考虑闰秒,请初始化闰秒信息,例如, tz_file 时区文件的名称:

    mysql_tzinfo_to_sql --leap tz_file| mysql -u root -p mysql
    

运行 mysql_tzinfo_to_sql后 ,重新启动服务器,使其不再继续使用任何以前缓存的时区数据。

如果您的系统没有zoneinfo数据库(例如,Windows),则可以使用包含可在MySQL Developer Zone下载的SQL语句的包:

https://dev.mysql.com/downloads/timezones.html
警告

难道 ,如果你的系统有一个数据库时区信息使用一个可下载的时区包。 请改用 mysql_tzinfo_to_sql 实用程序。 否则,您可能会导致MySQL与系统上其他应用程序之间的日期时间处理有所不同。

要使用已下载的SQL语句时区包,请将其解压缩,然后将解压缩的文件内容加载到时区表中:

mysql -u root -p mysql < file_name

然后重启服务器。

警告

千万 不能 使用包含一个可下载的时区包 MyISAM 桌。 这适用于较旧的MySQL版本。 MySQL现在 InnoDB 用于时区表。 试图用 MyISAM 替换它们 会导致问题。

随时区变化保持最新状态

当时区规则更改时,使用旧规则的应用程序将过时。 要保持最新状态,必须确保系统使用当前时区信息。 对于MySQL,在保持最新状态时需要考虑多个因素:

  • 如果时区设置为,则操作系统时间会影响MySQL服务器使用的值 SYSTEM 确保您的操作系统使用最新的时区信息。 对于大多数操作系统,最新的更新或Service Pack会为您的系统准备时间更改。 检查操作系统供应商的网站,以获取解决时间更改的更新。

  • 如果 /etc/localtime 使用与 mysqld 启动 时有效的规则不同的版本 替换系统的 时区文件 ,请重新启动 mysqld 以使其使用更新的规则。 否则, mysqld 可能不会注意到系统何时更改其时间。

  • 如果在MySQL中使用命名时区,请确保 mysql 数据库中 的时区表 是最新的:

    • 如果您的系统有自己的zoneinfo数据库,则每当更新zoneinfo数据库时重新加载MySQL时区表。

    • 对于没有自己的zoneinfo数据库的系统,请检查MySQL Developer Zone以获取更新。 当有新的更新可用时,请下载并使用它来替换当前时区表的内容。

    有关这两种方法的说明,请参阅 填充时区表 mysqld 缓存它查找的时区信息,因此在更新时区表后,重新启动 mysqld 以确保它不会继续提供过时的时区数据。

如果您不确定命名时区是否可用,或者作为服务器的时区设置使用,还是由设置自己时区的客户端使用,请检查您的时区表是否为空。 以下查询确定包含时区名称的表是否包含任何行:

MySQL的> SELECT COUNT(*) FROM mysql.time_zone_name;
+ ---------- +
| COUNT(*)|
+ ---------- +
| 0 |
+ ---------- +

计数为零表示该表为空。 在这种情况下,当前没有应用程序使用命名时区,您无需更新表(除非您要启用命名时区支持)。 计数大于零表示该表不为空,并且其内容可用于命名时区支持。 在这种情况下,请务必重新加载时区表,以便使用命名时区的应用程序将获得正确的查询结果。

要检查您的MySQL安装是否已正确更新以更改夏令时规则,请使用如下所示的测试。 该示例使用的值适用于3月11日凌晨2点在美国发生的2007 DST 1小时更改

该测试使用此查询:

选择
  CONVERT_TZ('2007-03-11 2:00:00','US / Eastern','US / Central')AS time1,
  CONVERT_TZ('2007-03-11 3:00:00','US / Eastern','US / Central')AS time2;

两个时间值表示发生DST更改的时间,并且使用指定时区要求使用时区表。 期望的结果是两个查询都返回相同的结果(输入时间,转换为'US / Central'时区中的等效值)。

在更新时区表之前,您会看到不正确的结果,如下所示:

+ --------------------- + --------------------- +
| time1 | time2 |
+ --------------------- + --------------------- +
| 2007-03-11 01:00:00 | 2007-03-11 02:00:00 |
+ --------------------- + --------------------- +

更新表后,您应该看到正确的结果:

+ --------------------- + --------------------- +
| time1 | time2 |
+ --------------------- + --------------------- +
| 2007-03-11 01:00:00 | 2007-03-11 01:00:00 |
+ --------------------- + --------------------- +

时区闰秒支持

将返回带有时间部分的闰秒值 :59:59 这意味着诸如 NOW() 可以在闰秒期间连续两或三秒返回相同值 的函数 具有时间部分结束 :59:60 或被 :59:61 认为无效的 文字时间值仍然是正确的

如果需要 TIMESTAMP 在闰秒之前 搜索 一秒的值,则如果使用与 'YYYY-MM-DD hh:mm:ss' 的比较,则可能获得异常结果 以下示例演示了这一点。 它将会话时区更改为UTC,因此内部 TIMESTAMP 值(以UTC为单位)和显示值(已应用时区校正) 之间没有差异


MySQL的> CREATE TABLE t1 (
         a INT,
         ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
         PRIMARY KEY (ts)
       );
查询OK,0行受影响(0.01秒)

mysql> -- change to UTC
mysql>SET time_zone = '+00:00';
查询正常,0行受影响(0.00秒)

mysql> -- Simulate NOW() = '2008-12-31 23:59:59'
mysql>SET timestamp = 1230767999;
查询正常,0行受影响(0.00秒)

MySQL的> INSERT INTO t1 (a) VALUES (1);
查询正常,1行受影响(0.00秒)

mysql> -- Simulate NOW() = '2008-12-31 23:59:60'
mysql>SET timestamp = 1230768000;
查询正常,0行受影响(0.00秒)

MySQL的> INSERT INTO t1 (a) VALUES (2);
查询正常,1行受影响(0.00秒)

mysql> -- values differ internally but display the same
mysql>SELECT a, ts, UNIX_TIMESTAMP(ts) FROM t1;
+ ------ + --------------------- + -------------------- +
| a | ts | UNIX_TIMESTAMP(ts)|
+ ------ + --------------------- + -------------------- +
| 1 | 2008-12-31 23:59:59 | 1230767999 |
| 2 | 2008-12-31 23:59:59 | 1230768000 |
+ ------ + --------------------- + -------------------- +
2行(0.00秒)

mysql> -- only the non-leap value matches
mysql>SELECT * FROM t1 WHERE ts = '2008-12-31 23:59:59';
+ ------ + --------------------- +
| a | ts |
+ ------ + --------------------- +
| 1 | 2008-12-31 23:59:59 |
+ ------ + --------------------- +
1排(0.00秒)

mysql> -- the leap value with seconds=60 is invalid
mysql>SELECT * FROM t1 WHERE ts = '2008-12-31 23:59:60';
空集,2个警告(0.00秒)

要解决此问题,您可以使用基于实际存储在列中的UTC值进行比较,该值应用了闰秒校正:

mysql> -- selecting using UNIX_TIMESTAMP value return leap value
mysql>SELECT * FROM t1 WHERE UNIX_TIMESTAMP(ts) = 1230768000;
+ ------ + --------------------- +
| a | ts |
+ ------ + --------------------- +
| 2 | 2008-12-31 23:59:59 |
+ ------ + --------------------- +
1排(0.00秒)

5.1.14服务器端帮助支持

MySQL Server支持 HELP 从MySQL Reference Manual返回信息 语句(参见 第13.8.3节“HELP语法” )。 此信息存储在 mysql 模式 中的多个表中 (请参见 第5.3节“mysql系统模式” )。 正确操作 HELP 语句需要初始化这些帮助表。

对于在Unix上使用二进制或源代码分发的MySQL的新安装,在初始化数据目录时会发生帮助表内容初始化(请参见 第2.10.1节“初始化数据目录” )。 对于Linux上的RPM分发或Windows上的二进制分发,内容初始化是作为MySQL安装过程的一部分进行的。

对于使用二进制分发的MySQL升级,自MySQL 8.0.16起,服务器会自动升级帮助表内容。 在MySQL 8.0.16之前,内容不会自动升级,但您可以手动升级。 fill_help_tables.sql share share/mysql 目录中 找到该 文件 将位置更改到该目录并使用 mysql 客户端 处理该文件, 如下所示:

mysql -u root -p mysql <fill_help_tables.sql

此处显示的命令假定您使用诸如 root 具有修改 mysql 架构中的 表的权限 的帐户连接到服务器 根据需要调整连接参数。

在MySQL 8.0.16之前,如果您正在使用Git和MySQL开发源代码树,源代码树只包含一个 存根 版本 fill_help_tables.sql 要获取非存根副本,请使用源或二进制分发中的副本。

注意

每个MySQL系列都有自己的系列专用参考手册,因此帮助表内容也是系列特定的。 这对复制有影响,因为帮助表内容应与MySQL系列匹配。 如果将MySQL 8.0帮助内容加载到MySQL 8.0主服务器中,则将该内容从不同的MySQL系列复制到从属服务器并且该内容不适合是没有意义的。 因此,在复制方案中升级单个服务器时,应使用前面给出的说明升级每个服务器的帮助表。 (仅对于低于8.0.16的版本的复制服务器,才需要手动帮助内容升级。如前面的说明中所述,

5.1.15客户端会话状态更改的服务器跟踪

MySQL服务器实现了几个会话状态跟踪器。 客户端可以使这些跟踪器能够接收其会话状态变化的通知。

跟踪器机制的一个用途是为MySQL连接器和客户端应用程序提供一种方法,以确定是否有任何会话上下文可用于允许从一个服务器到另一个服务器的会话迁移。 (要在负载平衡环境中更改会话,有必要在决定是否可以进行切换时检测是否存在会话状态。)

跟踪器机制的另一个用途是允许应用程序知道何时可以将事务从一个会话移动到另一个会话。 事务状态跟踪启用此功能,这对于可能希望将事务从繁忙服务器移动到负载较少的应用程序的应用程序非常有用。 例如,管理客户端连接池的负载平衡连接器可以在池中的可用会话之间移动事务。

但是,不能在任意时间进行会话切换。 如果会话处于已完成读取或写入的事务的中间,则切换到其他会话意味着原始会话上的事务回滚。 仅当事务尚未在其中执行任何读取或写入时,才必须执行会话切换。

可以合理地切换交易的示例:

除了知道事务状态之外,了解事务特征是有用的,以便在事务被移动到不同会话时使用相同的特征。 以下特征与此相关:

只读 
读写
隔离级别
一致的快照

为了支持前面的会话切换活动,可以通知这些类型的客户机会话状态信息:

  • 客户端会话状态的这些属性的更改:

    • 默认架构(数据库)。

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

    • 用户定义的变量。

    • 临时表。

    • 准备好的陈述。

    所述 session_track_state_change 系统变量控制此追踪。

  • 对默认架构名称的更改。 所述 session_track_schema 系统变量控制此追踪。

  • 更改系统变量的会话值。 所述 session_track_system_variables 系统变量控制此追踪。

  • 可用的GTID。 所述 session_track_gtids 系统变量控制此追踪。

  • 有关交易状态和特征的信息。 所述 session_track_transaction_info 系统变量控制此追踪。

有关跟踪器相关系统变量的说明,请参见 第5.1.8节“服务器系统变量” 这些系统变量允许控制发生哪些更改通知,但不提供访问通知信息的方法。 通知发生在MySQL客户端/服务器协议中,其中包括OK数据包中的跟踪器信息,以便可以检测到会话状态更改。 为了使客户端应用程序能够从服务器返回的OK数据包中提取状态更改信息,MySQL C API提供了一对功能:

mysqltest 程序有 disable_session_track_info enable_session_track_info 控制是否会跟踪通知命令发生。 您可以使用这些命令从命令行查看SQL语句生成的通知。 假设一个文件 testscript 包含以下 mysqltest 脚本:

DROP TABLE IF EXISTS test.t1;
CREATE TABLE test.t1(i INT,f FLOAT);
--enable_session_track_info
SET @@ SESSION.session_track_schema = ON;
SET @@ SESSION.session_track_system_variables ='*';
SET @@ SESSION.session_track_state_change = ON;
USE information_schema;
SET NAMES'utf8mb4';
SET @@ SESSION.session_track_transaction_info ='CHARACTERISTICS';
设置交易隔离级别可串行化;
SET TRANSACTION READ WRITE;
开始交易;
选择1;
INSERT INTO test.t1()VALUES();
INSERT INTO test.t1()VALUES(1,RAND());
承诺;

按如下所示运行脚本以查看启用的跟踪器提供的信息。 有关 mysqltest 为各种跟踪器 Tracker: 显示 信息 的说明 ,请参见 第28.7.7.69节“mysql_session_track_get_first()”

外壳> mysqltest < testscript
DROP TABLE IF EXISTS test.t1;
CREATE TABLE test.t1(i INT,f FLOAT);
SET @@ SESSION.session_track_schema = ON;
SET @@ SESSION.session_track_system_variables ='*';
- 跟踪器:SESSION_TRACK_SYSTEM_VARIABLES
-  session_track_system_variables
-  *

SET @@ SESSION.session_track_state_change = ON;
- 跟踪器:SESSION_TRACK_SYSTEM_VARIABLES
-  session_track_state_change
-  上

USE information_schema;
- 追踪器:SESSION_TRACK_SCHEMA
-  information_schema

- 跟踪器:SESSION_TRACK_STATE_CHANGE
-  1

SET NAMES'utf8mb4';
- 跟踪器:SESSION_TRACK_SYSTEM_VARIABLES
-  character_set_client
-  utf8mb4
-  character_set_connection
-  utf8mb4
-  character_set_results
-  utf8mb4

- 跟踪器:SESSION_TRACK_STATE_CHANGE
-  1

SET @@ SESSION.session_track_transaction_info ='CHARACTERISTICS';
- 跟踪器:SESSION_TRACK_SYSTEM_VARIABLES
-  session_track_transaction_info
- 特点

- 跟踪器:SESSION_TRACK_STATE_CHANGE
-  1

- 追踪器:SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-  

- 跟踪器:SESSION_TRACK_TRANSACTION_STATE
-  ________

设置交易隔离级别可串行化;
- 追踪器:SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- 设置交易隔离级别可串行;

SET TRANSACTION READ WRITE;
- 追踪器:SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- 设置交易隔离级别可串行; SET TRANSACTION READ WRITE;

开始交易;
- 追踪器:SESSION_TRACK_TRANSACTION_CHARACTERISTICS
- 设置交易隔离级别可串行; START TRANSACTION READ WRITE;

- 跟踪器:SESSION_TRACK_TRANSACTION_STATE
-  T_______

选择1;
1
1
- 跟踪器:SESSION_TRACK_TRANSACTION_STATE
-  T_____S_

INSERT INTO test.t1()VALUES();
- 跟踪器:SESSION_TRACK_TRANSACTION_STATE
-  T___W_S_

INSERT INTO test.t1()VALUES(1,RAND());
- 跟踪器:SESSION_TRACK_TRANSACTION_STATE
-  T___WsS_

承诺;
- 追踪器:SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-  

- 跟踪器:SESSION_TRACK_TRANSACTION_STATE
-  ________

在该 START TRANSACTION 语句 之前 SET TRANSACTION 执行 两个 语句,为下一个事务设置隔离级别和访问模式特征。 SESSION_TRACK_TRANSACTION_CHARACTERISTICS 值表示已设置的下一个事务值。

COMMIT 结束事务 语句 之后 ,该 SESSION_TRACK_TRANSACTION_CHARACTERISTICS 值报告为空。 这表示已重置事务开始之前设置的下一个事务特征,并且会话缺省值适用。 要跟踪对这些会话默认值的更改,请跟踪 transaction_isolation transaction_read_only 系统变量 的会话值

5.1.16服务器对信号的响应

在Unix上,信号可以发送到进程。 mysqld 响应发送给它的信号,如下所示:

  • SIGTERM 导致服务器关闭。

  • SIGHUP 使服务器重新加载授权表并刷新表,日志,线程缓存和主机缓存。 这些行为就像 FLUSH 声明的 各种形式 服务器还会将状态报告写入具有以下格式的错误日志:

    状态信息:
    
    当前目录:/ var / mysql / data /
    运行线程:0堆栈大小:196608
    目前的锁:
    
    关键缓存:
    默认
    Buffer_size:8388600
    Block_size:1024
    Division_limit:100
    Age_limit:300
    使用的块:0
    没有脸红:0
    w_requests:0
    写道:0
    r_requests:0
    读:0
    
    处理程序状态
    read_key:0
    read_next:0
    read_rnd 0
    read_first:1
    写:0
    删除0
    更新:0
    
    表状态:
    打开的桌子:5
    打开表:0
    打开文件:7
    开放流:0
    
    报警状态:
    活动警报:1
    Max使用的警报:2
    下次闹钟时间:67
    

5.1.17服务器关闭过程

服务器关闭过程如下:

  1. 关闭过程已启动。

    这可以通过几种方式发生。 例如,具有该 SHUTDOWN 权限 的用户 可以执行 mysqladmin shutdown 命令。 mysqladmin 可以在MySQL支持的任何平台上使用。 其他特定于操作系统的关闭启动方法也是可能的:服务器在接收到 SIGTERM 信号 时会在Unix上关闭 在Windows上作为服务运行的服务器在服务管理器告知时关闭。

  2. 如有必要,服务器会创建一个关闭线程。

    根据启动关闭的方式,服务器可能会创建一个线程来处理关闭过程。 如果客户端请求关闭,则会创建关闭线程。 如果关闭是接收 SIGTERM 信号 的结果 ,则信号线程可能自己处理关闭,或者它可能会创建一个单独的线程来执行此操作。 如果服务器尝试创建关闭线程而不能(例如,如果内存耗尽),则会发出错误日志中显示的诊断消息:

    错误:无法创建线程来终止服务器
    
  3. 服务器停止接受新连接。

    为了防止在关闭期间启动新活动,服务器通过关闭它通常侦听连接的网络接口的处理程序来停止接受新的客户端连接:TCP / IP端口,Unix套接字文件,Windows命名管道和Windows上的共享内存。

  4. 服务器终止当前活动。

    对于与客户端连接关联的每个线程,服务器断开与客户端的连接并将线程标记为已终止。 线程在注意到它们如此标记时会死亡。 空闲连接的线程快速死亡。 当前处理语句的线程会定期检查其状态,并且需要更长的时间才能完成。 有关线程终止的其他信息,请参见 第13.7.7.4节“KILL语法” ,特别是 有关 表的已 终止 REPAIR TABLE OPTIMIZE TABLE 操作 的说明 MyISAM

    对于具有打开事务的线程,将回滚事务。 如果一个线程正在更新非事务表,操作如多行 UPDATE INSERT 可以离席了部分更新,因为操作可以完成前终止。

    如果服务器是主复制服务器,则它会将与当前连接的从属关联的线程视为其他客户端线程。 也就是说,每个都标记为已杀死,并在下次检查其状态时退出。

    如果服务器是从属复制服务器,则在将客户端线程标记为已终止之前,它会停止I / O和SQL线程(如果它们处于活动状态)。 允许SQL线程完成其当前语句(以避免导致复制问题),然后停止。 如果此时SQL线程处于事务中间,则服务器将等待,直到当前复制事件组(如果有)已完成执行,或者直到用户发出 KILL QUERY KILL CONNECTION 声明 为止 另请参见 第13.4.2.7节“STOP SLAVE语法” 由于无法回滚非事务性语句,因此为了保证崩溃安全复制,只应使用事务性表。

    注意

    要确保从站的崩溃安全性,必须在 --relay-log-recovery 启用时 运行从站

    另请参见 第17.2.4节“复制中继和状态日志”

  5. 服务器关闭或关闭存储引擎。

    在此阶段,服务器刷新表缓存并关闭所有打开的表。

    每个存储引擎都会执行其管理的表所需的任何操作。 InnoDB 将其缓冲池刷新到磁盘(除非 innodb_fast_shutdown 是2),将当前LSN写入表空间,并终止其自己的内部线程。 MyISAM 刷新表的任何挂起索引写入。

  6. 服务器退出。

为了向管理进程提供信息,服务器返回以下列表中描述的退出代码之一。 括号中的短语表示systemd响应代码所采取的操作,对于使用systemd管理服务器的平台。

  • 0 =成功终止(未完成重启)

  • 1 =终止失败(未完成重启)

  • 2 =终止失败(重启完成)

5.2 MySQL数据目录

由MySQL服务器管理的信息存储在称为数据目录的目录下。 以下列表简要介绍了数据目录中常见的项目,以及其他信息的交叉引用:

通过重新配置服务器,可以在其他位置重新定位上述列表中的某些项目。 此外,该 --datadir 选项还可以更改数据目录本身的位置。 对于给定的MySQL安装,请检查服务器配置以确定是否已移动项目。

5.3 mysql系统架构

mysql 模式是系统架构。 它包含存储MySQL服务器运行时所需信息的表。 广泛的分类是 mysql 模式包含存储数据库对象元数据的数据字典表,以及用于其他操作目的的系统表。 以下讨论进一步将系统表集细分为较小的类别。

本节的其余部分将列出每个类别中的表,并提供其他信息的交叉引用。 InnoDB 除非另有说明,否则 数据字典表和系统表使用 存储引擎。

mysql 系统表和数据字典表驻留在 MySQL数据目录 中指定的单个 InnoDB 表空间文件 mysql.ibd 中。 以前,这些表是在 mysql 数据库目录 中的各个表空间文件中创建的

可以为 mysql 系统模式表空间 启用静态数据加密 有关更多信息,请参见 第15.6.3.9节“InnoDB静态数据加密”

数据字典表

这些表包含数据字典,其中包含有关数据库对象的元数据。 有关其他信息,请参阅 第14章, MySQL数据字典

重要

数据字典是MySQL 8.0中的新增功能。 与以前的MySQL版本相比,支持数据字典的服务器需要一些一般的操作差异。 有关详细信息,请参见 第14.7节“数据字典使用差异” 此外,对于从MySQL 5.7升级到MySQL 8.0,升级过程与以前的MySQL版本略有不同,并要求您通过检查特定的先决条件来验证安装的升级准备情况。 有关更多信息,请参见 第2.11节“升级MySQL” ,特别是 第2.11.5节“准备升级安装”

  • catalogs :目录信息。

  • character_sets :有关可用字符集的信息。

  • check_constraints :有关 CHECK 在表上定义的约束的 信息 请参见 第13.1.20.7节“检查约束”

  • collations :有关每个字符集的排序规则的信息。

  • column_statistics :列值的直方图统计信息。 请参见 第8.9.6节“优化程序统计信息”

  • column_type_elements :有关列使用的类型的信息。

  • columns :有关表中列的信息。

  • dd_properties :标识数据字典属性的表,例如其版本。 服务器使用它来确定是否必须将数据字典升级到较新版本。

  • events :有关事件计划程序事件的信息。 请参见 第24.4节“使用事件调度程序” 除非使用该 --skip-grant-tables 选项 启动,否则服务器会在其启动过程中加载此表中列出的事件

  • foreign_keys foreign_key_column_usage :有关外键的信息。

  • index_column_usage :有关索引使用的列的信息。

  • index_partitions :有关索引使用的分区的信息。

  • index_stats :用于存储 ANALYZE TABLE 执行 时生成的动态索引统计信息

  • indexes :有关表索引的信息。

  • innodb_ddl_log :存储DDL日志以进行崩溃安全的DDL操作。

  • parameter_type_elements :有关存储过程和函数参数的信息,以及有关存储函数的返回值的信息。

  • parameters :有关存储过程和函数的信息。 请参见 第24.2节“使用存储的例程”

  • resource_groups :有关资源组的信息。 请参见 第8.12.5节“资源组”

  • routines :有关存储过程和函数的信息。 请参见 第24.2节“使用存储的例程”

  • schemata :有关schemata的信息。 在MySQL中,模式是数据库,因此该表提供有关数据库的信息。

  • st_spatial_reference_systems :有关空间数据的可用空间参考系统的信息。

  • table_partition_values :有关表分区使用的值的信息。

  • table_partitions :有关表使用的分区的信息。

  • table_stats :有关 ANALYZE TABLE 执行 时生成的动态表统计信息的信息

  • tables :有关数据库中表的信息。

  • tablespace_files :有关表空间使用的文件的信息。

  • tablespaces :有关活动表空间的信息。

  • triggers :有关触发器的信息。

  • view_routine_usage :有关视图与它们使用的存储函数之间的依赖关系的信息。

  • view_table_usage :用于跟踪视图及其基础表之间的依赖关系。

数据字典表是不可见的。 它们无法读取 SELECT ,不会出现在输出中 SHOW TABLES ,未列在 INFORMATION_SCHEMA.TABLES 表中,等等。 但是,在大多数情况下 INFORMATION_SCHEMA ,可以查询 相应的 表。 从概念上讲,它 INFORMATION_SCHEMA 提供了一个MySQL公开数据字典元数据的视图。 例如,您无法 mysql.schemata 直接 表中进行 选择

MySQL的> SELECT * FROM mysql.schemata;
错误3554(HY000):拒绝访问数据字典表'mysql.schemata'。

而是从相应的 INFORMATION_SCHEMA 表中 选择该信息

MySQL的> SELECT * FROM INFORMATION_SCHEMA.SCHEMATA\G
*************************** 1。排******************** *******
              CATALOG_NAME:def
               SCHEMA_NAME:mysql
DEFAULT_CHARACTER_SET_NAME:utf8mb4
    DEFAULT_COLLATION_NAME:utf8mb4_0900_ai_ci
                  SQL_PATH:NULL
        DEFAULT_ENCRYPTION:没有
*************************** 2.排******************** *******
              CATALOG_NAME:def
               SCHEMA_NAME:information_schema
DEFAULT_CHARACTER_SET_NAME:utf8
    DEFAULT_COLLATION_NAME:utf8_general_ci
                  SQL_PATH:NULL
        DEFAULT_ENCRYPTION:没有
...

没有 INFORMATION_SCHEMA 完全对应的表 mysql.indexes ,但 INFORMATION_SCHEMA.STATISTICS 包含大量相同的信息。

到目前为止,还没有 INFORMATION_SCHEMA 说完全对应表 mysql.foreign_keys mysql.foreign_key_column_usage 获取外键信息的标准SQL方法是使用 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS KEY_COLUMN_USAGE 表; 这些表现在实现为在意见 foreign_keys foreign_key_column_usage 和其它数据字典的表。

MySQL 8.0之前的一些系统表已被数据字典表替换,并且不再出现在 mysql 系统模式中:

  • events 数据字典表取代了 event 从MySQL 8.0之前的表。

  • parameters routines 数据字典表一起取代的 proc 从MySQL 8.0前表。

授予系统表

这些系统表包含有关用户帐户及其拥有的权限的授权信息。 有关这些表的结构,内容和用途的其他信息,请参见 第6.2.3节“授权表”

从MySQL 8.0开始,授权表是 InnoDB (事务性)表。 以前,这些是 MyISAM (非交易)表格。 授权表存储引擎的更改是MySQL 8.0随附的更改与帐户管理语句(如 CREATE USER 和) 的行为的基础 GRANT 以前,为多个用户命名的帐户管理语句可能会对某些用户成功,而对其他用户则失败。 这些语句现在是事务性的,并且对所有命名用户都成功或回滚,如果发生任何错误则无效。

注意

如果MySQL从旧版本升级但授权表尚未升级 MyISAM InnoDB ,则服务器将它们视为只读,并且帐户管理语句会产生错误。 有关升级说明,请参见 第2.11节“升级MySQL”

  • user :用户帐户,全局权限和其他非特权列。

  • global_grants :为用户分配动态全局特权; 请参阅 静态与动态权限

  • db :数据库级权限。

  • tables_priv :表级权限。

  • columns_priv :列级权限。

  • procs_priv :存储过程和功能权限。

  • proxies_priv :代理用户权限。

  • default_roles :此表列出了在用户连接并进行身份验证或执行后要激活的默认角色 SET ROLE DEFAULT

  • role_edges :此表列出了角色子图的边。

    给定的 user 表行可能指的是用户帐户或角色。 服务器可以通过查询 role_edges 表来获得有关身份验证ID之间关系的信息 ,从而区分行是代表用户帐户,角色还是两者

  • password_history :有关密码更改的信息。

对象信息系统表

这些系统表包含有关存储的程序,组件,用户定义的函数和服务器端插件的信息:

记录系统表

服务器使用这些系统表进行日志记录:

  • general_log :常规查询日志表。

  • slow_log :慢查询日志表。

日志表使用 CSV 存储引擎。

有关更多信息,请参见 第5.4节“MySQL服务器日志”

服务器端帮助系统表

这些系统表包含服务器端帮助信息:

  • help_category :有关帮助类别的信息。

  • help_keyword :与帮助主题相关联的关键字。

  • help_relation :帮助关键字和主题之间的映射。

  • help_topic :帮助主题内容。

有关更多信息,请参见 第5.1.14节“服务器端帮助支持”

时区系统表

这些系统表包含时区信息:

  • time_zone :时区ID以及它们是否使用闰秒。

  • time_zone_leap_second :发生闰秒时。

  • time_zone_name :时区ID和名称之间的映射。

  • time_zone_transition time_zone_transition_type :时区说明。

有关更多信息,请参见 第5.1.13节“MySQL服务器时区支持”

复制系统表

服务器使用这些系统表来支持复制:

刚刚列出的所有表都使用 InnoDB 存储引擎。

优化器系统表

这些系统表供优化器使用:

杂项系统表

其他系统表不符合前面的类别:

  • audit_log_filter audit_log_user :如果安装了MySQL Enterprise Audit,这些表提供了审计日志过滤器定义和用户帐户的持久存储。 请参见 第6.4.5.8.1节“审计日志表”

  • firewall_users firewall_whitelist :如果安装了MySQL Enterprise Firewall,这些表为防火墙使用的信息提供持久存储。 请参见 第6.4.7节“MySQL Enterprise Firewall”

  • servers :由 FEDERATED 存储引擎使用。 请参见 第16.8.2.2节“使用CREATE SERVER创建FEDERATED表”

  • innodb_dynamic_metadata :由 InnoDB 存储引擎用于存储快速更改的表元数据,例如自动递增计数器值和索引树损坏标志。 替换驻留在 InnoDB 系统表空间中 的数据字典缓冲区表

5.4 MySQL服务器日志

MySQL Server有几个日志可以帮助您找出正在进行的活动。

日志类型 写入日志的信息
错误日志 启动,运行或停止 mysqld时 遇到的问题
一般查询日志 建立客户端连接和从客户端收到的语句
二进制日志 更改数据的语句(也用于复制)
中继日志 从复制主服务器收到的数据更改
慢查询日志 long_query_time 执行 时间超过 几秒的 查询
DDL日志(元数据日志) DDL语句执行的元数据操作

默认情况下,除Windows上的错误日志外,不启用任何日志。 (DDL日志始终在需要时创建,并且没有用户可配置的选项;请参见 第5.4.6节“DDL日志” 。)以下特定于日志的部分提供有关启用日志记录的服务器选项的信息。

默认情况下,服务器会为数据目录中的所有已启用日志写入文件。 您可以通过刷新日志来强制服务器关闭并重新打开日志文件(或在某些情况下切换到新的日志文件)。 发出 FLUSH LOGS 声明 时会发生日志刷新 ; 参数 执行 mysqladmin ; 使用 选项 执行 mysqldump 请参见 第13.7.7.3节“FLUSH语法” 第4.5.2节“ mysqladmin - 管理MySQL服务器的客户端” 第4.5.4节“ mysqldump - 数据库备份程序” flush-logs refresh --flush-logs --master-data 此外,当二进制日志的大小达到 max_binlog_size 系统变量 的值时,将刷新二进制日志

您可以在运行时控制常规查询和减慢查询日志。 您可以启用或禁用日志记录,也可以更改日志文件名。 您可以告诉服务器编写常规查询和慢速查询条目以记录表,日志文件或两者。 有关详细信息,请参见 第5.4.1节“选择常规查询日志和慢查询日志输出目标” 第5.4.3节“常规查询日志” 第5.4.5节“慢查询日志”

中继日志仅用于从属复制服务器,用于保存主服务器上的数据更改,该服务器也必须在从属服务器上进行。 有关中继日志内容和配置的讨论,请参见 第17.2.4.1节“从中继日志”

有关日志维护操作(如旧日志文件到期)的信息,请参见 第5.4.7节“服务器日志维护”

有关保持日志安全的信息,请参见 第6.1.2.3节“密码和日志记录”

5.4.1选择常规查询日志和慢查询日志输出目的地

如果启用了这些日志,MySQL Server可以灵活地控制写入常规查询日志和慢查询日志的输出目标。 日志条目的可能目标是日志文件或 系统数据库中 general_log slow_log mysql 可以选择文件输出,表格输出或两者。

服务器启动时的日志控制

所述 log_output 系统变量指定日志输出目的地。 设置此变量本身不会启用日志; 必须单独启用它们。

  • 如果 log_output 在启动时未指定,则默认日志记录目标为 FILE

  • 如果 log_output 在启动时指定,则其值是列表中选择的一个或多个逗号分隔的单词 TABLE 日志到表), FILE (记录到文件)或 NONE (不记录到表或文件)。 NONE ,如果存在,则优先于任何其他说明符。

general_log 系统变量控制记录到一般查询日志选定的日志目的地。 如果在服务器启动时指定, general_log 则使用可选参数1或0来启用或禁用日志。 要指定文件记录的默认值以外的文件名,请设置 general_log_file 变量。 同样, slow_query_log 变量控制记录到所选目标的慢查询日志,并且设置 slow_query_log_file 指定文件记录的文件名。 如果启用了任一日志,则服务器将打开相应的日志文件并将启动消息写入其中。 但是,除非,否则不会进一步将查询记录到文件中 FILE 选择了日志目标。

例子:

运行时的日志控制

与日志表和文件关联的系统变量使运行时控制日志记录:

  • log_output 变量表示当前的日志记录目标。 可以在运行时修改它以更改目标。

  • general_log slow_query_log 变量指示一般查询日志和慢查询日志是否已启用( ON )或禁用( OFF )。 您可以在运行时设置这些变量以控制是否启用日志。

  • general_log_file slow_query_log_file 变量指示一般查询日志和慢查询日志文件的名称。 您可以在服务器启动时或在运行时设置这些变量以更改日志文件的名称。

  • 要禁用或启用当前会话的常规查询日志记录,请将会话 sql_log_off 变量 设置 ON OFF (这假定已启用常规查询日志本身。)

日志表的好处和特征

使用表进行日志输出具有以下优点:

  • 日志条目具有标准格式。 要显示日志表的当前结构,请使用以下语句:

    SHOW CREATE TABLE mysql.general_log;
    SHOW CREATE TABLE mysql.slow_log;
    
  • 可以通过SQL语句访问日志内容。 这使得可以使用仅选择满足特定条件的那些日志条目的查询。 例如,要选择与特定客户端关联的日志内容(这对于从该客户端识别有问题的查询很有用),使用日志表比使用日志文件更容易。

  • 可以通过任何可以连接到服务器并发出查询的客户端远程访问日志(如果客户端具有相应的日志表权限)。 无需登录服务器主机并直接访问文件系统。

日志表实现具有以下特征:

  • 通常,日志表的主要目的是为用户提供一个接口,以观察服务器的运行时执行,而不是干扰其运行时执行。

  • CREATE TABLE ,, ALTER TABLE DROP TABLE 是日志表上的有效操作。 对于 ALTER TABLE DROP TABLE ,日志表不能使用,必须禁用,如后所述。

  • 默认情况下,日志表使用 CSV 以逗号分隔值格式写入数据 存储引擎。 对于有权访问 .CSV 包含日志表数据的文件的 用户,可以 将文件轻松导入其他程序,例如可以处理CSV输入的电子表格。

    可以更改日志表以使用 MyISAM 存储引擎。 您不能用于 ALTER TABLE 更改正在使用的日志表。 必须先禁用日志。 日志表 之外没有其他引擎 CSV MyISAM 合法的 引擎

    日志表和 打开的文件太多 错误。  如果选择 TABLE 作为日志目标并且日志表使用 CSV 存储引擎,您可能会发现在运行时重复禁用和启用常规查询日志或慢速查询日志 .CSV 会导致 文件的许多打开 文件描述符,从而可能导致 打开文件太多 错误。 要解决此问题,请执行 FLUSH TABLES 或确保值 open_files_limit 大于值 table_open_cache_instances

  • 要禁用日志记录以便可以更改(或删除)日志表,可以使用以下策略。 该示例使用通用查询日志; 慢查询日志的过程类似,但使用 slow_log 表和 slow_query_log 系统变量。

    SET @old_log_state = @@ GLOBAL.general_log;
    SET GLOBAL general_log ='OFF';
    ALTER TABLE mysql.general_log ENGINE = MyISAM;
    SET GLOBAL general_log = @old_log_state;
    
  • TRUNCATE TABLE 是对日志表的有效操作。 它可用于使日志条目到期。

  • RENAME TABLE 是对日志表的有效操作。 您可以使用以下策略以原子方式重命名日志表(例如,执行日志轮换):

    使用mysql;
    DROP TABLE IF EXISTS general_log2;
    CREATE TABLE general_log2 LIKE general_log;
    RENAME TABLE general_log TO general_log_backup,general_log2 TO general_log;
    
  • CHECK TABLE 是对日志表的有效操作。

  • LOCK TABLES 不能在日志表上使用。

  • INSERT ,,, DELETE 并且 UPDATE 不能在日志表上使用。 这些操作仅允许在服务器本身内部进行。

  • FLUSH TABLES WITH READ LOCK 并且 read_only 系统变量 的状态 对日志表没有影响。 服务器始终可以写入日志表。

  • 写入日志表的条目不会写入二进制日志,因此不会复制到从属服务器。

  • 要刷新日志表或日志文件 ,请分别 使用 FLUSH TABLES FLUSH LOGS

  • 不允许对日志表进行分区。

  • 一个 mysqldump的 转储包括报表中重新创建这些表,以便它们不会重新加载转储文件后失踪。 不转储日志表内容。

5.4.2错误日志

本节讨论如何配置MySQL服务器以将诊断消息记录到错误日志中。 有关选择错误消息字符集或语言的信息,请参见 第10.6节“错误消息字符集” 第10.11节“设置错误消息语言”

错误日志包含 mysqld 启动和关闭时间 的记录 它还包含诊断消息,例如在服务器启动和关闭期间以及服务器运行时发生的错误,警告和注释。 例如,如果 mysqld 注意到需要自动检查或修复表,它会将消息写入错误日志。

在某些操作系统上,如果 mysqld 异常退出 ,则错误日志包含堆栈跟踪 跟踪可用于确定 mysqld 退出的位置。 请参见 第29.5节“调试和移植MySQL”

如果用于启动 mysqld mysqld_safe 可能会将消息写入错误日志。 例如,当 mysqld_safe 注意到 mysqld 出现 异常 ,它会重新启动 mysqld 并将 mysqld restarted 消息 写入 错误日志。

以下部分讨论配置错误日志记录的各个方面。

5.4.2.1错误日志组件配置

在MySQL 8.0中,错误记录使用 第5.5节“MySQL服务器组件”中 描述的MySQL组件体系结构 错误日志子系统由执行日志事件过滤和写入的组件以及配置哪些组件以实现所需日志记录结果的系统变量组成。

本节讨论如何选择错误日志记录的组件。 有关日志过滤器的特定说明,请参见 第5.4.2.3节“错误日志过滤类型” 有关JSON和系统日志编写器的特定说明,请参见 第5.4.2.6节“以JSON格式记录错误” 第5.4.2.7节“记录到系统日志中的错误” 有关所有可用日志组件的其他详细信息,请参见 第5.5.3节“错误日志组件”

基于组件的错误记录提供以下功能:

  • 可以通过过滤器组件过滤日志事件,以影响可用于写入的信息。

  • 日志事件由接收器(编写器)组件输出。 可以启用多个接收器组件,以将错误日志输出写入多个目标。

  • 内置过滤器和写入器组件组合在一起以实现默认的错误日志格式。

  • 可加载的编写器支持以JSON格式登录。

  • 可加载的写入程序允许记录到系统日志。

  • 系统变量控制要启用的日志组件以及每个组件的运行方式。

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

默认情况下, log_error_services 具有此值:

MySQL的> SELECT @@GLOBAL.log_error_services;
+ ---------------------------------------- +
| @@ GLOBAL.log_error_services |
+ ---------------------------------------- +
| log_filter_internal; log_sink_internal |
+ ---------------------------------------- +

该值表示日志事件首先通过内置过滤器组件 log_filter_internal ,然后通过内置日志编写器组件 log_sink_internal 过滤器修改后面在名称中命名的组件所看到的日志事件 log_error_services 接收器是日志事件的目标。 通常,接收器将日志事件处理为具有特定格式的日志消息,并将这些消息写入其关联的输出,例如文件或系统日志。

注意

分配 log_error_services 不包含编写器组件的值不会导致从该点写入日志输出。

值中的最后一个组件 log_error_services 应该是writer。 如果最终组件是过滤器,则该组件无效,因为过滤的事件不会发送到任何编写器。

组合 log_filter_internal log_sink_internal 实现默认的错误日志过滤和输出行为。 这些组件的操作受其他服务器选项和系统变量的影响:

要更改用于错误日志记录的日志组件集,请根据需要加载组件并修改该 log_error_services 值。 添加或删除日志组件受以下限制:

例如,要使用系统日志writer( log_sink_syseventlog )而不是默认的writer( log_sink_internal ),首先加载writer组件,然后修改 log_error_services 值:

INSTALL COMPONENT'file:// component_log_sink_syseventlog';
SET GLOBAL log_error_services ='log_filter_internal; log_sink_syseventlog“;
注意

用于加载日志组件的URN INSTALL COMPONENT 是前缀为的组件名称 file://component_ 例如,对于 log_sink_syseventlog 组件,相应的URN是 file://component_log_sink_syseventlog

可以配置多个日志写入器,从而可以将输出发送到多个目标。 要启用系统日志编写器(而不是代替)默认编写器,请设置如下所示的 log_error_services 值:

SET GLOBAL log_error_services ='log_filter_internal; log_sink_internal; log_sink_syseventlog“;

要恢复为仅使用默认编写器并卸载系统日志编写器,请执行以下语句:

SET GLOBAL log_error_services ='log_filter_internal; log_sink_internal;
UNINSTALL COMPONENT'file:// component_log_sink_syseventlog';

要配置要在每个服务器启动时启用的日志组件,请使用以下过程:

  1. 如果组件是可加载的,请在运行时使用加载它 INSTALL COMPONENT 加载组件会将其注册到 mysql.component 系统表中,以便服务器自动加载它以用于后续启动。

  2. log_error_services 在启动时 设置 值以包括组件名称。 在服务器 my.cnf 文件中 设置值 ,或者使用 SET PERSIST ,它设置正在运行的MySQL实例的值,并保存用于后续服务器重启的值; 请参见 第13.7.5.1节“变量赋值的SET语法” 设置的值在 my.cnf 下次重新启动时生效。 使用的值设置 SET PERSIST 立即生效,并用于后续重新启动。

假设您要为每个服务器启动配置 log_sink_json 除了内置日志过滤器和编写器( log_filter_internal log_sink_internal 之外还 使用JSON日志writer( )。 首先加载JSON编写器(如果未加载):

INSTALL COMPONENT'file:// component_log_sink_json';

然后设置 log_error_services 为在服务器启动时生效。 您可以将其设置为 my.cnf

的[mysqld]
log_error_services ='log_filter_internal; log_sink_internal; log_sink_json”

或者您可以使用 SET PERSIST 以下 方式设置

SET PERSIST log_error_services ='log_filter_internal; log_sink_internal; log_sink_json“;

命名的组件的顺序 log_error_services 是重要的,特别是关于过滤器和写入器的相对顺序。 考虑这个 log_error_services 值:

log_filter_internal; log_sink_1; log_sink_2

在这种情况下,日志事件传递给内置过滤器,然后传递给第一个编写器,然后传递给第二个编写器。 两个编写者都会收到过滤后的日志事件。

将其与此 log_error_services 进行比较

log_sink_1; log_filter_internal; log_sink_2

在这种情况下,日志事件传递给第一个编写器,然后传递给内置过滤器,然后传递给第二个编写器。 第一位作家收到未经过滤的事件。 第二个作者接收过滤事件。 如果希望一个日志包含所有日志事件的消息,并且另一个日志仅包含针对日志事件子集的消息,则可以按此方式配置错误日志记录。

5.4.2.2默认错误日志目标配置

本节讨论哪些服务器选项配置默认错误日志目标,可以是控制台或命名文件。 它还指示哪些日志写入程序组件将其自己的输出目标基于默认目标。

在本讨论中, 控制台 表示 stderr 标准错误输出。 这是您的终端或控制台窗口,除非标准错误输出已重定向到其他目标。

对于Windows和Unix系统,服务器解释确定默认错误日志目标的选项略有不同。 请务必使用适合您平台的信息配置目标:

在服务器解释默认错误日志目标选项后,它会设置 log_error 系统变量以指示默认目标,这会影响多个日志写程序组件写入错误消息的位置。 请参见 默认错误日志目标如何影响日志写入程序

Windows上的默认错误日志目标

在Windows上, mysqld的 使用 --log-error --pid-file --console 选项来确定默认的错误日志目的地是否是控制台或文件,并且,如果一个文件,文件名:

  • 如果 --console 给定,则默认目标是控制台。 --console 优先于 --log-error 两者都给出,以下项目 --log-error 不适用。)

  • 如果 --log-error 未给出,或者在未命名文件的情况下给出,则默认目标是 host_name.err 数据目录 --pid-file 中指定 的文件 ,除非 指定了 选项。 在这种情况下,文件名是PID文件基本名称, .err 在数据目录中 带有后缀

  • 如果 --log-error 命名文件,则默认目标是该文件( .err 如果名称没有后缀,则添加后缀),位于数据目录下,除非给出绝对路径名以指定其他位置。

如果默认错误日志目标是控制台,则服务器将 log_error 系统变量设置为 stderr 否则,默认目标是文件,服务器设置 log_error 为文件名。

Unix和类Unix系统上的默认错误日志目标

在Unix和类Unix系统上, mysqld 使用该 --log-error 选项来确定默认错误日志目标是控制台还是文件,如果是文件,则确定文件名:

  • 如果 --log-error 未给出,则默认目标是控制台。

  • 如果 --log-error 在没有命名文件的情况下给出,则默认目标是 host_name.err 在数据目录中 命名的文件

  • 如果 --log-error 命名文件,则默认目标是该文件( .err 如果名称没有后缀,则添加后缀),位于数据目录下,除非给出绝对路径名以指定其他位置。

  • 如果 --log-error 在选项文件中给定的 [mysqld] [server] [mysqld_safe] 部分, mysqld_safe的 查找和使用的选项,并将其传递到 mysqld的

注意

Yum或APT软件包安装通常 使用服务器配置文件中 /var/log 的选项 配置错误日志文件位置 log-error=/var/log/mysqld.log 从选项中删除文件名会导致 host_name.err 使用数据目录中 文件。

如果默认错误日志目标是控制台,则服务器将 log_error 系统变量设置为 stderr 否则,默认目标是文件,服务器设置 log_error 为文件名。

默认错误日志目标如何影响日志编写器

在服务器解释错误日志目标配置选项后,它会设置 log_error 系统变量以指示默认错误日志目标。 日志编写器组件可以将自己的输出目标基于 log_error 值,或者独立地确定其目标 log_error

如果 log_error stderr ,则默认错误日志目标是控制台,并且将其输出目标基于默认目标的日志编写器也写入控制台:

  • log_sink_internal log_sink_json log_sink_test :这些作家写到控制台。 即使对于诸如 log_sink_json 可以多次启用的 编写者也是如此 ; 所有实例都写入控制台。

  • log_sink_syseventlog :无论 log_error 如何,此writer都会写入系统日志

如果 log_error 不是 stderr ,则默认错误日志目标是文件并 log_error 指示文件名。 将其输出目标基于默认目标库输出文件的日志编写器命名为该文件名。 (作者可能使用该名称,或者可能使用其中的一些变体。)假设该 log_error file_name 然后日志编写者使用如下名称:

  • log_sink_internal log_sink_test :这些作家写信给 file_name

  • log_sink_json :此 log_error_services 编写器的 连续实例在 值中写入名为 file_name plus的 文件, 加上编号 后缀: 等等。 .NN.json file_name.00.json file_name.01.json

  • log_sink_syseventlog :无论 log_error 如何,此writer都会写入系统日志

5.4.2.3错误日志过滤的类型

错误日志配置通常包括一个日志过滤器组件和一个或多个日志写入器组件。 对于错误日志过滤,MySQL提供了多种组件选择:

5.4.2.4基于优先级的错误日志过滤(log_filter_internal)

log_filter_internal 日志过滤器组件实现基于误差事件优先级和错误码日志过滤的简单形式。 要影响 log_filter_internal 允许或禁止用于错误日志的错误,警告和信息事件的方式,请设置 log_error_verbosity log_error_suppression_list 系统变量。

log_filter_internal 内置并默认启用。 如果此过滤器已禁用 log_error_verbosity log_error_suppression_list 无效,则必须使用其他过滤器服务对过滤进行建模(例如,使用时使用单个过滤器规则 log_filter_dragnet )。 有关过滤器配置的信息,请参见 第5.4.2.1节“错误日志组件配置”

详细程度过滤

用于错误日志事件具有的优先级 ERROR WARNING INFORMATION log_error_verbosity 此基础上的优先级系统变量控制冗长,以允许用于写入日志消息,如图所示,在下表中。

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

如果 log_error_verbosity 为2或更大,则服务器会记录有关基于语句的日志记录不安全的语句的消息。 如果值为3,则服务器会记录新连接尝试的已中止连接和访问被拒绝错误。 请参见 第B.4.2.10节“通信错误和中止的连接”

如果使用复制, log_error_verbosity 建议 使用 值2或更大,以获取有关正在发生的情况的更多信息,例如有关网络故障和重新连接的消息。

如果 log_error_verbosity 从属服务器上为2或更大,则从属服务器将消息打印到错误日志以提供有关其状态的信息,例如二进制日志和中继日志坐标开始工作,何时切换到另一个中继日志,何时它在断开连接后重新连接,依此类推。

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

在MySQL错误日志中,系统消息标记为 系统 其他日志编写器可能会也可能不遵循相同的约定,并且在生成的日志中,系统消息可能会被分配用于信息优先级的标签,例如 Note Information 如果根据消息标记应用任何其他过滤或重定向进行日志记录,则系统消息不会覆盖您的过滤器,但会以与其他消息相同的方式处理。

抑制列表过滤

log_error_suppression_list 系统变量适用于用于错误日志事件,并指定时,他们用的优先级进行打压的事件 WARNING INFORMATION 例如,如果特定类型的警告 在错误日志中 被认为是不合需要的 噪声 ,因为它经常发生但不感兴趣,则可以抑制它。

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

ER_SERVER_SHUTDOWN_COMPLETE
MY-000031
000031
MY-31
31

对于可读性和可移植性,符号值优于数值。

虽然要抑制的代码可以用符号或数字形式表示,但每个代码的数值必须在允许的范围内:

  • 1到999:服务器和客户端使用的全局错误代码。

  • 10000及更高:用于写入错误日志的服务器错误代码(不发送给客户端)。

此外,MySQL指定的每个错误代码实际上都必须使用。 尝试指定不在允许范围内或允许范围内但MySQL未使用的代码会产生错误,并且 log_error_suppression_list 值保持不变。

有关错误代码范围以及每个范围内定义的错误符号和数字的信息,请参阅 附录B, 错误,错误代码和常见问题

服务器可以为不同优先级的给定错误代码生成消息,因此抑制与列出的错误代码相关联的消息 log_error_suppression_list 取决于其优先级。 假设变量的值为 'ER_PARSER_TRACE,MY-010001,10002' 然后 log_error_suppression_list 有这些影响:

  • 如果以优先级为 WARNING 生成,则会抑制这些代码的消息 INFORMATION

  • 生成的优先级为 ERROR SYSTEM 未被抑制的消息。

详细程度和抑制列表交互

log_error_verbosity 结合 的效果 log_error_suppression_list 考虑使用这些设置启动的服务器:

的[mysqld]
log_error_verbosity = 2#仅错误和警告消息
log_error_suppression_list = 'ER_PARSER_TRACE,MY-010001,10002'

在这种情况下, log_error_verbosity 允许以邮件 ERROR WARNING 优先级,并丢弃报文 INFORMATION 优先级。 在未被 log_error_suppression_list 丢弃的 消息中, 丢弃具有 WARNING 优先级的 消息 和任何指定的错误代码。

注意

log_error_verbosity 示例中显示 值2也是其默认值,因此默认情况下,此变量对 INFORMATION 消息的影响如下所述,没有显式设置。 log_error_verbosity 如果要 优先 log_error_suppression_list 影响邮件, 必须设置 为3 INFORMATION

考虑使用此设置启动的服务器:

的[mysqld]
log_error_verbosity =仅1#错误消息

在这种情况下, log_error_verbosity 允许具有 ERROR 优先级的消息并丢弃具有 WARNING INFORMATION 优先级的 消息 设置 log_error_suppression_list 将无效,因为它可能抑制的所有错误代码已由于 log_error_verbosity 设置 而被丢弃

5.4.2.5基于规则的错误日志过滤(log_filter_dragnet)

log_filter_dragnet 日志过滤器组件能够基于用户定义的规则日志过滤。 要定义适用的规则,请设置 dragnet.log_error_filter_rules 系统变量。

要启用 log_filter_dragnet 过滤器,首先加载过滤器组件,然后修改该 log_error_services 值。 以下示例 log_filter_dragnet 与内置日志编写器结合使用:

INSTALL COMPONENT'file:// component_log_filter_dragnet';
SET GLOBAL log_error_services ='log_filter_dragnet; log_sink_internal“;

要设置 log_error_services 为在服务器启动时生效,请使用 第5.4.2.1节“错误日志组件配置”中的说明 这些说明也适用于其他错误记录系统变量。

随着 log_filter_dragnet 启动,通过设置定义它的过滤规则 dragnet.log_error_filter_rules 系统变量。 规则集由零个或多个规则组成,其中每个规则是 IF 由句点( . )字符 终止 语句 如果变量值为空(零规则),则不进行过滤。

示例1.此规则集删除信息事件,对于其他事件,删除 source_line 字段:

SET GLOBAL dragnet.log_error_filter_rules =
  '如果prio> =信息然后下降。如果EXISTS source_line那么取消设置source_line。';

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

示例2:此规则将信息事件限制为每60秒不超过一个:

SET GLOBAL dragnet.log_error_filter_rules =
  '如果prio> =信息那么油门1/60。';

根据需要设置过滤配置后,请考虑 dragnet.log_error_filter_rules 使用 SET PERSIST 而不是 SET GLOBAL 使设置在服务器重新启动时保持不变。 或者,将设置添加到服务器选项文件。

要停止使用过滤语言,请先从错误日志记录组件集中删除它。 通常这意味着使用不同的过滤器组件而不是过滤器组件。 例如:

SET GLOBAL log_error_services ='log_filter_internal; log_sink_internal“;

同样,请考虑使用using SET PERSIST 而不是 SET GLOBAL 使设置在服务器重新启动时保持不变。

然后卸载过滤器 log_filter_dragnet 组件:

UNINSTALL COMPONENT'file:// component_log_filter_dragnet';

以下部分 log_filter_dragnet 更详细地 描述了 操作的 各个方面

log_filter_dragnet规则语言

以下语法定义了 log_filter_dragnet 过滤规则 的语言 每个规则都是一个 IF 以句点( . )字符 结尾 语句 该语言不区分大小写。

rule
    如果condition那么action
    [ELSEIF condition那么action] ......
    [ELSE action]

condition:{
     
  | [NOT] EXISTS 
  | {AND | 要么}  field comparator valuefieldconditioncondition
}

action:{
    下降
  | 油门{ count| count/ window_size}
  | 设置field[:= | =] value
  | 未设置[ field]
}

field:{
     core_field
  | optional_field
  |user_defined_field
}

core_field:{
    时间
  | 味精
  | PRIO
  | 标签
  | err_code
  | err_symbol
  | 的sql_state
  | 子系统
}

optional_field:{
    OS_errno
  | OS_errmsg
  | 用户
  | 主办
  | 线
  | query_id
  | 源文件
  | source_line
  | 功能
}

user_defined_fieldsequence of characters in [a-zA-Z0-9_] class

comparator:{== | != | <> | > = | => | <= | = <| <| >}

value:{
     string_literal
  | integer_literal
  | float_literal
  | error_symbol
  |priority
}

countinteger_literal
window_sizeinteger_literal

string_literalsequence of characters quoted as '...' or "..."

integer_literalsequence of characters in [0-9] class

float_literalinteger_literal[。integer_literal]

error_symbolvalid MySQL error symbol such as ER_ACCESS_DENIED_ERROR or ER_STARTUP

priority:{
    错误
  | 警告
  | 信息
}

简单条件将字段与值或测试字段存在进行比较。 要构建更复杂的条件,请使用 AND OR 运算符。 两个运算符具有相同的优先级,并从左到右进行求值。

要转义字符串中的字符,请在其前面加上反斜杠( \ )。 反斜杠需要包含反斜杠本身或字符串引用字符,其他字符可选。

为方便起见, log_filter_dragnet 支持用于与某些字段进行比较的符号名称。 在适用的情况下,符号值优于数值,以提高可读性和便携性。

  • 事件优先级值1,2,和3可被指定为 ERROR WARNING ,和 INFORMATION 优先级符号仅在与 prio 字段 比较时才被识别 这些比较是等效的:

    如果prio ==信息然后......
    如果prio == 3那么......
    
  • 错误代码可以用数字形式指定,也可以指定为相应的错误符号。 例如, ER_STARTUP 是错误的符号名称 1408 ,因此这些比较是等效的:

    如果err_code == ER_STARTUP那么......
    如果err_code == 1408然后......
    

    仅在与 err_code 字段和用户定义字段 进行比较时才能识别错误符号

    要查找与给定错误代码编号对应的错误符号,请使用以下方法之一:

    假设带有错误编号的规则集如下所示:

    如果err_code == 10927或者err_code == 10914那么下降。
    如果err_code == 1131那么下降。
    

    使用 perror ,确定错误符号:

    外壳> perror 10927 10914 1131
    MySQL错误代码MY-010927(ER_ACCESS_DENIED_FOR_USER_ACCOUNT_LOCKED):
    用户'%-.48s'@'%-.64s'拒绝访问。帐户被锁定。
    MySQL错误代码MY-010914(ER_ABORTING_USER_CONNECTION):
    中止连接%u到db:'% - 。192s'用户:'% - 。48s'主机:
    '% -  .64s'(% -  .64s)。
    MySQL错误代码MY-001131(ER_PASSWORD_ANONYMOUS_USER):
    您使用MySQL作为匿名用户和匿名用户
    不允许更改密码
    

    将错误符号替换为数字,规则集变为:

    IF err_code == ER_ACCESS_DENIED_FOR_USER_ACCOUNT_LOCKED
      或者err_code == ER_ABORTING_USER_CONNECTION然后下降。
    IF err_code == ER_PASSWORD_ANONYMOUS_USER然后掉线。
    

可以将符号名称指定为带引号的字符串,以便与字符串字段进行比较,但在这种情况下,名称是没有特殊含义的字符串,并且 log_filter_dragnet 不会将它们解析为相应的数字值。 此外,错别字可能未被检测到,而 SET 对于尝试使用服务器未知的未加引号的符号会 立即引发错误

log_filter_dragnet规则操作

log_filter_dragnet 在过滤规则中支持这些操作:

  • drop :删除当前日志事件(不要记录它)。

  • throttle :应用速率限制以减少与特定条件匹配的事件的日志详细程度。 所述参数指示的速率,在形式 count count / window_size count 值指示每个时间窗口记录的允许事件数。 window_size 值是以秒为单位的时间窗口; 如果省略,则默认窗口为60秒。 两个值都必须是整数文字。

    此规则将插件关闭消息限制为每60秒5个:

    IF err_code == ER_PLUGIN_SHUTTING_DOWN_PLUGIN那么油门5。
    

    此规则将错误和警告限制为每小时1000次,信息消息每小时100次:

    IF prio <= INFORMATION THEN油门1000/3600 ELSE油门100/3600。
    
  • set :为字段分配值(如果字段尚未存在,则使字段存在)。 在后续规则中, EXISTS 针对字段名称的测试为真,并且可以通过比较条件测试新值。

  • unset :丢弃一个字段。 在后续规则中, EXISTS 针对字段名称的测试是错误的,并且字段与任何值的比较都是错误的。

    在条件仅引用一个字段名称的特殊情况下,后面的字段名称 unset 是可选的,并 unset 丢弃命名字段。 这些规则是等效的:

    如果myfield == 2那么未设置myfield。
    如果myfield == 2那么未设置。
    
log_filter_dragnet规则字段

log_filter_dragnet 支持规则中的核心,可选和用户定义字段:

  • 为错误事件自动设置核心字段。 但是,它在事件中的存在不能得到保证,因为核心字段(如任何类型的字段)可能会被过滤规则取消设置。 如果是这样,那么将在规则集中的后续规则以及在过滤器之后执行的组件(例如日志编写器)中找不到该字段。

  • 通常不存在可选字段,但某些事件类型可能存在。 如果存在,可选字段会根据需要提供其他事件信息。

  • 用户定义的字段是名称尚未定义为核心或可选字段的任何字段。 在使用 set 操作 创建之前,用户定义的字段不存在

如前面的描述所暗示的,任何给定的字段可以不存在,或者因为它首先不存在,或者被过滤规则丢弃。 对于日志编写者,字段缺失的影响是特定于编写者的。 例如,编写器可能会从日志消息中省略该字段,指示该字段缺失或替换默认值。 如有疑问,请使用过滤规则取消设置字段,然后检查日志编写器对其执行的操作。

这些字段是核心字段:

  • time

    事件时间戳。

  • msg

    事件消息字符串。

  • prio

    事件优先级,用于指示错误,警告或注释/信息事件。 该字段对应于严重性 syslog

    在比较中,可以将每个优先级指定为符号优先级名称或整数文字。 优先级符号仅在与 prio 字段 比较时才被识别 这些比较是等效的:

    如果prio ==信息然后......
    如果prio == 3那么......
    

    下表显示了允许的优先级。

    事件类型 优先符号 数字优先级
    错误事件 ERROR 1
    警告事件 WARNING 2
    注释/信息事件 INFORMATION 3

    还有一个优先级 SYSTEM ,但系统消息无法过滤,并始终写入错误日志。

    通常,消息优先级确定如下:

    情况或事件是否可行?

    • 是的:情况或事件是否可以忽略?

      • 是的:优先级是 WARNING

      • 不:优先权是 ERROR

    • 否:情况或事件是强制性的吗?

      • 是的:优先级是 SYSTEM

      • 不:优先权是 INFORMATION

    优先级值遵循较高优先级具有较低值的原则,反之亦然。 对于最严重的事件(错误),优先级值从1开始,对于优先级降低的事件,优先级值增加。 例如,要丢弃优先级低于警告的事件,请测试高于以下值的优先级值 WARNING

    如果prio>警告然后下降。
    

    以下示例显示了 log_filter_dragnet 实现类似于 过滤器 log_error_verbosity 允许的 每个 的效果 规则 log_filter_internal

    • 仅错误( log_error_verbosity=1 ):

      如果prio>错误然后下降。
      
    • 错误和警告( log_error_verbosity=2 ):

      如果prio>警告然后下降。
      
    • 错误,警告和注释( log_error_verbosity=3 ):

      如果prio>信息然后下降。
      

      实际上可以省略此规则,因为没有 prio 大于的值 INFORMATION ,所以实际上它不会丢失任何内容。

  • err_code

    数字事件错误代码。 在比较中,要测试的值可以指定为符号错误名称或整数文字。 仅在与 err_code 字段和用户定义字段 进行比较时才能识别错误符号 这些比较是等效的:

    如果err_code == ER_ACCESS_DENIED_ERROR那么......
    如果err_code == 1045然后......
    
  • err_symbol

    事件错误符号,作为字符串(例如 'ER_DUP_KEY' )。 err_symbol 值更多用于标识日志输出中的特定行,而不是用于过滤器规则比较,因为 log_filter_dragnet 不会将指定为字符串的比较值解析为等效的数字错误代码。

  • SQL_state

    事件SQLSTATE值,作为字符串(例如 '23000' )。

  • subsystem

    事件发生的子系统。 可能的值是 InnoDB InnoDB 存储引擎), Repl (复制子系统), Server (否则)。

可选字段分为以下几类:

有关错误的其他信息,例如操作系统发出的错误或错误标签:

  • OS_errno

    操作系统错误号。

  • OS_errmsg

    操作系统错误消息。

  • label

    prio 对应的标签 ,作为字符串。 过滤规则可以更改支持自定义标签的日志编写器的标签。 label 值更多用于标识日志输出中的特定行,而不是用于过滤器规则比较,因为 log_filter_dragnet 不会将指定为字符串的比较值解析为等效的数字优先级。

识别发生事件的客户端:

  • user

    客户端用户。

  • host

    客户端主机。

  • thread

    线程ID。

  • query_id

    查询ID。

调试信息:

  • source_file

    发生事件的源文件。 文件名应省略任何前导路径。 例如,要测试 sql/gis/distance.cc 文件,请按以下方式编写比较:

    如果source_file ==“distance.cc”那么......
    
  • source_line

    发生事件的源文件中的行。

  • function

    事件发生的功能。

  • component

    发生事件的组件或插件。

5.4.2.6以JSON格式记录错误

本节介绍如何使用内置过滤器 log_filter_internal 和JSON编写 器配置错误日志记录 log_sink_json ,以使其立即生效以及后续服务器启动。 有关配置错误日志记录的一般信息,请参见 第5.4.2.1节“错误日志组件配置”

要启用JSON编写器,首先加载writer组件,然后修改 log_error_services 值:

INSTALL COMPONENT'file:// component_log_sink_json';
SET GLOBAL log_error_services ='log_filter_internal; log_sink_json“;

要设置 log_error_services 为在服务器启动时生效,请使用 第5.4.2.1节“错误日志组件配置”中的说明 这些说明也适用于其他错误记录系统变量。

允许 log_sink_json log_error_services 值中 多次 命名 例如,要使用一个实例编写未筛选的事件并使用另一个实例编写筛选的事件,您可以这样设置 log_error_services

SET GLOBAL log_error_services ='log_sink_json; log_filter_internal; log_sink_json“;

JSON日志编写器根据 log_error 系统变量 给出的默认错误日志目标确定其输出目标 如果 log_error 命名文件,则JSON 编写器将 输出文件命名为该文件名,加上编号 后缀, 从00开始。例如,如果 中的 连续 命名 实例 写入 等等。 .NN.json NN log_error file_name log_sink_json log_error_services file_name.00.json file_name.01.json

如果 log_error stderr ,则JSON编写器写入控制台。 如果 log_json_writer log_error_services 值中 多次命名 ,它们都会写入控制台,这可能没用。

5.4.2.7错误记录到系统日志

mysqld 可以 将错误日志写入系统日志(Windows syslog 的事件日志,以及 Unix和类Unix系统上)。

本节介绍如何使用内置过滤器 log_filter_internal 和系统日志写入 器配置错误日志记录 log_sink_syseventlog ,以便立即生效并为后续服务器启动生效。 有关配置错误日志记录的一般信息,请参见 第5.4.2.1节“错误日志组件配置”

要启用系统日志编写器,首先加载writer组件,然后修改 log_error_services 值:

INSTALL COMPONENT'file:// component_log_sink_syseventlog';
SET GLOBAL log_error_services ='log_filter_internal; log_sink_syseventlog“;

要设置 log_error_services 为在服务器启动时生效,请使用 第5.4.2.1节“错误日志组件配置”中的说明 这些说明也适用于其他错误记录系统变量。

注意

对于MySQL 8.0配置,必须明确启用错误日志记录到系统日志。 这与MySQL 5.7及更早版本不同,默认情况下,在Windows上启用了错误记录到系统日志,并且在所有平台上都不需要加载组件。

记录到系统日志时出错可能需要额外的系统配置。 请参阅所用平台的系统日志文档。

在Windows上,写入应用程序日志中的事件日志的错误消息具有以下特征:

  • 标记为 Error Warning Note 写入事件日志的 条目 ,但不是诸如来自各个存储引擎的信息语句之类的消息。

  • 事件日志条目具有 MySQL (或者 如果 定义为 )的源。 MySQL-tag syseventlog.tag tag

在Unix和类Unix系统上,记录到系统日志使用 syslog 以下系统变量会影响 syslog 消息:

  • syseventlog.facility syslog 消息 的默认工具 daemon 设置此变量以指定其他工具。

  • syseventlog.include_pid :是否在每行 syslog 输出中 包含服务器进程ID

  • syseventlog.tag :此变量定义要添加到 消息中 的服务器标识符( mysqld 的标记 syslog 如果已定义,则标记将附加到带有前导连字符的标识符。

注意

在此之前的MySQL 8.0.13,使用 log_syslog_facility log_syslog_include_pid log_syslog_tag 系统变量,而不是 变量。 syseventlog.xxx

MySQL使用自定义标签 System 来获取有关非错误情况的重要系统消息,例如启动,关闭以及对设置的一些重大更改。 在不支持自定义标签的日志中,包括Windows syslog 的事件日志,以及 Unix和类Unix系统,系统消息将分配用于信息优先级的标签。 但是,即使MySQL log_error_verbosity 设置通常排除信息级别的消息 ,这些消息也会打印到日志中

当日志编写器必须 以这种方式 回退到 信息 而不是 系统 的标签 ,并且日志事件在MySQL服务器之外进一步处理(例如,通过 syslog 配置 过滤或转发 ),这些事件可能默认情况下,辅助应用程序将其处理为 信息 优先级而不是 系统 优先级。

5.4.2.8错误日志消息格式

每个错误日志接收器(编写器)组件都具有用于将消息写入其目标的特征输出格式,但其他因素可能会影响消息的内容:

对于所有日志编写器,错误日志消息中包含的ID是 mysqld中 负责编写消息 的线程的ID 这表示服务器的哪个部分生成了消息,并且与通用查询日志和慢查询日志消息(包括连接线程ID)一致。

log_sink_internal的输出格式

此日志编写器生成传统的错误日志输出。 它使用以下格式写入消息:

timestamp thread_id[ priority] [ err_code] [ subsystem]message

[ ] 方括号字符是在消息格式文本字符。 它们不表示字段是可选的。

这些 字段在MySQL 8.0中添加。 旧服务器生成的日志中将丢失它们。 日志解析器可以将这些字段视为消息文本的一部分,这些字段仅出现在服务器写入的日志中,足以包含它们。 解析器必须将 指标 一部分 视为字符串值。 [err_code] [subsystem] err_code [err_code]

例子:

2018-03-22T12:35:47.538083Z 0 [注意] [MY-012487] [InnoDB] InnoDB:DDL日志恢复:开始
2018-03-22T12:35:47.550565Z 0 [警告] [MY-010068] [服务器] CA证书/var/mysql/sslinfo/cacert.pem是自签名的。
2018-03-22T12:35:47.669397Z 4 [注意] [MY-010051] [服务器]事件调度程序:调度程序线程以id 4启动
2018-03-22T12:35:47.550939Z 0 [注意] [MY-010253] [服务器] IPv6可用。
log_sink_json的输出格式

JSON格式的日志编写器将消息生成为包含键值对的JSON对象。 例如:

{“prio”:3,“err_code”:10051,“子系统”:“服务器”,
  “source_file”:“event_scheduler.cc”,“function”:“run”,
  “msg”:“事件调度程序:调度程序线程以id 4开头”,
  “时间”:“2018-03-22T12:35:47.669397Z”,“线程”:4,
  “err_symbol”:“ER_SCHEDULER_STARTED”,“SQL_state”:“HY000”,
  “label”:“注意”}
log_sink_syseventlog的输出格式

系统日志编写器生成的输出符合本地平台上使用的系统日志格式。

早期启动日志记录的输出格式

服务器在处理启动选项之前生成一些错误日志消息,因此在它知道错误日志设置(例如 log_error_verbosity log_timestamps 值)以及要使用哪些日志组件之前。 服务器处理在启动过程早期生成的错误日志消息,如下所示:

  • 在MySQL 8.0.14之前,服务器生成具有默认时间戳,格式和详细级别的消息,并缓冲它们。 处理启动选项并且已知错误日志配置后,服务器会刷新缓冲的消息。 由于这些早期消息使用默认日志配置,因此它们可能与启动选项指定的不同。 此外,早期消息不会刷新到默认日志以外的日志编写器。 例如,登录到JSON编写器不包括这些早期消息,因为它们不是JSON格式。

  • 从MySQL 8.0.14开始,服务器缓冲日志事件而不是格式化日志消息。 这使得它可以在知道设置后追溯将配置设置应用于这些事件,结果是刷新的消息使用配置的设置,而不是默认设置。 此外,消息将刷新到所有已配置的编写器,而不仅仅是默认编写器。

    如果在知道日志配置并且服务器必须退出之前发生致命错误,则服务器不会丢失。 如果在处理启动选项之前没有发生致命错误但启动过慢,则服务器会使用日志记录默认值定期格式化和刷新缓冲的消息,以免显示无响应。 尽管这些行为与8.0.14之前的行为类似,但使用默认值时,它们最好在发生异常情况时丢失消息。

影响错误日志格式的系统变量

log_timestamps 系统变量控制时间戳的写入错误日志消息(以及一般查询日志和慢查询日志文件)的时区。 允许的值是 UTC (默认值)和 SYSTEM (本地系统时区)。

5.4.2.9错误日志文件刷新和重命名

如果使用 FLUSH ERROR LOGS FLUSH LOGS mysqladmin flush-logs 刷新错误日志 服务器将关闭并重新打开它正在写入的任何错误日志文件。 要重命名错误日志文件,请在刷新之前手动执行此操作。 刷新日志然后打开一个包含原始文件名的新文件。 例如,假设日志文件名为 host_name.err ,要重命名文件并创建新文件,请使用以下命令:

mv host_name.err host_name.err-old
mysqladmin flush-logs
mv host_name.err-oldbackup-directory

在Windows上,使用 重命名 而不是 mv

如果服务器无法写入错误日志文件的位置,则日志刷新操作将无法创建新的日志文件。 例如,在Linux上,服务器可能会将错误日志写入 /var/log/mysqld.log 文件,其中 /var/log 目录 root mysqld 拥有 且不可写 有关处理此案例的信息,请参见 第5.4.7节“服务器日志维护”

如果服务器未写入命名的错误日志文件,则刷新错误日志时不会发生错误日志文件重命名。

5.4.3常规查询日志

通用查询日志是 mysqld 正在执行的操作 的一般记录 当客户端连接或断开连接时,服务器会将信息写入此日志,并记录从客户端收到的每个SQL语句。 当您怀疑客户端中存在错误并想要确切知道客户端发送给 mysqld的内容 时,通用查询日志非常有用

显示客户端连接时的每一行还包括 指示用于建立连接的协议。 (没有SSL建立的TCP / IP连接), (使用SSL建立TCP / IP连接), (Unix套接字文件连接), (Windows命名管道连接)或 (Windows共享内存连接)之一。 using connection_type connection_type TCP/IP SSL/TLS Socket Named Pipe Shared Memory

mysqld 按照接收它们的顺序将语句写入查询日志,这可能与它们的执行顺序不同。 此日志记录顺序与二进制日志的日志顺序形成对比,二进制日志的语句在执行后但在释放任何锁之前写入。 此外,查询日志可能包含仅选择数据的语句,而这些语句永远不会写入二进制日志。

在复制主服务器上使用基于语句的二进制日志记录时,其从属接收的语句将写入每个从属服务器的查询日志中。 如果客户端使用 mysqlbinlog 实用程序 读取事件 并将它们传递给 服务器,则会将语句写入主服务器的查询日志

然而,使用基于行的二进制日志记录时,更新的行更改,而不是SQL语句,因此当这些语句不会被写到查询日志发送 binlog_format ROW MIXED 根据所使用的语句, 当此变量设置为时,也可能不会将给定更新写入查询日志 有关更多 信息, 请参见 第17.2.1.1节“基于语句和基于行的复制的优点和缺点”

默认情况下,禁用常规查询日志。 要明确指定初始常规查询日志状态,请使用 --general_log[={0|1}] 如果没有参数或参数为1,则 --general_log 启用日志。 如果参数为0,则此选项会禁用日志。 要指定日志文件名,请使用 要指定日志目标,请使用 系统变量(如 第5.4.1节“选择常规查询日志和慢查询日志输出目标”中所述 )。 --general_log_file=file_name log_output

注意

如果指定 TABLE 日志目标,请参阅 日志表和 打开的文件太多 错误

如果没有为常规查询日志文件指定名称,则默认名称为 host_name.log 服务器在数据目录中创建文件,除非给出绝对路径名来指定不同的目录。

要在运行时禁用或启用常规查询日志或更改日志文件名,请使用全局 变量 general_log general_log_file 系统变量。 设置 general_log 为0(或 OFF )以禁用日志或设置为1(或 ON )以启用它。 设置 general_log_file 为指定日志文件的名称。 如果日志文件已打开,则会关闭该文件并打开新文件。

启用常规查询日志后,服务器会将输出写入 log_output 系统变量 指定的任何目标 如果启用日志,则服务器将打开日志文件并将启动消息写入其中。 但是,除非 FILE 选择 日志目标, 否则不会进一步将查询记录到文件中 如果目标是 NONE ,则即使启用了常规日志,服务器也不会写入任何查询。 如果日志目标值不包含,则设置日志文件名对日志记录没有影响 FILE

服务器重新启动和日志刷新不会导致生成新的常规查询日志文件(尽管刷新关闭并重新打开它)。 要重命名文件并创建一个新文件,请使用以下命令:

shell> 
shell> 
shell>mv host_name.log host_name-old.logmysqladmin flush-logsmv host_name-old.log backup-directory

在Windows上,使用 重命名 而不是 mv

您还可以通过禁用日志在运行时重命名常规查询日志文件:

SET GLOBAL general_log ='OFF';

禁用日志后,从外部重命名日志文件(例如,从命令行重命名)。 然后再次启用日志:

SET GLOBAL general_log ='ON';

此方法适用于任何平台,不需要重新启动服务器。

要禁用或启用当前会话的常规查询日志记录,请将会话 sql_log_off 变量 设置 ON OFF (这假定已启用常规查询日志本身。)

写入通用查询日志的语句中的密码将由服务器重写,而不是以纯文本形式发生。 通过使用该 --log-raw 选项 启动服务器,可以为通用查询日志禁止密码重写 此选项可用于诊断目的,以查看服务器收到的语句的确切文本,但出于安全原因,建议不要将其用于生产用途。 另请参见 第6.1.2.3节“密码和日志记录”

密码重写的含义是无法解析的语句(例如,由于语法错误)不会写入通用查询日志,因为无法知道它们是无密码的。 需要记录所有语句(包括有错误的语句)的用例应使用该 --log-raw 选项,请记住这也会绕过密码重写。

只有在需要纯文本密码时才会进行密码重写。 对于具有期望密码哈希值的语法的语句,不会发生重写。 如果为此类语法错误地提供了纯文本密码,则会将密码记录为给定,而不进行重写。

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

5.4.4二进制日志

二进制日志包含 描述数据库更改的 事件 ,例如表创建操作或对表数据的更改。 DELETE 除非使用基于行的日志记录,否则 它还包含可能已进行更改的语句(例如, 不匹配任何行的 语句)的事件 二进制日志还包含有关每个语句获取更新数据的时间长度的信息。 二进制日志有两个重要目的:

  • 对于复制,主复制服务器上的二进制日志提供要发送到从属服务器的数据更改的记录。 主服务器将其二进制日志中包含的事件发送到其从属服务器,这些服务器执行这些事件以对主服务器上的数据进行相同的更改。 请参见 第17.2节“复制实现”

  • 某些数据恢复操作需要使用二进制日志。 还原备份后,将重新执行备份后记录的二进制日志中的事件。 这些事件使数据库从备份点更新。 请参见 第7.5节“使用二进制日志进行时间点(增量)恢复”

二进制日志不用于诸如 SELECT SHOW 不修改数据的 语句 要记录所有语句(例如,标识问题查询),请使用常规查询日志。 请参见 第5.4.3节“常规查询日志”

运行启用了二进制日志记录的服务器会使性能稍慢。 但是,二进制日志使您能够设置复制和还原操作的好处通常会超过此次要性能下降。

二进制日志可以抵御意外停止。 仅记录或回读完整的事件或事务。

写入二进制日志的语句中的密码由服务器重写,不会以纯文本形式出现。 另请参见 第6.1.2.3节“密码和日志记录”

从MySQL 8.0.14开始,可以加密二进制日志文件和中继日志文件,有助于保护这些文件及其中包含的潜在敏感数据不被外部攻击者滥用,以及操作系统用户未经授权查看存储。 通过将 binlog_encryption 系统变量 设置为,可以在MySQL服务器上启用加密 ON 有关更多信息,请参见 第17.3.10节“加密二进制日志文件和中继日志文件”

以下讨论描述了影响二进制日志记录操作的一些服务器选项和变量。 有关完整列表,请参见 第17.1.6.4节“二进制日志记录选项和变量”

默认情况下启用二进制日志记录( log_bin 系统变量设置为ON)。 例外情况是,如果使用 mysqld 通过使用 --initialize or --initialize-insecure 选项 手动初始化数据目录 ,则默认情况下禁用二进制日志记录,但可以通过指定 --log-bin 选项 启用

要禁用二进制日志记录,可以 在启动时 指定 --skip-log-bin --disable-log-bin 选项。 如果指定了这些选项中的任何一个并且 --log-bin 也指定 了这些选项 ,则稍后指定的选项优先。

--log-slave-updates --slave-preserve-commit-order 选项需要二进制日志。 如果禁用二进制日志记录,请省略这些选项,或指定 --skip-log-slave-updates --skip-slave-preserve-commit-order MySQL时,默认情况下禁用这些选项 --skip-log-bin --disable-log-bin 指定的。 如果指定 --log-slave-updates --slave-preserve-commit-order 连同 --skip-log-bin 或者 --disable-log-bin ,发出警告或错误信息。

选项用于指定二进制日志文件的基本名称。 如果您不提供该 选项,MySQL将使用 二进制日志文件的默认基本名称。 为了与早期版本兼容,如果提供的 选项没有字符串或空字符串,则基本名称默认为 使用主机名称。 建议您指定基本名称,以便在主机名更改时,您可以轻松地继续使用相同的二进制日志文件名(请参见 第B.4.7节“MySQL中的已知问题” )。 如果在日志名称中提供扩展名(例如, ),则会以静默方式删除并忽略该扩展名。 --log-bin[=base_name] --log-bin binlog --log-bin host_name-bin --log-bin=base_name.extension

mysqld 将数字扩展名附加到二进制日志基本名称以生成二进制日志文件名。 每次服务器创建新日志文件时,该数字都会增加,从而创建一系列有序的文件。 每次启动或刷新日志时,服务器都会在系列中创建一个新文件。 服务器还会在当前日志大小达到后自动创建新的二进制日志文件 max_binlog_size 二进制日志文件可能会比 max_binlog_size 使用大型事务时 更大, 因为事务是以一个部分写入文件,而不是在文件之间分割。

为了跟踪已使用的二进制日志文件, mysqld 还创建了一个二进制日志索引文件,其中包含二进制日志文件的名称。 默认情况下,它具有与二进制日志文件相同的基本名称,并带有扩展名 '.index' 您可以使用该 选项 更改二进制日志索引文件的名称 mysqld 运行时, 您不应手动编辑此文件 ; 这样做会让 mysqld 感到困惑 --log-bin-index[=file_name]

术语 二进制日志文件 通常表示包含数据库事件的单个编号文件。 术语 二进制日志 共同表示编号的二进制日志文件集加上索引文件。

二进制日志文件和二进制日志索引文件的默认位置是数据目录。 您可以使用该 --log-bin 选项指定备用位置,方法是在基本名称中添加前导绝对路径名以指定其他目录。 当服务器从二进制日志索引文件中读取条目时,该文件跟踪已使用的二进制日志文件,它会检查条目是否包含相对路径。 如果是,则路径的相对部分将替换为使用的设置的绝对路径 --log-bin 选项。 二进制日志索引文件中记录的绝对路径保持不变; 在这种情况下,必须手动编辑索引文件以启用新路径。 二进制日志文件基本名称和任何指定的路径都可用作 log_bin_basename 系统变量。

在MySQL 5.7中,必须在启用二进制日志记录时指定服务器ID,否则服务器将无法启动。 在MySQL 8.0中, server_id 系统变量默认设置为1。 启用二进制日志记录时,可以使用此缺省ID启动服务器,但如果未使用该 --server-id 选项 明确指定服务器标识,则会发出信息性消息 对于复制拓扑中使用的服务器,必须为每个服务器指定唯一的非零服务器ID。

具有足以设置受限会话系统变量的权限的客户端(请参见 第5.1.9.1节“系统变量权限” )可以使用 SET sql_log_bin=OFF 语句 禁用其自己的语句的二进制日志记录

默认情况下,服务器记录事件的长度以及事件本身,并使用它来验证事件是否正确写入。 您还可以通过设置 binlog_checksum 系统变量 使服务器为事件编写校验和 从二进制日志中读回时,主服务器默认使用事件长度,但如果可用,则可以通过启用 master_verify_checksum 系统变量 来使用校验和 从I / O线程还验证从主站接收的事件。 通过启用 slave_sql_verify_checksum 系统变量 从中继日志读取时,可以使从属SQL线程使用校验和(如果可用)

二进制日志中记录的事件格式取决于二进制日志记录格式。 支持三种格式类型:基于行的日志记录,基于语句的日志记录和基于混合的日志记录。 使用的二进制日志记录格式取决于MySQL版本。 有关日志记录格式的一般说明,请参见 第5.4.4.1节“二进制日志格式” 有关二进制日志格式的详细信息,请参阅 MySQL内部:二进制日志

服务器以 --binlog-do-db 与执行和 --binlog-ignore-db 选项相同的方式 评估 --replicate-do-db --replicate-ignore-db 选项。 有关如何完成此操作的信息,请参见 第17.2.5.1节“数据库级复制和二进制日志记录选项的评估”

--log-slave-updates 默认情况下启用设置启动 复制从属服务器 ,这意味着 从属服务器 会将从复制主服务器接收的任何数据修改写入其自己的二进制日志。 必须启用二进制日志才能使此设置 生效 (请参见 第17.1.6.3节“复制从属选项和变量” )。 此设置使从站可以充当链式复制中其他从站的主站。

您可以使用该 RESET MASTER 语句或其子集 删除所有二进制日志文件 PURGE BINARY LOGS 请参见 第13.7.7.6节“RESET语法” 第13.4.1.1节“PURGE BINARY LOGS语法”

如果您正在使用复制,则在确定没有从属设备仍需要使用它们之前,不应删除主服务器上的旧二进制日志文件。 例如,如果您的奴隶从未跑过三天以上,那么您每天可以 在主服务器上 执行 mysqladmin flush-logs ,然后删除任何超过三天的日志。 您可以手动删除文件,但最好使用 PURGE BINARY LOGS ,它也可以安全地为您更新二进制日志索引文件(可以使用日期参数)。 请参见 第13.4.1.1节“PURGE BINARY LOGS语法”

您可以使用 mysqlbinlog 实用程序 显示二进制日志文件的内容 当您想要在日志中重新处理语句以进行恢复操作时,这非常有用。 例如,您可以从二进制日志更新MySQL服务器,如下所示:

外壳> mysqlbinlog log_file | mysql -h server_name

mysqlbinlog 也可用于显示复制从属中继日志文件内容,因为它们使用与二进制日志文件相同的格式编写。 有关 mysqlbinlog 实用程序及其使用方法的 更多信息 ,请参见 第4.6.8节“ mysqlbinlog - 处理二进制日志文件的实用程序” 有关二进制日志和恢复操作的更多信息,请参见 第7.5节“使用二进制日志进行时间点(增量)恢复”

在语句或事务完成之后但在释放任何锁定或完成任何提交之前立即执行二进制日志记录。 这可确保以提交顺序记录日志。

非事务性表的更新在执行后立即存储在二进制日志中。

在未提交的事务中,所有 更改事务表(如 )的 更新( UPDATE DELETE INSERT )都将 InnoDB 被缓存,直到 COMMIT 服务器收到语句 为止 此时, mysqld COMMIT 执行 之前将整个事务写入二进制日志

无法回滚对非事务表的修改。 如果回滚的事务包括对非事务表的修改,则会 ROLLBACK 在末尾 使用 语句 记录整个事务 ,以确保复制对这些表的修改。

当一个处理事务的线程启动时,它会 binlog_cache_size 为buffer语句 分配一个缓冲区 如果语句大于此值,则线程会打开一个临时文件来存储事务。 线程结束时删除临时文件。

所述 Binlog_cache_use 状态变量表明,用这种缓冲液(和可能的一个临时文件),用于存储语句事务的数目。 Binlog_cache_disk_use 状态变量显示许多这些交易实际上是如何不得不使用临时文件。 这两个变量可用于调整 binlog_cache_size 到足够大的值,避免使用临时文件。

所述 max_binlog_cache_size 系统变量(默认4GB,这也是最大)可被用来限制用于高速缓存的多语句事务的总大小。 如果事务大于这么多字节,它就会失败并回滚。 最小值为4096。

如果使用二进制日志和基于行的日志记录,则并发插入将转换为 CREATE ... SELECT INSERT ... SELECT 语句的 正常插入 这样做是为了确保您可以通过在备份操作期间应用日志来重新创建表的精确副本。 如果使用基于语句的日志记录,则会将原始语句写入日志。

二进制日志格式具有一些已知的限制,可能会影响从备份中恢复。 请参见 第17.4.1节“复制功能和问题”

存储程序的二进制日志记录按 第24.7节“存储程序二进制日志记录”中所述完成

请注意,由于复制的增强,MySQL 8.0与以前版本的MySQL的二进制日志格式不同。 请参见 第17.4.2节“MySQL版本之间的复制兼容性”

如果服务器无法写入二进制日志,刷新二进制日志文件或将二进制日志同步到磁盘,则复制主服务器上的二进制日志可能会变得不一致,并且复制从服务器可能会失去与主服务器的同步。 所述 binlog_error_action 系统变量控制,如果这种类型的误差与二进制日志遇到所采取的行动。

  • 默认设置, ABORT_SERVER 使服务器暂停二进制日志记录并关闭。 此时,您可以识别并更正错误原因。 重新启动时,恢复将按照意外服务器暂停的情况继续进行(请参见 第17.3.2节“处理意外停止复制从站” )。

  • 该设置 IGNORE_ERROR 提供与旧版MySQL的向后兼容性。 使用此设置,服务器继续正在进行的事务并记录错误,然后暂停二进制日志记录,但继续执行更新。 此时,您可以识别并更正错误原因。 要恢复二进制日志记录 log_bin 必须再次启用,这需要重新启动服务器。 如果您需要向后兼容性,则仅使用此选项,并且二进制日志在此MySQL服务器实例上不是必需的。 例如,您可以仅将二进制日志用于服务器的间歇性审计或调试,而不是将其用于从服务器进行复制或依赖它进行时间点还原操作。

默认情况下,二进制日志在每次write( sync_binlog=1 时都会同步到磁盘 如果 sync_binlog 未启用,并且操作系统或计算机(不仅是MySQL服务器)崩溃,则二进制日志的最后一个语句可能会丢失。 要防止这种情况,请 sync_binlog 在每个 N 提交组 之后 启用 系统变量以将二进制日志同步到磁盘 请参见 第5.1.8节“服务器系统变量” 最安全的值 sync_binlog 是1(默认值),但这也是最慢的。

在早期的MySQL版本中,如果发生崩溃,表内容和二进制日志内容之间可能存在不一致,即使 sync_binlog 设置为1.例如,如果您使用 InnoDB 表并且MySQL服务器处理 COMMIT 语句,则会编写许多准备按顺序对二进制日志进行事务处理,同步二进制日志,然后将事务提交到 InnoDB 如果服务器在这两个操作之间崩溃,则事务将 InnoDB 在重新启动时 回滚 但仍存在于二进制日志中。 通过 InnoDB 在XA事务中 启用 对两阶段提交的支持, 在先前版本中解决了此类问题 在5.8.0及更高版本中 InnoDB 始终启用对XA事务中的两阶段提交的支持。

InnoDB 支持XA事务中的两阶段提交可确保二进制日志和 InnoDB 数据文件同步。 但是,MySQL服务器还应配置为 InnoDB 在提交事务之前将 二进制日志和 日志 同步 到磁盘。 InnoDB 日志由缺省同步,并 sync_binlog=1 保证了二进制日志是同步的。 InnoDB 在XA事务 中隐式 支持两阶段提交 的效果 sync_binlog=1 是在崩溃后重启,在执行事务回滚之后,MySQL服务器扫描最新的二进制日志文件以收集事务 xid 值并计算最后的有效位置。二进制日志文件。 然后MySQL服务器告诉 InnoDB 完成任何已成功写入二进制日志的已准备事务,并将二进制日志截断到最后一个有效位置。 这可确保二进制日志反映 InnoDB 的确切数据 ,因此从站与主站保持同步,因为它不会收到已回滚的语句。

如果MySQL服务器在崩溃恢复时发现二进制日志比它应该更短,那么它至少缺少一个成功提交的 InnoDB 事务。 如果 sync_binlog=1 磁盘/文件系统在请求(有些没有)时执行实际同步,则 不会发生这种情况 ,因此服务器会输出错误消息 在这种情况下,此二进制日志不正确,应从主数据的新快照重新启动复制。 The binary log file_name is shorter than its expected size

在解析二进制日志时,以下系统变量的会话值将写入二进制日志并由复制从站承担:

5.4.4.1二进制日志格式

服务器使用多种日志记录格式在二进制日志中记录信息:

  • MySQL中的复制功能最初基于从主设备到从设备的SQL语句传播。 这称为 基于语句的日志记录 您可以通过启动服务器来使用此格式 --binlog-format=STATEMENT

  • 基于行的日志记录 (默认)中,主服务器将事件写入二进制日志,以指示各个表行的影响方式。 您可以通过启动它来使服务器使用基于行的日志记录 --binlog-format=ROW

  • 第三种选择也是可用的: 混合日志记录 对于混合日志记录,默认情况下使用基于语句的日志记录,但在某些情况下,日志记录模式会自动切换到基于行的日志,如下所述。 您可以通过 使用该选项 启动 mysqld 使MySQL显式使用混合日志记录 --binlog-format=MIXED

日志格式也可以由正在使用的存储引擎设置或限制。 这有助于消除在使用不同存储引擎的主设备和从设备之间复制某些语句时出现的问题。

使用基于语句的复制,可能存在复制非确定性语句的问题。 在确定给定语句是否对基于语句的复制是安全的时,MySQL确定它是否可以保证可以使用基于语句的日志记录来复制语句。 如果MySQL无法做出此保证,则会将该语句标记为可能不可靠并发出警告, Statement可能无法安全登录语句格式

您可以通过使用MySQL的基于行的复制来避免这些问题。

5.4.4.2设置二进制日志格式

您可以通过启动MySQL服务器来显式选择二进制日志记录格式 支持的值 是: --binlog-format=type type

  • STATEMENT 导致日志记录基于语句。

  • ROW 导致日志记录基于行。 这是默认值。

  • MIXED 导致日志记录使用混合格式。

日志格式也可以在运行时切换,但请注意,在许多情况下您无法执行此操作,如本节后面所述。 设置 binlog_format 系统变量 的全局值, 以指定在更改后连接的客户端的格式:

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql>SET GLOBAL binlog_format = 'MIXED';

单个客户端可以通过设置以下会话值来控制其自己语句的日志记录格式 binlog_format

mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql>SET SESSION binlog_format = 'MIXED';

更改全局 binlog_format 值需要足以设置全局系统变量的权限。 更改会话 binlog_format 值需要足以设置受限会话系统变量的权限。 请参见 第5.1.9.1节“系统变量权限”

客户端可能希望基于每个会话设置二进制日志记录有几个原因:

  • 对数据库进行许多小更改的会话可能希望使用基于行的日志记录。

  • 执行与 WHERE 子句 中的许多行匹配的更新的会话 可能希望使用基于语句的日志记录,因为记录一些语句比许多行更有效。

  • 某些语句在主服务器上需要大量执行时间,但只会导致修改几行。 因此,使用基于行的日志记录复制它们可能是有益的。

在运行时无法切换复制格式时有例外:

  • 无法从存储的函数或触发器中更改复制格式。

  • 如果 NDB 启用 存储引擎。

  • 如果会话具有打开的临时表,则无法更改会话( SET @@SESSION.binlog_format 的复制格式

  • 如果任何复制通道具有打开的临时表,则无法全局( SET @@GLOBAL.binlog_format SET @@PERSIST.binlog_format 更改复制格式

  • 如果当前正在运行任何复制通道应用程序线程,则无法全局( SET @@GLOBAL.binlog_format SET @@PERSIST.binlog_format 更改复制格式

尝试在任何这些情况下切换复制格式(或尝试设置当前复制格式)都会导致错误。 但是,您可以随时使用 PERSIST_ONLY SET @@PERSIST_ONLY.binlog_format )更改复制格式,因为此操作不会修改运行时全局系统变量值,并且只有在服务器重新启动后才会生效。

当存在任何临时表时,不建议在运行时切换复制格式,因为仅在使用基于语句的复制时记录临时表,而使用基于行的复制和混合复制时,不记录它们。

在复制过程中切换复制格式也会导致问题。 每个MySQL服务器都可以设置自己的,只有自己的二进制日志格式(无论 binlog_format 是使用全局范围还是会话范围设置)。 这意味着更改复制主服务器上的日志记录格式不会导致从服务器更改其日志记录格式以匹配。 使用 STATEMENT 模式时, binlog_format 不复制系统变量。 使用 MIXED ROW 记录模式时,它会被复制但被从设备忽略。

复制从站无法将以 ROW 日志记录格式 接收的二进制日志条目 转换为 STATEMENT 格式,以便在其自己的二进制日志中使用。 因此, 如果主设备 必须使用 ROW MIXED 格式化 从设备 将主服务器上的二进制日志记录格式更改 STATEMENT ROW MIXED 正在向具有 STATEMENT 格式 的从服务器进行 复制时,可能会导致复制失败,并显示错误,例如 执行行事件错误:'无法执行语句:无法写入二进制日志,因为语句在行中格式和BINLOG_FORMAT =语句。' 将从站上的二进制日志记录格式更改为 STATEMENT 主机仍在使用 MIXED 格式化时的 ROW 格式也会导致相同类型的复制失败。 要安全地更改格式,必须停止复制并确保在主服务器和从服务器上进行相同的更改。

如果使用 InnoDB 表并且事务隔离级别为 READ COMMITTED READ UNCOMMITTED ,则只能使用基于行的日志记录。 这是 可能的 更改日志格式 STATEMENT ,但在运行时这样做会导致非常迅速地错误,因为 InnoDB 不能再进行插入。

将二进制日志格式设置为 ROW ,使用基于行的 格式将 许多更改写入二进制日志。 但是,某些更改仍使用基于语句的格式。 实例包括所有DDL(数据定义语言)语句,例如 CREATE TABLE ALTER TABLE ,或 DROP TABLE

使用基于行的二进制日志记录时, binlog_row_event_max_size 系统变量及其相应的启动选项 --binlog-row-event-max-size 会对行事件的最大大小设置软限制。 默认值为8192字节,该值只能在服务器启动时更改。 如果可能,存储在二进制日志中的行将分组为大小不超过此设置值的事件。 如果无法拆分事件,则可以超出最大大小。

--binlog-row-event-max-size 选项适用于能够进行基于行复制的服务器。 行以块的大小存储在二进制日志中,块大小以字节为单位,不超过此选项的值。 该值必须是256的倍数。默认值为8192。

警告

当使用 基于语句的日志记录 进行复制时,如果语句的设计方式使得数据修改是 不确定的 则主服务器和从服务器上的数据可能会不同 ; 也就是说,它留给了查询优化器的意愿。 通常,即使在复制之外,这也不是一种好的做法。 有关此问题的详细说明,请参见 第B.4.7节“MySQL中的已知问题”

有关复制从站保留的日志的信息,请参见 第17.2.4节“复制中继和状态日志”

5.4.4.3混合二进制日志格式

MIXED 日志记录格式 运行时 ,服务器会在以下条件下自动从基于语句的日志记录切换到基于行的日志记录:

在早期版本中,当使用混合二进制日志记录格式时,如果按行记录语句并且执行该语句的会话具有任何临时表,则所有后续语句都被视为不安全并以基于行的格式记录,直到所有临时表为止该会话使用的内容被删除了。 从MySQL 8.0开始,对临时表的操作不会以混合二进制日志记录格式记录,并且会话中临时表的存在不会影响用于每个语句的日志记录模式。

注意

如果尝试使用应使用基于行的日志记录编写的基于语句的日志记录来执行语句,则会生成警告。 警告显示在客户端(在输出中 SHOW WARNINGS )和 mysqld 错误日志中。 SHOW WARNINGS 每次执行此类语句时都会 表中 添加警告 但是,只有为每个客户端会话生成警告的第一个语句才会写入错误日志,以防止泛滥日志。

除了上述决策之外,各个引擎还可以确定更新表中信息时使用的日志记录格式。 单个引擎的日志记录功能可以定义如下:

  • 如果引擎支持基于行的日志记录,则称该引擎具有 行日志记录功能

  • 如果引擎支持基于语句的日志记录,则称该引擎具有 语句记录功能

给定的存储引擎可以支持其中一种或两种记录格式。 下表列出了每个引擎支持的格式。

存储引擎 行记录支持 语句记录支持
ARCHIVE
BLACKHOLE
CSV
EXAMPLE 没有
FEDERATED
HEAP
InnoDB 当事务隔离级别为 REPEATABLE READ 或时为 SERIALIZABLE ; 不,否则。
MyISAM
MERGE
NDB 没有

是否一个语句是要记录与要使用的根据(安全,不安全,或二进制注入)语句的类型,二进制日志记录格式(确定的记录模式 STATEMENT ROW MIXED ),并且存储发动机的记录功能(声明能力,行能力,两者或两者都没有)。 (二进制注入是指记录必须使用 ROW 格式 记录的更改 。)

可以在有或没有警告的情况下记录声明; 未记录失败的语句,但会在日志中生成错误。 这显示在以下决策表中。 Type binlog_format SLC RLC 列概述了条件, Error / Warning Logged as columns表示相应的操作。 SLC 代表 语句记录功能 RLC 代表 行记录功能

类型 binlog_format SLC RLC 错误/警告 记录为
* * 没有 没有 错误:无法执行语句 :二进制日志记录是不可能的,因为至少涉及一个既无行也无法使用语句的引擎。 -
安全 STATEMENT 没有 - STATEMENT
安全 MIXED 没有 - STATEMENT
安全 ROW 没有 错误:无法执行语句 :二进制日志记录是不可能的,因为 BINLOG_FORMAT = ROW 至少有一个表使用不能进行基于行的日志记录的存储引擎。 -
不安全 STATEMENT 没有 警告:以语句格式记录的不安全语句 ,因为 BINLOG_FORMAT = STATEMENT STATEMENT
不安全 MIXED 没有 错误:无法执行语句 :当存储引擎仅限于基于语句的日志记录时,无法进行不安全语句的二进制日志记录,即使 BINLOG_FORMAT = MIXED -
不安全 ROW 没有 错误:无法执行语句 :二进制日志记录是不可能的,因为 BINLOG_FORMAT = ROW 至少有一个表使用不能进行基于行的日志记录的存储引擎。 -
行注入 STATEMENT 没有 错误:无法执行行注入 :无法进行二进制日志记录,因为至少有一个表使用的存储引擎无法进行基于行的日志记录。 -
行注入 MIXED 没有 错误:无法执行行注入 :无法进行二进制日志记录,因为至少有一个表使用的存储引擎无法进行基于行的日志记录。 -
行注入 ROW 没有 错误:无法执行行注入 :无法进行二进制日志记录,因为至少有一个表使用的存储引擎无法进行基于行的日志记录。 -
安全 STATEMENT 没有 错误:无法执行语句 :二进制日志记录是不可能的,因为 BINLOG_FORMAT = STATEMENT 至少有一个表使用不能进行基于语句的日志记录的存储引擎。 -
安全 MIXED 没有 - ROW
安全 ROW 没有 - ROW
不安全 STATEMENT 没有 错误:无法执行语句 :二进制日志记录是不可能的,因为 BINLOG_FORMAT = STATEMENT 至少有一个表使用不能进行基于语句的日志记录的存储引擎。 -
不安全 MIXED 没有 - ROW
不安全 ROW 没有 - ROW
行注入 STATEMENT 没有 错误:无法执行行注入 :从那时起无法进行二进制日志记录 BINLOG_FORMAT = STATEMENT -
行注入 MIXED 没有 - ROW
行注入 ROW 没有 - ROW
安全 STATEMENT - STATEMENT
安全 MIXED - STATEMENT
安全 ROW - ROW
不安全 STATEMENT 警告: 发布语句格式为binlog的不安全语句 BINLOG_FORMAT = STATEMENT STATEMENT
不安全 MIXED - ROW
不安全 ROW - ROW
行注入 STATEMENT 错误:无法执行行注入 :无法进行二进制日志记录,因为 BINLOG_FORMAT = STATEMENT -
行注入 MIXED - ROW
行注入 ROW - ROW

当确定产生警告时,会生成标准的MySQL警告(并且可以使用 SHOW WARNINGS )。 该信息也写入 mysqld 错误日志。 每个客户端连接的每个错误实例只记录一个错误,以防止泛滥日志。 日志消息包括尝试的SQL语句。

如果从属服务器 log_error_verbosity 设置为显示警告,则 从属服务器 将消息打印到错误日志以提供有关其状态的信息,例如二进制日志和中继日志坐标开始其作业,何时切换到另一个中继日志,何时它在断开连接后重新连接,对基于语句的日志记录不安全的语句,等等。

5.4.4.4更改mysql数据库表的日志格式

mysql 可以直接(例如,使用 INSERT DELETE )或间接(例如,使用 GRANT CREATE USER 修改数据库 中的授权表的内容 mysql 使用以下规则 将影响 数据库表的 语句 写入二进制日志:

CREATE TABLE ... SELECT 是数据定义和数据操作的组合。 CREATE TABLE 部分是利用语句格式记录,且 SELECT 部分是根据的值记录 binlog_format

5.4.5慢查询日志

慢查询日志由 long_query_time 执行 时间超过 几秒 的SQL语句组成, 并且至少 min_examined_row_limit 需要检查行。 慢查询日志可用于查找需要很长时间才能执行的查询,因此是优化的候选者。 但是,检查长慢的查询日志可能是一项耗时的任务。 为了简化这一过程,您可以使用 mysqldumpslow 命令处理慢速查询日志文件并汇总其内容。 请参见 第4.6.9节“ mysqldumpslow - 汇总慢速查询日志文件”

获取初始锁定的时间不计入执行时间。 mysqld 在执行完后以及释放所有锁之后向慢查询日志写入一个语句,因此日志顺序可能与执行顺序不同。

慢查询日志参数

最小值和默认值分别 long_query_time 为0和10。 该值可以指定为微秒的分辨率。

默认情况下,不记录管理语句,也不记录不使用索引进行查找的查询。 可以使用 log_slow_admin_statements 更改此行为 log_queries_not_using_indexes ,如稍后所述。

默认情况下,禁用慢查询日志。 要明确指定初始慢查询日志状态,请使用 --slow_query_log[={0|1}] 如果没有参数或参数为1,则 --slow_query_log 启用日志。 如果参数为0,则此选项会禁用日志。 要指定日志文件名,请使用 要指定日志目标,请使用 系统变量(如 第5.4.1节“选择常规查询日志和慢查询日志输出目标”中所述 )。 --slow_query_log_file=file_name log_output

注意

如果指定 TABLE 日志目标,请参阅 日志表和 打开的文件太多 错误

如果没有为慢查询日志文件指定名称,则默认名称为 host_name-slow.log 服务器在数据目录中创建文件,除非给出绝对路径名来指定不同的目录。

要在运行时禁用或启用慢查询日志或更改日志文件名,请使用全局 变量 slow_query_log slow_query_log_file 系统变量。 设置 slow_query_log 为0表示禁用日志,或设置为1表示启用日志。 设置 slow_query_log_file 为指定日志文件的名称。 如果日志文件已打开,则会关闭该文件并打开新文件。

如果使用该 --log-short-format 选项 ,服务器会将较少的信息写入慢查询日志

要在慢查询日志中包含慢速管理语句,请启用 log_slow_admin_statements 系统变量。 行政陈述包括 ALTER TABLE ANALYZE TABLE CHECK TABLE CREATE INDEX DROP INDEX OPTIMIZE TABLE ,和 REPAIR TABLE

要在写入慢查询日志的语句中包含不使用索引进行行查找的查询,请启用 log_queries_not_using_indexes 系统变量。 (即使启用了该变量,服务器也不会记录由于表少于两行而无法从索引中获益的查询。)

当记录不使用索引的查询时,慢查询日志可能会快速增长。 可以通过设置 log_throttle_queries_not_using_indexes 系统变量 对这些查询设置速率限制 默认情况下,此变量为0,表示没有限制。 正值会对不使用索引的查询的日志记录施加每分钟限制。 第一个这样的查询打开一个60秒的窗口,服务器在该窗口内将查询记录到给定的限制,然后禁止其他查询。 如果窗口结束时存在被抑制的查询,则服务器会记录一个摘要,该摘要指示有多少查询以及在其中花费的总时间。 当服务器记录下一个不使用索引的查询时,下一个60秒窗口开始。

服务器按以下顺序使用控制参数来确定是否将查询写入慢查询日志:

  1. 查询必须不是管理语句,或者 log_slow_admin_statements 必须启用。

  2. 查询必须至少花费 long_query_time 几秒钟,或者 log_queries_not_using_indexes 必须启用,并且查询不使用行查找的索引。

  3. 查询必须至少检查过 min_examined_row_limit 行。

  4. 不得根据 log_throttle_queries_not_using_indexes 设置 禁止查询

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

默认情况下,复制从属服务器不会将复制查询写入慢速查询日志。 要更改此设置,请启用 log_slow_slave_statements 系统变量。

慢查询日志内容

启用慢查询日志时,服务器将输出写入 log_output 系统变量 指定的任何目标 如果启用日志,则服务器将打开日志文件并将启动消息写入其中。 但是,除非 FILE 选择 日志目标, 否则不会进一步将查询记录到文件中 如果目标是 NONE ,则即使启用了慢查询日志,服务器也不会写入任何查询。 如果 FILE 未选择作为输出目标, 则设置日志文件名对日志记录没有影响

如果启用慢查询日志并将 FILE 其选为输出目标,则写入日志的每个语句前面都有一个以 # 字符 开头 并且包含这些字段的行(所有字段都在一行中):

  • Query_time: duration

    语句执行时间(以秒为单位)。

  • Lock_time: duration

    在几秒钟内获得锁定的时间。

  • Rows_sent: N

    发送到客户端的行数。

  • Rows_examined:

    优化程序检查的行数。

启用 log_slow_extra 系统变量(从MySQL 8.0.14开始提供)会导致服务器将以下额外字段写入 FILE 输出以及刚刚列出的那些( TABLE 输出不受影响)。 某些字段描述引用状态变量名称。 有关更多信息,请参阅状态变量描述。 但是,在慢查询日志中,计数器是每个语句值,而不是每个会话的累计值。

给定的慢查询日志文件可能包含通过启用添加和不添加额外字段的行的混合 log_slow_extra 日志文件分析器可以通过字段计数确定行是否包含其他字段。

写入慢查询日志文件的每个语句前面都有一个 SET 包含时间戳 语句。 从MySQL 8.0.14开始,时间戳指示慢速语句何时开始执行。 在8.0.14之前,时间戳指示何时记录慢速语句(在语句完成执行后发生)。

写入慢查询日志的语句中的密码将由服务器重写,而不是以纯文本形式发生。 请参见 第6.1.2.3节“密码和日志记录”

5.4.6 DDL日志

DDL日志或元数据日志记录由数据定义语句(如 DROP TABLE 和) 生成的元数据操作 ALTER TABLE MySQL使用此日志从元数据操作中发生的崩溃中恢复。 当执行该语句 DROP TABLE t1, t2 ,我们需要确保两个 t1 t2 被丢弃,并且每个表下降是完整的。 这种类型的SQL语句的另一个例子是 ALTER TABLE t3 DROP PARTITION p2 ,我们必须确保完全删除分区,并从表的分区列表中删除它的定义 t3

诸如刚才描述的元数据操作的记录被写入 ddl_log.log MySQL数据目录中的文件。 这是一个二进制文件; 它不是人类可读的,您不应尝试以任何方式修改其内容。

ddl_log.log 在记录元数据语句实际需要之前不会创建,并且在成功启动 mysqld后 删除 因此,该文件可能不存在于以完全正常方式运行的MySQL服务器上。

目前, ddl_log.log 最多可容纳1048573个条目,相当于4 GB的大小。 超过此限制后,必须重命名或删除该文件,然后才能执行任何其他DDL语句。 这是我们正在努力解决的已知问题(Bug#83708)。

没有与此文件关联的用户可配置服务器选项或变量。

5.4.7服务器日志维护

第5.4节“MySQL服务器日志”中所述 ,MySQL服务器可以创建几个不同的日志文件,以帮助您查看正在进行的活动。 但是,您必须定期清理这些文件,以确保日志不占用太多磁盘空间。

在启用日志记录的情况下使用MySQL时,您可能需要不时备份和删除旧的日志文件,并告诉MySQL开始记录到新文件。 请参见 第7.2节“数据库备份方法”

在Linux(Red Hat)安装上,您可以使用此 mysql-log-rotate 脚本。 如果您从RPM分发版安装了MySQL,则应该已自动安装此脚本。 如果您使用二进制日志进行复制,请小心使用此脚本。 在确定所有从属程序已处理其内容之前,不应删除二进制日志。

在其他系统上,您必须自己安装一个简短的脚本,从 cron (或其等价物)开始处理日志文件。

在服务器的二进制日志到期期限后,将自动删除二进制日志文件。 可以在启动时以及刷新二进制日志时删除文件。 默认的二进制日志有效期为30天。 您可以使用 binlog_expire_logs_seconds 系统变量 指定备用到期期限 如果使用复制,则应指定一个有效期,该有效期不低于从属服务器可能滞后于主服务器的最长时间。 要按需删除二进制日志,请使用该 PURGE BINARY LOGS 语句(请参见 第13.4.1.1节“PURGE BINARY LOGS语法” )。

您可以通过刷新日志强制MySQL开始使用新的日志文件。 发出 FLUSH LOGS 语句或执行 mysqladmin flush-logs mysqladmin refresh mysqldump --flush-logs mysqldump --master-data 命令 时会发生 日志 刷新 请参见 第13.7.7.3节“FLUSH语法” 第4.5.2节“ mysqladmin - 管理MySQL服务器的客户端” 第4.5.4节“ mysqldump - 数据库备份程序” 此外,当二进制日志的大小达到 max_binlog_size 系统变量 的值时,将刷新二进制日志

FLUSH LOGS 支持可选修饰符以启用选择性刷新单个日志(例如, FLUSH BINARY LOGS )。

日志刷新操作执行以下操作:

  • 如果启用了常规查询日志记录或慢速查询日志文件,则服务器将关闭并重新打开常规查询日志文件或慢速查询日志文件。

  • 如果启用了二进制日志记录,则服务器将关闭当前的二进制日志文件并打开包含下一个序列号的新日志文件。

  • 如果服务器启动时带有将 --log-error 错误日志写入文件的选项,则服务器将关闭并重新打开日志文件。

刷新日志时,服务器会创建新的二进制日志文件。 但是,它只是关闭并重新打开常规和慢速查询日志文件。 要在Unix上创建新文件,请在刷新之前重命名当前日志文件。 在刷新时,服务器使用原始名称打开新的日志文件。 例如,如果通用和慢查询日志文件被命名为 mysql.log mysql-slow.log ,你可以使用一系列这样的命令:

shell> 
shell> 
shell> 
shell>cd mysql-data-directorymv mysql.log mysql.oldmv mysql-slow.log mysql-slow.oldmysqladmin flush-logs

在Windows上,使用 重命名 而不是 mv

此时,您可以备份 mysql.old mysql-slow.old 从磁盘中删除它们。

可以使用类似的策略备份错误日志文件(如果有)。

您可以通过禁用日志在运行时重命名常规查询日志或慢查询日志:

SET GLOBAL general_log ='OFF';
SET GLOBAL slow_query_log ='OFF';

禁用日志后,在外部重命名日志文件(例如,从命令行重命名)。 然后再次启用日志:

SET GLOBAL general_log ='ON';
SET GLOBAL slow_query_log ='ON';

此方法适用于任何平台,不需要重新启动服务器。

注意

要使服务器在外部重命名文件后重新创建给定的日志文件,服务器必须可以写入文件位置。 情况可能并非总是如此。 例如,在Linux上,服务器可能会因为写错误日志 /var/log/mysqld.log ,其中 /var/log 所拥有 root ,而不是由写 的mysqld 在这种情况下,日志刷新操作将无法创建新的日志文件。

要处理这种情况,您必须在重命名原始日志文件后使用正确的ownerhiop手动创建新的日志文件。 例如,执行以下命令 root

shell> mv /var/log/mysqld.log /var/log/mysqld.log.old
shell>install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log

5.5 MySQL服务器组件

MySQL Server包括一个基于组件的基础架构,用于扩展服务器功能。 组件提供服务器和其他组件可用的服务。 (关于服务使用,服务器是一个组件,与其他组件相同。)组件仅通过它们提供的服务相互交互。

MySQL发行版包括几个实现服务器扩展的组件:

服务器组件实现的系统和状态变量在安装组件时公开,其名称以特定于组件的前缀开头。 例如, log_filter_dragnet 错误日志过滤器组件实现了一个名为的系统变量 log_error_filter_rules ,其全名是 dragnet.log_error_filter_rules 要引用此变量,请使用全名。

以下部分描述了如何安装和卸载组件,以及如何在运行时确定安装了哪些组件并获取有关它们的信息。

有关组件内部实现的信息,请参阅 https://dev.mysql.com/doc/index-other.html上 提供的MySQL Server Doxygen文档 例如,如果您打算编写自己的组件,则此信息对于了解组件的工作方式非常重要。

5.5.1安装和卸载组件

必须先将服务器组件加载到服务器中,然后才能使用它们。 MySQL支持在运行时加载组件。

INSTALL COMPONENT UNINSTALL COMPONENT SQL语句使组件装卸。 例如:

INSTALL COMPONENT'file:// component_validate_password';
UNINSTALL COMPONENT'file:// component_validate_password';

加载器服务处理组件加载和卸载,还列出 作为注册表 component mysql 系统数据库 表中的已 加载组件

组件操作的SQL语句会影响服务器操作和 mysql.component 系统表,如下所示:

  • INSTALL COMPONENT 将组件加载到服务器中。 组件立即变为活动状态。 加载程序服务还在 mysql.component 系统表中 注册已加载的组件 对于后续服务器重新启动,加载程序服务会加载 mysql.component 启动序列期间 列出的所有组件 即使使用该 --skip-grant-tables 选项 启动服务器,也会发生这种情况

  • UNINSTALL COMPONENT 停用组件并从服务器卸载它们。 加载程序服务还会从 mysql.component 系统表中 取消注册组件, 以便在启动过程中不再加载它们以便后续服务器重新启动。

INSTALL PLUGIN 服务器插件 的相应 语句 相比 INSTALL COMPONENT ,组件语句提供了显着的优势,即不需要知道用于命名组件的任何特定于平台的文件名后缀。 这意味着 INSTALL COMPONENT 可以跨平台统一执行 给定 语句。

5.5.2获取服务器组件信息

系统数据库中 component mysql 包含有关当前加载的组件的信息,并显示已注册的组件 INSTALL COMPONENT 要查看已安装的组件,请使用以下语句:

SELECT * FROM mysql.component;

5.5.3错误日志组件

本节介绍各个错误日志组件的特征。 有关配置错误日志记录的一般信息,请参见 第5.4.2节“错误日志”

日志组件可以是过滤器或接收器:

  • 过滤器处理日志事件,添加,删除或修改事件字段,或完全删除事件。 生成的事件将传递给 log_error_services 系统变量值中 指定的下一个日志组件

  • 接收器是日志事件的目标(编写器)。 通常,接收器将日志事件处理为具有特定格式的日志消息,并将这些消息写入其关联的输出,例如文件或系统日志。

服务器 log_error_services 按照命名顺序 执行过滤器和接收器 因此,最右边的部分应该是一个接收器。 如果最右边的组件是过滤器,则它对事件所做的任何更改都不会影响输出。

以下部分描述了按组件类型分组的各个日志组件:

组件描述包括以下类型的信息:

  • 组件名称和预期用途。

  • 组件是内置还是必须加载。 对于可加载组件,描述指定用于使用 INSTALL COMPONENT UNINSTALL COMPONENT 语句 加载和卸载组件的URN

  • 是否可以在 log_error_services 值中 多次列出组件

  • 对于接收器组件,组件写入输出的目标。

错误日志筛选器组件

错误日志筛选器组件实现错误日志事件的筛选:

  • 如果未启用过滤器组件,则不会进行过滤。

  • 任何已启用的筛选器组件仅影响 log_error_services 后面列出的组件的日志事件 特别是,对于 log_error_services 早于任何过滤 器组件列出的任何日志接收 器组件,不会发生日志事件过滤。

log_filter_internal组件

如果 log_filter_internal 被禁用, log_error_verbosity 并且 log_error_suppression_list 没有任何效果。

log_filter_dragnet组件

错误日志接收器组件

错误日志接收器组件是实现错误日志输出的写入器。 如果未启用接收器组件,则不会发生日志输出。

某些接收器组件描述是指默认的错误日志目标。 这是控制台或文件,由 log_error 系统变量 的故障指示 ,如 第5.4.2.2节“默认错误日志目标配置”中所述确定

log_sink_internal组件
  • 目的:实现传统的错误日志消息输出格式。

  • URN:此组件内置,无需 INSTALL COMPONENT 在使用前 加载

  • 允许多种用途:不。

  • 输出目标:写入默认错误日志目标。

log_sink_json组件
  • 目的:实现JSON格式的错误记录。 请参见 第5.4.2.6节“以JSON格式记录错误”

  • 瓮: file://component_log_sink_json

  • 允许多种用途:是的。

  • 输出目标:JSON日志写程序根据 log_error 系统变量 给出的默认错误日志目标确定其输出目标

    • 如果 log_error 命名文件,则JSON 编写器将 输出文件命名为该文件名,加上编号 后缀, 从00开始。例如,如果 中的 连续 命名 实例 写入 等等。 .NN.json NN log_error file_name log_sink_json log_error_services file_name.00.json file_name.01.json

    • 如果 log_error stderr ,则JSON编写器写入控制台。 如果 log_json_writer log_error_services 值中 多次命名 ,它们都会写入控制台,这可能没用。

log_sink_syseventlog组件
  • 目的:实现错误记录到系统日志。 这是Windows syslog 的事件日志,以及 Unix和类Unix系统上 的事件日志 请参见 第5.4.2.7节“记录到系统日志的错误”

  • 瓮: file://component_log_sink_syseventlog

  • 允许多种用途:不。

  • 输出目标:写入系统日志。 不使用默认错误日志目标。

log_sink_test组件
  • 目的:用于编写测试用例的内部用途。 不适合生产使用。

  • 瓮: file://component_log_sink_test

  • 允许多种用途:是的。

  • 输出目标:写入默认错误日志目标。

5.6 MySQL服务器插件

MySQL支持一个插件API,可以创建服务器组件。 插件可以在服务器启动时加载,也可以在运行时加载和卸载,而无需重新启动服务器。 此接口支持的组件包括但不限于存储引擎, INFORMATION_SCHEMA 表,全文解析器插件和服务器扩展。

MySQL发行版包括几个实现服务器扩展的插件:

以下部分描述了如何安装和卸载插件,以及如何在运行时确定安装了哪些插件并获取有关它们的信息。 有关编写插件的信息,请参见 第29.2节“MySQL插件API”

5.6.1安装和卸载插件

必须先将服务器插件加载到服务器中,然后才能使用它们。 MySQL支持在服务器启动和运行时加载插件。 还可以在启动时控制加载的插件的激活状态,并在运行时卸载它们。

在加载插件时,可以从 INFORMATION_SCHEMA.PLUGINS 表和 SHOW PLUGINS 语句中 获取有关它的信息 请参见 第5.6.2节“获取服务器插件信息”

安装插件

在使用服务器插件之前,必须使用以下方法之一安装它。 在说明中, plugin_name 表示插件的名称,例如 innodb csv validate_password

内置插件:

服务器自动知道内置插件。 通常,服务器在启动时启用插件。 某些内置插件允许使用该 选项 进行更改 --plugin_name[=activation_state]

mysql.plugin 系统表中 注册的插件

系统数据库中 plugin mysql 用作插件的注册表(除了内置插件,不需要注册)。 启动时,服务器会加载表中列出的每个插件。 通常,对于从 mysql.plugin 表中 加载的插件 ,服务器也会启用插件。 可以使用该 选项 更改此设置 --plugin_name[=activation_state]

如果使用该 --skip-grant-tables 选项 启动服务器 ,则不会查询该 mysql.plugin 表,也不会加载其中列出的插件。

使用命令行选项命名的插件:

位于插件库文件中的插件可以在与服务器启动时加载 --plugin-load --plugin-load-add --early-plugin-load 选项。 通常,对于启动时加载的插件,服务器也会启用插件。 可以使用该 选项 更改此设置 --plugin_name[=activation_state]

在服务器启动序列期间初始化内置插件和存储引擎后 --plugin-load --plugin-load-add 选项加​​载插件。 --early-plugin-load 选项用于加载在内置插件和存储引擎初始化之前必须可用的插件。

每个插件加载选项的值是以分号分隔的 列表 每个 都是要加载的插件的名称,并且 是包含插件代码的库文件的名称。 如果插件库的名称没有任何前面的插件名称,则服务器会加载库中的所有插件。 服务器在 系统变量 指定的目录中查找插件库文件 name=plugin_library plugin_library name plugin_library plugin_dir

插件加载选项不会在 mysql.plugin 表中 注册任何插件 对于后续的重新启动,服务器再次加载插件只有当 --plugin-load --plugin-load-add --early-plugin-load 再次给出。 也就是说,该选项会生成一次性插件安装操作,该操作将持续用于单个服务器调用。

--plugin-load --plugin-load-add 并且 --early-plugin-load 即使在 --skip-grant-tables 给出 启用加载插件 (这导致服务器忽略该 mysql.plugin 表)。 --plugin-load --plugin-load-add 并且 --early-plugin-load 还允许在启动时加载无法在运行时加载的插件。

--plugin-load-add 选项补充了该 --plugin-load 选项:

例如,这些选项:

--plugin-load = x --plugin-load-add = y

等同于此选项:

--plugin负载= “X; Y”

但这些选择:

--plugin-load-add = y --plugin-load = x

等同于此选项:

--plugin负荷= X

INSTALL PLUGIN 声明 安装的插件

可以在运行时使用该 INSTALL PLUGIN 语句 加载位于插件库文件中的插件 该语句还在 mysql.plugin 表中 注册插件, 以使服务器在后续重新启动时加载它。 因此, INSTALL PLUGIN 需要 INSERT 权限 mysql.plugin

插件库文件基本名称取决于您的平台。 对于Windows .so 常见的后缀适用 于Unix和类Unix系统 .dll

示例:该 --plugin-load 选项在服务器启动时安装插件。 要安装以命名 myplugin 的插件库文件命名的插件 somepluglib.so ,请在 my.cnf 文件中 使用以下行

的[mysqld]
插件负载=为myplugin = somepluglib.so

在这种情况下,插件未注册 mysql.plugin 不使用该 --plugin-load 选项 重新启动服务器 会导致启动时不加载插件。

或者,该 INSTALL PLUGIN 语句使服务器在运行时从库文件加载插件代码:

INSTALL PLUGIN myplugin SONAME'omepluglib.so';

INSTALL PLUGIN 还会导致 永久 插件注册: mysql.plugin 表中 列出了插件, 以确保服务器在后续重新启动时加载它。

许多插件可以在服务器启动时或运行时加载。 但是,如果插件的设计必须在服务器启动期间加载和初始化,则尝试在运行时加载它会 INSTALL PLUGIN 产生错误:

MySQL的> INSTALL PLUGIN myplugin SONAME 'somepluglib.so';
ERROR 1721(HY000):插件'myplugin'被标记为不动态
安装。您必须停止服务器才能安装它。

在这种情况下,你必须使用 --plugin-load --plugin-load-add --early-plugin-load

如果插件名为两者使用 --plugin-load --plugin-load-add --early-plugin-load 选项(如较早的结果 INSTALL PLUGIN 在声明) mysql.plugin 表,服务器启动,但这些消息写入错误日志:

[ERROR]功能' plugin_name'已存在
[警告]无法加载名为' plugin_name'的插件
与soname' plugin_object_file'。

控制插件激活状态

如果服务器在启动时知道插件(例如,因为插件是使用 --plugin-load 选项 命名 或在 mysql.plugin 表中 注册的 ),则服务器默认加载并启用插件。 这是可能使用,以控制激活状态对于这样的插件 启动选项,其中 是插件的影响名称,如 ,或 与其他选项一样,破折号和下划线在选项名称中可以互换。 此外,激活状态值不区分大小写。 例如, 并且 是等价的。 --plugin_name[=activation_state] plugin_name innodb csv validate_password --my_plugin=ON --my-plugin=on

  • --plugin_name=OFF

    告诉服务器禁用插件。 对于某些内置插件,这可能是不可能的,例如 mysql_native_password

  • --plugin_name[=ON]

    告诉服务器启用插件。 (将选项指定为 没有值具有相同的效果。)如果插件无法初始化,则服务器在禁用插件的情况下运行。 --plugin_name

  • --plugin_name=FORCE

    告诉服务器启用插件,但如果插件初始化失败,则服务器无法启动。 换句话说,此选项会强制服务器在启用插件的情况下运行,或者根本不启用。

  • --plugin_name=FORCE_PLUS_PERMANENT

    喜欢 FORCE ,但另外防止插件在运行时被卸载。 如果用户尝试这样做 UNINSTALL PLUGIN ,则会发生错误。

插件激活状态 LOAD_OPTION INFORMATION_SCHEMA.PLUGINS 中可见

假设 CSV BLACKHOLE 以及 ARCHIVE 都内置可插拔存储引擎以及您希望服务器在启动时加载它们,受以下条件:服务器被允许运行,如果 CSV 初始化失败,必须要求 BLACKHOLE 初始化成功,并应禁用 ARCHIVE 要实现这一点,请在选项文件中使用以下行:

的[mysqld]
CSV = ON
黑洞= FORCE
存档= OFF

选项的格式是一个同义词 选项格式是同义词 --enable-plugin_name --plugin_name=ON --disable-plugin_name --skip-plugin_name --plugin_name=OFF

如果插件被禁用,无论是显式使用 OFF 还是隐式,因为它已启用 ON 但无法初始化,需要插件的服务器操作的各个方面都将更改。 例如,如果插件实现了存储引擎,则存储引擎的现有表变得不可访问,并且尝试为存储引擎创建新表会导致使用默认存储引擎的表,除非 NO_ENGINE_SUBSTITUTION 启用S​​QL模式以导致错误相反。

禁用插件可能需要调整其他选项。 例如,如果使用 --skip-innodb 禁用 启动服务器,则启动时 可能需要省略 InnoDB 其他 选项。 此外,因为 是默认存储引擎,除非您指定另一个可用的存储引擎,否则它将无法启动 你还必须设置 innodb_xxx InnoDB --default_storage_engine --default_tmp_storage_engine

卸载插件

在运行时,该 UNINSTALL PLUGIN 语句禁用和卸载服务器已知的插件。 该语句卸载插件并将其从 mysql.plugin 系统表中 删除 (如果已在其中注册)。 因此, UNINSTALL PLUGIN statement需要 DELETE 特权 mysql.plugin 由于插件不再在表中注册,服务器不会自动加载插件以便后续重新启动。

UNINSTALL PLUGIN 无论是在运行时加载 INSTALL PLUGIN 还是在启动时使用插件加载选项 加载插件都可以卸载插件 ,具体取决于以下条件:

  • 它无法卸载内置于服务器的插件。 这些可以标识为 NULL 输出中 的库名称为 INFORMATION_SCHEMA.PLUGINS 或者 SHOW PLUGINS

  • 它无法卸载服务器启动时使用的 插件,这会阻止插件在运行时卸载。 这些可以从 表格 列中 识别出来 --plugin_name=FORCE_PLUS_PERMANENT LOAD_OPTION INFORMATION_SCHEMA.PLUGINS

要卸载当前在服务器启动时使用插件加载选项加载的插件,请使用此过程。

  1. my.cnf 文件中 删除与插件相关的所有选项

  2. 重启服务器。

  3. 插件通常在启动时或 INSTALL PLUGIN 在运行时 使用插件加载选项安装 ,但不能同时安装。 但是, my.cnf 如果在某些时候 INSTALL PLUGIN 也使用 了,则从 文件中 删除插件的 选项可能不足以卸载它 如果插件仍然出现在 INFORMATION_SCHEMA.PLUGINS 的输出中 SHOW PLUGINS ,请使用 UNINSTALL PLUGIN mysql.plugin 表中 删除它 然后再次重启服务器。

5.6.2获取服务器插件信息

有几种方法可以确定服务器中安装了哪些插件:

  • INFORMATION_SCHEMA.PLUGINS 表包含每个已加载插件的行。 任何具有 PLUGIN_LIBRARY 值的 NULL 内置都是无法卸载的。

    MySQL的> SELECT * FROM INFORMATION_SCHEMA.PLUGINS\G
    *************************** 1。排******************** *******
               PLUGIN_NAME:binlog
            PLUGIN_VERSION:1.0
             PLUGIN_STATUS:有效
               PLUGIN_TYPE:存储引擎
       PLUGIN_TYPE_VERSION:50158.0
            PLUGIN_LIBRARY:NULL
    PLUGIN_LIBRARY_VERSION:NULL
             PLUGIN_AUTHOR:MySQL AB
        PLUGIN_DESCRIPTION:这是一个伪存储引擎,用于表示事务中的binlog
            PLUGIN_LICENSE:GPL
               LOAD_OPTION:FORCE
    ...
    *************************** 10.排******************** *******
               PLUGIN_NAME:InnoDB
            PLUGIN_VERSION:1.0
             PLUGIN_STATUS:有效
               PLUGIN_TYPE:存储引擎
       PLUGIN_TYPE_VERSION:50158.0
            PLUGIN_LIBRARY:ha_innodb_plugin.so
    PLUGIN_LIBRARY_VERSION:1.0
             PLUGIN_AUTHOR:Innobase Oy
        PLUGIN_DESCRIPTION:支持事务,行级锁定,
                            和外键
            PLUGIN_LICENSE:GPL
               LOAD_OPTION:ON
    ...
    
  • SHOW PLUGINS 语句为每个加载的插件显示一行。 任何具有 Library 值的 NULL 内置都是无法卸载的。

    MySQL的> SHOW PLUGINS\G
    *************************** 1。排******************** *******
       名称:binlog
     状态:ACTIVE
       类型:存储引擎
    库:NULL
    许可证:GPL
    ...
    *************************** 10.排******************** *******
       名称:InnoDB
     状态:ACTIVE
       类型:存储引擎
    图书馆:ha_innodb_plugin.so
    许可证:GPL
    ...
    
  • mysql.plugin 表显示了已注册的插件 INSTALL PLUGIN 该表仅包含插件名称和库文件名,因此它不提供与 PLUGINS 表或 SHOW PLUGINS 语句 一样多的信息

5.6.3 MySQL企业线程池

注意

MySQL Enterprise Thread Pool是MySQL Enterprise Edition中的扩展,是企业产品。 要了解有关商业产品的更多信息, 请访问https://www.mysql.com/products/

MySQL企业版包括MySQL Enterprise Thread Pool,使用服务器插件实现。 MySQL Server中的默认线程处理模型使用每个客户端连接一个线程执行语句。 随着越来越多的客户端连接到服务器并执行语句,整体性能会下降。 线程池插件提供了另一种线程处理模型,旨在减少开销并提高性能。 该插件实现了一个线程池,通过有效地管理大量客户端连接的语句执行线程来提高服务器性能。

线程池解决了每个连接使用一个线程的模型的几个问题:

  • 太多的线程堆栈使CPU缓存在高度并行的执行工作负载中几乎无用。 线程池促进线程堆栈重用以最小化CPU缓存占用空间。

  • 由于太多线程并行执行,因此上下文切换开销很高。 这也给操作系统调度程序带来了挑战性的任务。 线程池控制活动线程的数量,以使MySQL服务器内的并行性保持在它可以处理的水平,并且适用于正在执行MySQL的服务器主机。

  • 并行执行的事务太多会增加资源争用。 InnoDB ,这增加了持有中央互斥锁所花费的时间。 线程池控制事务何时开始,以确保并行执行的次数不会太多。

其他资源

第A.14节“MySQL 8.0常见问题解答:MySQL企业线程池”

5.6.3.1线程池组件

线程池功能包括以下组件:

  • 插件库文件实现了线程池代码的插件以及几个提供有关线程池操作的信息的相关监视表:

    • 从MySQL 8.0.14开始,监控表是性能模式表; 请参见 第26.12.15节“性能架构线程池表”

    • 在MySQL 8.0.14之前,监控表是 INFORMATION_SCHEMA 表格; 请参见 第25.40节“INFORMATION_SCHEMA线程池表”

      这些 INFORMATION_SCHEMA 表现已弃用,将在未来的MySQL版本中删除。 应用程序应从旧表转换到新表。 例如,如果应用程序使用此查询:

      SELECT * FROM INFORMATION_SCHEMA.TP_THREAD_STATE;
      

      应用程序应该使用此查询:

      SELECT * FROM performance_schema.tp_thread_state;
      
    注意

    如果未加载所有监控表,则部分或全部MySQL Enterprise Monitor线程池图将为空。

    有关线程池如何工作的详细说明,请参见 第5.6.3.3节“线程池操作”

  • 几个系统变量与线程池相关。 thread_handling 系统变量的值, loaded-dynamically 当服务器成功加载线程池插件。

    其他相关变量由线程池插件实现; 除非启用它们,否则它们不可用:

    如果插件实现的任何变量在启动时设置为非法值,则插件初始化失败并且插件无法加载。

    有关设置线程池参数的信息,请参见 第5.6.3.4节“线程池调整”

  • 性能模式具有公开线程池信息的工具,可用于调查操作性能。 要识别它们,请使用以下查询:

    SELECT * FROM performance_schema.setup_instruments
    在哪里名称'%thread_pool%';
    

    有关更多信息,请参见 第26章, MySQL性能架构

5.6.3.2线程池安装

本节介绍如何安装MySQL Enterprise Thread Pool。 有关安装插件的一般信息,请参见 第5.6.1节“安装和卸载插件”

要使服务器可以使用,插件库文件必须位于MySQL插件目录( plugin_dir 系统变量 指定的目录 )中。 如有必要,通过设置 plugin_dir 服务器启动时 的值来配置插件目录位置

插件库文件基本名称是 thread_pool 文件名后缀因平台 .so 而异 (例如, 对于Unix和类Unix系统, .dll 对于Windows)。

从MySQL 8.0.14开始的线程池安装

在MySQL 8.0.14及更高版本中,线程池监视表是与线程池插件一起加载和卸载的性能模式表。 INFORMATION_SCHEMA 版本已弃用但仍可用; 它们是按照 MySQL 8.0.14之前的线程池安装中 的说明 安装的

要启用线程池功能,请通过使用该 --plugin-load-add 选项 启动服务器来加载插件 为此,请将这些行放在服务器 my.cnf 文件中( .so 根据需要 调整 平台 后缀):

的[mysqld]
插件的负载加= thread_pool.so

要验证插件安装,请检查 INFORMATION_SCHEMA.PLUGINS 表或使用该 SHOW PLUGINS 语句(请参见 第5.6.2节“获取服务器插件信息” )。 例如:

MySQL的> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE 'thread%';
+ ----------------------- + -------- +
| PLUGIN_NAME | PLUGIN_STATUS |
+ ----------------------- + -------- +
| thread_pool | ACTIVE |
+ ----------------------- + -------- +

要验证性能模式监视表是否可用,请检查该 INFORMATION_SCHEMA.TABLES 表或使用该 SHOW TABLES 语句。 例如:

MySQL的> SELECT TABLE_NAME
       FROM INFORMATION_SCHEMA.TABLES
       WHERE TABLE_SCHEMA = 'performance_schema'
       AND TABLE_NAME LIKE 'tp%';
+ ----------------------- +
| TABLE_NAME |
+ ----------------------- +
| tp_thread_group_state |
| tp_thread_group_stats |
| tp_thread_state |
+ ----------------------- +

如果服务器成功加载线程池插件,则将 thread_handling 系统变量设置为 loaded-dynamically

如果插件无法初始化,请检查服务器错误日志以获取诊断消息。

MySQL 8.0.14之前的线程池安装

在MySQL 8.0.14之前,线程池监视表是与线程池插件分开的插件,可以单独安装。

要启用线程池功能,请通过使用该 --plugin-load-add 选项 启动服务器来加载要使用的插件 例如,如果仅命名插件库文件,则服务器会加载它包含的所有插件(即线程池插件和所有 INFORMATION_SCHEMA 表)。 为此,请将这些行放在服务器 my.cnf 文件中( .so 根据需要 调整 平台 后缀):

的[mysqld]
插件的负载加= thread_pool.so

这相当于通过单独命名它们来加载所有线程池插件:

的[mysqld]
插件的负载加= thread_pool = thread_pool.so
插件的负载加= tp_thread_state = thread_pool.so
插件的负载加= tp_thread_group_state = thread_pool.so
插件的负载加= tp_thread_group_stats = thread_pool.so

如果需要,您可以从库文件加载单个插件。 要加载线程池插件而不是 INFORMATION_SCHEMA 表,请使用如下选项:

的[mysqld]
插件的负载加= thread_pool = thread_pool.so

要加载线程池插件而只加载 表,请使用以下选项: TP_THREAD_STATE INFORMATION_SCHEMA

的[mysqld]
插件的负载加= thread_pool = thread_pool.so
插件的负载加= tp_thread_state = thread_pool.so

要验证插件安装,请检查 INFORMATION_SCHEMA.PLUGINS 表或使用该 SHOW PLUGINS 语句(请参见 第5.6.2节“获取服务器插件信息” )。 例如:

MySQL的> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE 'thread%' OR PLUGIN_NAME LIKE 'tp%';
+ ----------------------- + -------- +
| PLUGIN_NAME | PLUGIN_STATUS |
+ ----------------------- + -------- +
| thread_pool | ACTIVE |
| TP_THREAD_STATE | ACTIVE |
| TP_THREAD_GROUP_STATE | ACTIVE |
| TP_THREAD_GROUP_STATS | ACTIVE |
+ ----------------------- + -------- +

如果服务器成功加载线程池插件,则将 thread_handling 系统变量设置为 loaded-dynamically

如果插件无法初始化,请检查服务器错误日志以获取诊断消息。

5.6.3.3线程池操作

线程池由许多线程组组成,每个线程组管理一组客户端连接。 在建立连接时,线程池以循环方式将它们分配给线程组。

可以使用 thread_pool_size 系统变量 配置线程组的数量 默认的组数为16.有关设置此变量的指导,请参见 第5.6.3.4节“线程池调整”

每组的最大线程数为4096(在内部使用一个线程的某些系统上为4095)。

线程池将连接和线程分开,因此连接与执行从这些连接接收的语句的线程之间没有固定的关系。 这与默认线程处理模型不同,后者将一个线程与一个连接相关联,以便线程执行连接中的所有语句。

线程池尝试在任何时候确保每个组中最多执行一个线程,但有时允许更多线程暂时执行以获得最佳性能。 该算法以下列方式工作:

  • 每个线程组都有一个侦听器线程,用于侦听分配给该组的连接的传入语句。 当一个语句到达时,线程组要么立即开始执行它,要么将它排队等待以后执行:

    • 如果语句是唯一接收的语句并且没有语句排队或当前正在执行,则立即执行。

    • 如果语句无法立即开始执行,则会发生排队。

  • 如果立即执行,则由侦听器线程执行。 (这意味着组中的线程暂时没有正在侦听。)如果语句快速完成,则执行线程将返回侦听语句。 否则,线程池会认为语句已停止,并将另一个线程作为侦听器线程启动(必要时创建它)。 为了确保没有线程组被停滞的语句阻塞,线程池有一个后台线程,它定期监视线程组状态。

    通过使用侦听线程来执行可以立即开始的语句,如果语句快速完成,则无需创建其他线程。 这确保了在并发线程数较少的情况下可以最有效地执行。

    当线程池插件启动时,它会为每个组(侦听器线程)和后台线程创建一个线程。 必要时会创建其他线程来执行语句。

  • thread_pool_stall_limit 系统变量 的值 确定 前一项 快速完成 的含义 线程被视为停顿之前的默认时间是60ms,但可以设置为最多6s。 此参数可配置为使您能够获得适合服务器工作负载的平衡。 短等待值允许线程更快地启动。 短值也可以更好地避免死锁情况。 长等待值对于包含长时间运行语句的工作负载很有用,以避免在当前执行时发出太多新语句。

  • 线程池侧重于限制并发短期运行语句的数量。 在执行语句到达停顿时间之前,它会阻止其他语句开始执行。 如果语句执行超过停顿时间,则允许继续但不再阻止其他语句启动。 通过这种方式,线程池尝试确保在每个线程组中始终存在多个短运行语句,尽管可能存在多个长时间运行的语句。 让长时间运行的语句阻止其他语句执行是不可取的,因为对可能需要的等待量没有限制。 例如,

  • 如果语句遇到磁盘I / O操作或用户级别锁定(行锁定或表锁定),则会阻止该语句。 该块将导致线程组变为未使用,因此存在对线程池的回调,以确保线程池可以立即启动该组中的新线程以执行另一个语句。 当被阻塞的线程返回时,线程池允许它立即重启。

  • 有两个队列,一个是高优先级队列,另一个是低优先级队列。 事务中的第一个语句转到低优先级队列。 如果事务正在进行(其语句已开始执行),则事务的任何后续语句将转到高优先级队列,否则转到低优先级队列。 通过启用 thread_pool_high_priority_connection 系统变量 可以影响队列分配 ,这会导致会话的所有排队语句进入高优先级队列。

    非事务性存储引擎或事务引擎(如果 autocommit 启用)的语句被视为低优先级语句,因为在这种情况下,每个语句都是一个事务。 因此,给定 InnoDB 语句的混合语句 除非 启用 否则 MyISAM 线程池优先于 InnoDB 那些 语句 随着 启用时,所有的语句将低优先级。 MyISAM autocommit autocommit

  • 当线程组选择要执行的排队语句时,它首先查找高优先级队列,然后查找低优先级队列。 如果找到一个语句,它将从队列中删除并开始执行。

  • 如果语句在低优先级队列中停留的时间过长,则线程池将移至高优先级队列。 thread_pool_prio_kickup_timer 系统变量 的值 控制移动前的时间。 对于每个线程组,每10ms或每秒100个最多一个语句将从低优先级队列移动到高优先级队列。

  • 线程池重用最活跃的线程以更好地使用CPU缓存。 这是一个小的调整,对性能有很大影响。

  • 当线程从用户连接执行语句时,Performance Schema检测会将线程活动记录到用户连接。 否则,Performance Schema会将活动记录到线程池。

以下是线程组可能有多个线程开始执行语句的条件示例:

  • 一个线程开始执行一个语句,但运行时间足以被视为停顿。 即使第一个线程仍在执行,线程组也允许另一个线程开始执行另一个语句。

  • 一个线程开始执行语句,然后被阻塞并将其报告回线程池。 线程组允许另一个线程开始执行另一个语句。

  • 一个线程开始执行一个语句,被阻塞,但没有报告它被阻止,因为该块不会出现在已经使用线程池回调检测的代码中。 在这种情况下,线程组的线程仍然在运行。 如果块持续的时间足以使语句被视为停顿,则该组允许另一个线程开始执行另一个语句。

线程池旨在通过越来越多的连接进行扩展。 它还旨在避免因限制活动执行语句的数量而引起的死锁。 重要的是,不报告回线程池的线程不会阻止其他语句执行,从而导致线程池变为死锁。 此类陈述的示例如下:

  • 长期运行的声明。 这些将导致仅由少数语句使用的所有资源,并且它们可以阻止所有其他人访问服务器。

  • 二进制日志转储线程,读取二进制日志并将其发送到从属。 这是一种长时间运行的 语句 ,它运行很长时间,不应该阻止其他语句执行。

  • 在行锁定,表锁定,睡眠或任何其他阻止活动上阻止的语句尚未由MySQL服务器或存储引擎报告回线程池。

在每种情况下,为了防止死锁,当语句未快速完成时,语句将被移动到已停止的类别,以便线程组可以允许另一个语句开始执行。 使用此设计,当线程执行或被阻塞一段延长的时间时,线程池会将线程移动到停滞的类别,并且对于语句执行的其余部分,它不会阻止其他语句执行。

可能出现的最大线程数是 max_connections 的总和 thread_pool_size 这可能发生在所有连接都处于执行模式并且每个组创建额外线程以侦听更多语句的情况下。 这不一定是经常发生的状态,但理论上是可行的。

5.6.3.4线程池调整

本节提供有关设置线程池系统变量以获得最佳性能的指南,使用诸如每秒事务数之类的度量来衡量。

thread_pool_size 是控制线程池性能的最重要参数。 它只能在服务器启动时设置。 我们测试线程池的经验表明如下:

  • 如果是主存储引擎 InnoDB ,则最佳 thread_pool_size 设置可能在16到36之间,最常见的最佳值倾向于从24到36.我们还没有看到任何设置已超过36的最佳设置。是小于16的值是最佳的特殊情况。

    对于DBT2和Sysbench等工作负载,最佳值 InnoDB 似乎通常在36左右。对于非常写入密集型的工作负载,最佳设置有时可能会更低。

  • 如果是主存储引擎 MyISAM ,则 thread_pool_size 设置应该相当低。 我们倾向于从4到8的值获得最佳性能。较高的值往往会对性能产生轻微负面影响但不会产生显着影响。

另一个系统变量 thread_pool_stall_limit 对于处理被阻塞和长时间运行的语句非常重要。 如果所有阻止MySQL服务器的调用都被报告给线程池,它将始终知道何时阻止执行线程。 但是,这可能并非总是如此。 例如,块可能出现在尚未使用线程池回调进行检测的代码中。 对于这种情况,线程池必须能够识别看似被阻止的线程。 这是通过超时完成的,超时可以使用 thread_pool_stall_limit 系统变量 调整其长度 此参数可确保服务器不会被完全阻止。 的价值 thread_pool_stall_limit 上限为6秒,以防止服务器死锁的风险。

thread_pool_stall_limit 还使线程池能够处理长时间运行的语句。 如果允许长时间运行的语句阻止线程组,则分配给该组的所有其他连接将被阻止,并且在长时间运行的语句完成之前无法开始执行。 在最坏的情况下,这可能需要数小时甚至数天。

thread_pool_stall_limit 应该选择 值, 使得执行时间长于其值的语句被认为是停滞不前的。 停滞的语句会产生大量的额外开销,因为它们涉及额外的上下文切换,在某些情况下还需要额外的线程创建。 另一方面,将 thread_pool_stall_limit 参数 设置 得太高意味着长时间运行的语句将阻止许多短时间运行的语句超过必要的时间。 短等待值允许线程更快地启动。 短值也可以更好地避免死锁情况。 长等待值对于包含长时间运行语句的工作负载很有用,以避免在当前执行时发出太多新语句。

假设服务器执行工作负载,即使服务器加载,99.9%的语句在100ms内完成,其余语句在100ms到2小时之间相当均匀地传播。 在这种情况下,设置 thread_pool_stall_limit 为10(意味着100毫秒)是有意义的。 对于主要执行非常简单的语句的服务器,默认值为60ms是可以的。

thread_pool_stall_limit 可以在运行时更改 参数,以使您能够获得适合服务器工作负载的平衡。 假设 tp_thread_group_stats 表已启用,您可以使用以下查询来确定已停止的已执行语句的分数:

SELECT SUM(STALLED_QUERIES_EXECUTED)/ SUM(QUERIES_EXECUTED)
FROM performance_schema.tp_thread_group_stats;

这个数字应该尽可能低。 为了减少语句停滞的可能性,增加语句的值 thread_pool_stall_limit

当一个语句到达时,它在实际开始执行之前可以延迟的最长时间是多少? 假设以下条件适用:

在最坏的情况下,10个高优先级语句代表10个持续执行很长时间的事务。 因此,在最坏的情况下,没有语句将被移动到高优先级队列,因为它总是已经包含等待执行的语句。 10秒后,新语句有资格移动到高优先级队列。 但是,在可以移动它之前,它之前的所有语句也必须移动。 这可能需要另外2秒,因为每秒最多100个语句被移动到高优先级队列。 现在,当语句到达高优先级队列时,可能会有许多长时间运行的语句。 在最坏的情况下, 在从高优先级队列中检索下一个语句之前,每个语句都会停止运行并且每个语句需要1秒钟。 因此,在这种情况下,新语句开始执行需要222秒。

此示例显示了应用程序的最坏情况。 如何处理它取决于应用程序。 如果应用程序对响应时间有很高的要求,那么它很可能会将用户本身限制在更高的级别。 否则,它可以使用线程池配置参数来设置某种最大等待时间。

5.6.4重写器查询重写插件

MySQL支持查询重写插件,可以在服务器执行之前检查并可能修改服务器接收的SQL语句。 请参阅 查询重写插件

MySQL发行版包括一个名为postparse query rewrite的插件, Rewriter 以及用于安装插件及其相关组件的脚本。 这些组件协同工作以提供语句重写功能:

  • 一个名为 Rewriter examns语句的 服务器端插件 ,可以根据重写规则的内存缓存重写它们。

  • 这些陈述可能会被重写:

    独立语句和准备好的语句可以重写。 视图定义或存储程序中发生的语句不会被重写。

  • Rewriter 插件使用名为 query_rewrite 包含 名为 的表 的数据库 rewrite_rules 该表为插件用于决定是否重写语句的规则提供持久存储。 用户通过修改此表中存储的规则集与插件进行通信。 该插件通过设置 message 表行列 与用户进行通信

  • query_rewrite 数据库包含一个名为的存储过程 flush_rewrite_rules() ,用于将rules表的内容加载到插件中。

  • 存储过程 load_rewrite_rules() 使用 名为的用户定义函数 flush_rewrite_rules()

  • Rewriter 插件公开了系统变量,这些变量支持提供运行时操作信息的插件配置和状态变量。

以下部分描述了如何安装和使用 Rewriter 插件,并提供其相关组件的参考信息。

5.6.4.1安装或卸载重写器查询重写插件

注意

如果已安装, Rewriter 即使禁用 插件也会产生一些开销。 为避免此开销,请不要安装插件,除非您打算使用它。

要安装或卸载 Rewriter 查询重写插件,请选择位于 share MySQL安装目录中 的相应脚本

  • install_rewriter.sql :选择此脚本以安装 Rewriter 插件及其关联的组件。

  • uninstall_rewriter.sql :选择此脚本以卸载 Rewriter 插件及其关联的组件。

运行所选脚本如下:

shell> mysql -u root -p < install_rewriter.sql
输入密码:(enter root password here)

此处的示例使用 install_rewriter.sql 安装脚本。 uninstall_rewriter.sql 如果要卸载插件,请 替换

运行安装脚本应该安装并启用该插件。 要验证这一点,请连接到服务器并执行以下语句:

MySQL的> SHOW GLOBAL VARIABLES LIKE 'rewriter_enabled';
+ ------------------ + ------- +
| Variable_name | 价值|
+ ------------------ + ------- +
| rewriter_enabled | ON |
+ ------------------ + ------- +

有关使用说明,请参见 第5.6.4.2节“使用重写器查询重写插件” 有关参考信息,请参见 第5.6.4.3节“重写器查询重写插件参考”

5.6.4.2使用重写器查询重写插件

要启用或禁用插件,请启用或禁用 rewriter_enabled 系统变量。 默认情况下, Rewriter 插件在安装时会启用(请参见 第5.6.4.1节“安装或卸载重写器查询重写插件” )。 要显式设置初始插件状态,可以在服务器启动时设置变量。 例如,要在选项文件中启用插件,请使用以下行:

的[mysqld]
rewriter_enabled = ON

也可以在运行时启用或禁用插件:

SET GLOBAL rewriter_enabled = ON;
SET GLOBAL rewriter_enabled = OFF;

假设 Rewriter 插件已启用,它会检查并可能修改服务器接收的每个可重写语句。 该插件根据重写规则的内存缓存来确定是否重写语句,这些重写规则是从 数据库中 rewrite_rules 表中 加载 query_rewrite

这些陈述可能会被重写:

独立语句和准备好的语句可以重写。 视图定义或存储程序中发生的语句不会被重写。

添加重写规则

要为 Rewriter 插件 添加规则 ,请向 rewrite_rules 表中 添加行 ,然后调用 flush_rewrite_rules() 存储过程以将表中的规则加载到插件中。 以下示例创建一个简单规则来匹配选择单个文字值的语句:

INSERT INTO query_rewrite.rewrite_rules(模式,替换)
VALUES('SELECT?','SELECT?+ 1');

生成的表内容如下所示:

MySQL的> SELECT * FROM query_rewrite.rewrite_rules\G
*************************** 1。排******************** *******
                id:1
           模式:SELECT?
  pattern_database:NULL
       替换:SELECT?+ 1
           启用:是
           消息:NULL
    pattern_digest:NULL
normalized_pa​​ttern:NULL

该规则指定模式模板,指示 SELECT 要匹配的语句,以及指示如何重写匹配语句的替换模板。 但是,将规则添加到 rewrite_rules 表中不足以使 Rewriter 插件使用该规则。 您必须调用 flush_rewrite_rules() 以将表内容加载到插件内存缓存中:

MySQL的> CALL query_rewrite.flush_rewrite_rules();
小费

如果您的重写规则似乎无法正常工作,请确保通过调用重新加载规则表 flush_rewrite_rules()

当插件从规则表中读取每个规则时,它会根据模式和摘要哈希值计算规范化(语句摘要)表单,并使用它们来更新 normalized_pattern pattern_digest 列:

MySQL的> SELECT * FROM query_rewrite.rewrite_rules\G
*************************** 1。排******************** *******
                id:1
           模式:SELECT?
  pattern_database:NULL
       替换:SELECT?+ 1
           启用:是
           消息:NULL
    pattern_digest:d1b44b0c19af710b5a679907e284acd2ddc285201794bc69a2389d77baedddae
normalized_pa​​ttern:选择?

有关语句摘要,规范化语句和摘要哈希值的信息,请参见 第26.10节“性能模式语句摘要和采样”

如果由于某些错误而无法加载规则,则调用 flush_rewrite_rules() 会产生错误:

MySQL的> CALL query_rewrite.flush_rewrite_rules();
ERROR 1644(45000):加载某些规则失败。

发生这种情况时,插件会将错误消息写入 message 规则行的列以传达问题。 检查 rewrite_rules 表中是否有非 NULL message 列值的 行, 以查看存在的问题。

模式使用与预准备语句相同的语法(请参见 第13.5.1节“PREPARE语法” )。 在模式模板中, ? 字符充当与数据值匹配的参数标记。 参数标记只能用于应出现数据值的位置,而不能用于SQL关键字,标识符等。 ? 字符不应引号括起来。

与模式一样,替换可以包含 ? 字符。 对于与模式模板匹配的语句,插件会重写它, ? 使用模式中相应标记匹配的数据值 替换替换中的 参数标记。 结果是一个完整的语句字符串。 插件要求服务器解析它,并将结果作为重写语句的表示返回给服务器。

添加并加载规则后,根据语句是否与规则模式匹配,检查是否发生重写:

MySQL的> SELECT PI();
+ ---------- +
| PI()|
+ ---------- +
| 3.141593 |
+ ---------- +
1排(0.01秒)

MySQL的> SELECT 10;
+ -------- +
| 10 + 1 |
+ -------- +
| 11 |
+ -------- +
1排,1警告(0.00秒)

第一个 SELECT 语句 没有重写 ,但第二个语句 没有重写 第二个语句说明当 Rewriter 插件重写语句时,它会产生一条警告消息。 要查看消息,请使用 SHOW WARNINGS

MySQL的> SHOW WARNINGS\G
*************************** 1。排******************** *******
  等级:注意
   代码:1105
消息:查询'SELECT 10'被查询重写插件重写为'SELECT 10 + 1'

不需要将语句重写为相同类型的语句。 以下示例加载一条 DELETE UPDATE 语句 重写 语句 的规则

INSERT INTO query_rewrite.rewrite_rules(模式,替换)
VALUES('从db1.t1删除WHERE col =?',
       'UPDATE db1.t1 SET col = NULL WHERE col =?');
CALL query_rewrite.flush_rewrite_rules();

要启用或禁用现有规则,请修改其 enabled 列并将表重新加载到插件中。 要禁用规则1:

UPDATE query_rewrite.rewrite_rules SET enabled ='NO'WHERE id = 1;
CALL query_rewrite.flush_rewrite_rules();

这使您可以在不从表中删除规则的情况下停用规则。

要重新启用规则1:

UPDATE query_rewrite.rewrite_rules SET enabled ='YES'WHERE id = 1;
CALL query_rewrite.flush_rewrite_rules();

rewrite_rules 表包含一 pattern_database 列, Rewriter 用于匹配未使用数据库名称限定的表名:

  • 如果相应的数据库和表名相同,则语句中的限定表名与模式中的限定名匹配。

  • 仅当默认数据库 pattern_database 与表名相同且 语句名相同时,语句中的非限定表名才会匹配模式中的非限定名称

假设一个名为 appdb.users 的列具有一个 名为 的列 id ,并且应用程序应该使用这些表单之一的查询从表中选择行,其中第二个只有 appdb 在默认数据库时 才能使用

SELECT * FROM users WHERE appdb.id = id_value;
SELECT * FROM users WHERE id = id_value;

还假设该 id 列被重命名为 user_id (可能必须修改该表以添加另一种类型的ID,并且有必要更具体地指示该 id 列表示 的ID类型 )。

更改意味着应用程序必须引用 user_id 而不是 id WHERE 子句中 引用 但是,如果有旧的应用程序无法编写以更改 SELECT 它们生成 查询,则它们将无法正常工作。 Rewriter 插件可以解决这个问题。 要匹配和重写语句,无论它们是否限定表名,请添加以下两个规则并重新加载规则表:

INSERT INTO query_rewrite.rewrite_rules
    (图案,替换)VALUES(
    'SELECT * FROM appdb.users WHERE id =?',
    'SELECT * FROM appdb.users WHERE user_id =?'
    );
INSERT INTO query_rewrite.rewrite_rules
    (pattern,replacement,pattern_database)VALUES(
    'SELECT * FROM users WHERE id =?',
    'SELECT * FROM users WHERE user_id =?',
    'appdb'
    );
CALL query_rewrite.flush_rewrite_rules();

Rewriter 使用第一个规则来匹配使用限定表名的语句。 它使用第二个匹配使用非限定名称的语句,但仅限于默认数据库 appdb (值为 pattern_database )。

声明匹配的工作原理

Rewriter 插件使用语句摘要和摘要哈希值来分阶段匹配传入语句和重写规则。 max_digest_length 系统变量决定用于计算语句摘要缓冲区的大小。 较大的值可以计算区分较长语句的摘要。 较小的值使用较少的内存,但会增加较长语句与相同摘要值冲突的可能性。

该插件将每个语句与重写规则匹配如下:

  1. 计算语句摘要哈希值并将其与规则摘要哈希值进行比较。 这可能会出现误报,但可作为快速拒绝测试。

  2. 如果语句摘要哈希值与任何模式摘要哈希值匹配,则将语句的规范化(语句摘要)形式与匹配规则模式的规范化形式相匹配。

  3. 如果规范化语句与规则匹配,则比较语句和模式中的文字值。 一个 ? 在模式字符匹配在声明中的任何文字值。 如果语句准备语句, ? 则模式 ? 中的语句 也匹配 否则,相应的文字必须相同。

如果多个规则与一个语句匹配,那么插件用来重写语句的是不确定的。

如果模式包含的标记多于替换,则插件会丢弃多余的数据值。 如果模式包含的标记少于替换,则表示错误。 插件在加载规则表时注意到这一点,将错误消息写入 message 规则行的列以传达问题,并将 Rewriter_reload_error 状态变量设置为 ON

重写准备好的陈述

准备好的语句在分析时(即准备好时)重写,而不是在以后执行时重写。

准备好的语句与非准备语句的不同之处在于它们可能包含 ? 字符作为参数标记。 要匹配预 ? 准备语句中的 Rewriter 模式 模式必须包含 ? 在同一位置。 假设重写规则具有以下模式:

SELECT?,3

下表显示了几个预准备 SELECT 语句以及规则模式是否与它们匹配。

准备好的声明 模式是否匹配声明
PREPARE s AS 'SELECT 3, 3'
PREPARE s AS 'SELECT ?, 3'
PREPARE s AS 'SELECT 3, ?' 没有
PREPARE s AS 'SELECT ?, ?' 没有
重写插件操作信息

Rewriter 插件通过几个状态变量提供有关其操作的信息:

MySQL的> SHOW GLOBAL STATUS LIKE 'Rewriter%';
+ ----------------------------------- + ------- +
| Variable_name | 价值|
+ ----------------------------------- + ------- +
| Rewriter_number_loaded_rules | 1 |
| Rewriter_number_reloads | 5 |
| Rewriter_number_rewritten_queries | 1 |
| Rewriter_reload_error | ON |
+ ----------------------------------- + ------- +

有关这些变量的描述,请参见 第5.6.4.3.4节“重写器查询重写插件状态变量”

通过调用 flush_rewrite_rules() 存储过程 加载规则表时 ,如果某个规则发生错误,则该 CALL 语句会产生错误,并且该插件会将 Rewriter_reload_error 状态变量设置为 ON

MySQL的> CALL query_rewrite.flush_rewrite_rules();
ERROR 1644(45000):加载某些规则失败。

MySQL的> SHOW GLOBAL STATUS LIKE 'Rewriter_reload_error';
+ ----------------------- + ------- +
| Variable_name | 价值|
+ ----------------------- + ------- +
| Rewriter_reload_error | ON |
+ ----------------------- + ------- +

在这种情况下,请检查 rewrite_rules 表中是否包含非 NULL message 列值的 行, 以查看存在哪些问题。

重写器插件使用字符集

rewrite_rules 表加载到 Rewriter 插件中时,插件使用 character_set_client 系统变量 的当前全局值来解释语句 如果 character_set_client 随后更改 全局 值,则必须重新加载规则表。

客户端的会话 character_set_client 必须 与加载规则表时的全局值相同,否则规则匹配将不适用于该客户端。

5.6.4.3重写器查询重写插件参考

以下讨论用作对与 Rewriter 查询重写插件 相关联的这些组件的引用

  • 数据库中 Rewriter 规则表 query_rewrite

  • Rewriter 程序和功能

  • Rewriter 系统和状态变量

5.6.4.3.1重写器查询重写插件规则表

数据库中 rewrite_rules query_rewrite Rewriter 插件用于决定是否重写语句 的规则提供持久存储

用户通过修改此表中存储的规则集与插件进行通信。 该插件通过设置表的 message 来向用户传达信息

注意

规则表由 flush_rewrite_rules 存储过程 加载到插件中 除非在最近的表修改之后调用该过程,否则表内容不一定对应于插件正在使用的规则集。

rewrite_rules 表包含以下列:

  • id

    规则ID。 此列是表主键。 您可以使用该ID唯一标识任何规则。

  • pattern

    指示规则匹配的语句模式的模板。 使用 ? 表示匹配的数据值是参数标记。

  • pattern_database

    数据库用于匹配语句中的非限定表名。 如果相应的数据库和表名相同,则语句中的限定表名与模式中的限定名匹配。 仅当默认数据库 pattern_database 与表名相同且 语句名相同时,语句中的非限定表名才会匹配模式中的非限定名称

  • replacement

    指示如何重写与 pattern 列值 匹配的语句的模板 使用 ? 表示匹配的数据值是参数标记。 在重写的语句中,插件 使用与相应标记匹配的数据值 替换 ? 参数标记 replacement pattern

  • enabled

    规则是否已启用。 加载操作(通过调用 flush_rewrite_rules() 存储过程执行) Rewriter 仅在此列 加载 时才 将表中的规则加载到 内存高速缓存中 YES

    此列可以在不删除规则的情况下停用规则:将列设置为除 YES 之外的值 ,然后将表重新加载到插件中。

  • message

    该插件使用此列与用户进行通信。 如果将规则表加载到内存中时没有发生错误,则插件会将 message 设置 NULL NULL 值表示错误,列内容是错误消息。 在这些情况下可能会发生错误:

    • 模式或替换是一个产生语法错误的错误SQL语句。

    • 替换包含 ? 比模式 更多的 参数标记。

    如果发生加载错误,插件还会将 Rewriter_reload_error 状态变量设置为 ON

  • pattern_digest

    此列用于调试和诊断。 如果在将规则表加载到内存中时该列存在,则插件会使用模式摘要更新它。 如果您尝试确定某些语句无法重写的原因,则此列可能很有用。

  • normalized_pattern

    此列用于调试和诊断。 如果在将规则表加载到内存中时该列存在,则插件会使用模式的规范化形式对其进行更新。 如果您尝试确定某些语句无法重写的原因,则此列可能很有用。

5.6.4.3.2重写器查询重写插件程序和功能

Rewriter 插件操作使用存储过程将规则表加载到其内存缓存中,以及辅助用户定义函数(UDF)。 在正常操作下,用户仅调用存储过程。 UDF旨在由存储过程调用,而不是由用户直接调用。

  • flush_rewrite_rules()

    此存储过程使用 load_rewrite_rules() UDF将 rewrite_rules 的内容加载 Rewriter 内存高速缓存中。

    呼唤 flush_rewrite_rules() 意味着 COMMIT

    修改规则表后,调用此过程以使插件从新表内容更新其缓存。 如果发生任何错误,插件会 message 为表中的相应规则行 设置 列,并将 Rewriter_reload_error 状态变量设置为 ON

  • load_rewrite_rules()

    此UDF是 flush_rewrite_rules() 存储过程 使用的辅助例程

5.6.4.3.3重写器查询重写插件系统变量

Rewriter 查询重写插件支持以下系统变量。 只有安装了插件,这些变量才可用(请参见 第5.6.4.1节“安装或卸载重写器查询重写插件” )。

5.6.4.3.4重写器查询重写插件状态变量

Rewriter 查询重写插件支持以下状态变量。 只有安装了插件,这些变量才可用(请参见 第5.6.4.1节“安装或卸载重写器查询重写插件” )。

  • Rewriter_number_loaded_rules

    成功从 rewrite_rules 表中 加载 到内存中以供 Rewriter 插件 使用 的重写插件重写规则的数量

  • Rewriter_number_reloads

    的次数的 rewrite_rules 表已经被加载到由所使用的内存中缓存 Rewriter 插件。

  • Rewriter_number_rewritten_queries

    Rewriter 查询重写插件自加载以来 重写的 查询

  • Rewriter_reload_error

    是否在最近将 rewrite_rules 表加载到 Rewriter 插件 使用的内存高速缓存中 时发生错误 如果值为 OFF ,则不会发生错误。 如果值为,则 ON 发生错误; 检查 message rewriter_rules 是否有错误消息。

5.6.5 ddl_rewriter插件

MySQL 8.0.16及更高版本包含一个 ddl_rewriter 插件,用于 CREATE TABLE 在解析和执行服务器之前 修改 服务器接收的语句。 插件删除 ENCRYPTION DATA DIRECTORY INDEX DIRECTORY 子句,从从加密的数据库创建的SQL转储文件中恢复表或将其表存储在数据目录之外时,这可能会有所帮助。 例如,插件可以将这样的转储文件恢复到未加密的实例中或者在数据目录外的路径不可访问的环境中。

在使用 ddl_rewriter 插件 之前 ,请按照 第5.6.5.1节“安装或卸载ddl_rewriter”中 提供的说明进行 安装

ddl_rewriter 在解析之前检查服务器接收的SQL语句,根据这些条件重写它们:

  • ddl_rewriter 仅考虑 CREATE TABLE 语句,并且仅当它们是在输入行的开头或准备语句文本的开头出现的独立语句时。 ddl_rewriter 不考虑 CREATE TABLE 存储的程序定义中的语句。 语句可以扩展到多行。

  • 在考虑重写的语句中,重写以下子句的实例,并将每个实例替换为单个空格:

    • ENCRYPTION

    • DATA DIRECTORY (在表和分区级别)

    • INDEX DIRECTORY (在表和分区级别)

  • 重写不依赖于字母。

如果 ddl_rewriter 重写一个语句,它会生成一个警告:

MySQL的> CREATE TABLE t (i INT) DATA DIRECTORY '/var/mysql/data';
查询正常,0行受影响,1警告(0.03秒)

MySQL的> SHOW WARNINGS\G
*************************** 1。排******************** *******
  等级:注意
   代码:1105
消息:查询'CREATE TABLE t(i INT)DATA DIRECTORY'/ var / mysql / data''
         通过查询重写插件重写为'CREATE TABLE t(i INT)'
1排(0.00秒)

如果启用了常规查询日志或二进制日志,则服务器会在重写之后写入它们出现的语句 ddl_rewriter

安装后, ddl_rewriter 公开Performance Schema memory/rewriter/ddl_rewriter 工具以跟踪插件内存使用情况。 请参见 第26.12.16.10节“内存汇总表”

5.6.5.1安装或卸载ddl_rewriter

本节介绍如何安装或卸载 ddl_rewriter 插件。 有关安装插件的一般信息,请参见 第5.6.1节“安装和卸载插件”

注意

如果已安装, ddl_rewriter 即使禁用 插件也会涉及一些最小的开销。 要避免此开销,请 ddl_rewriter 仅在您打算使用它的期间 安装

主要用例是修改从转储文件恢复的语句,因此典型的使用模式是:1)安装插件; 2)恢复转储文件或文件; 3)卸载插件。

要使服务器可以使用,插件库文件必须位于MySQL插件目录( plugin_dir 系统变量 指定的目录 )中。 如有必要,通过设置 plugin_dir 服务器启动时 的值来配置插件目录位置

插件库文件基本名称是 ddl_rewriter 文件名后缀因平台 .so 而异 (例如, 对于Unix和类Unix系统, .dll 对于Windows)。

要安装 ddl_rewriter 插件,请使用该 INSTALL PLUGIN 语句( .so 根据需要 调整 平台 后缀):

INSTALL PLUGIN ddl_rewriter SONAME'ddl_rewriter.so';

要验证插件安装,请检查 INFORMATION_SCHEMA.PLUGINS 表或使用该 SHOW PLUGINS 语句(请参见 第5.6.2节“获取服务器插件信息” )。 例如:

MySQL的> SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE 'ddl%';
+ -------------- + --------------- + ------------- +
| PLUGIN_NAME | PLUGIN_STATUS | PLUGIN_TYPE |
+ -------------- + --------------- + ------------- +
| ddl_rewriter | ACTIVE | 审核|
+ -------------- + --------------- + ------------- +

如前面的结果所示, ddl_rewriter 实现为审计插件。

如果插件无法初始化,请检查服务器错误日志以获取诊断消息。

如上所述安装后,将 ddl_rewriter 一直安装,直到卸载为止。 要删除它,请使用 UNINSTALL PLUGIN

UNINSTALL PLUGIN ddl_rewriter;

如果 ddl_rewriter 已安装,则可以使用 --ddl-rewriter 后续服务器启动选项来控制 ddl_rewriter 插件激活。 例如,要防止在运行时启用插件,请使用此选项:

的[mysqld]
DDL-重写= OFF

5.6.5.2 ddl_rewriter插件选项

本节介绍控制 ddl_rewriter 插件 操作的命令选项 如果在启动时指定的值不正确,则 ddl_rewriter 插件可能无法正确初始化,并且服务器无法加载它。

要控制 ddl_rewriter 插件的 激活 ,请使用此选项:

5.6.6版本标记

MySQL包括Version Tokens,这是一种能够围绕服务器令牌创建和同步的功能,应用程序可以使用它来防止访问不正确或过时的数据。

Version Tokens接口具有以下特征:

  • 版本令牌是由作为键或标识符的名称加上值组成的对。

  • 版本令牌可以锁定。 应用程序可以使用令牌锁向其他协作应用程序指示令牌正在使用中且不应修改。

  • 每个服务器建立版本标记列表(例如,指定服务器分配或操作状态)。 此外,与服务器通信的应用程序可以注册其自己的令牌列表,这些令牌列表指示它需要服务器所在的状态。应用程序发送到不处于所需状态的服务器的SQL语句会产生错误。 这是应用程序的一个信号,它应该在所需的状态下寻找不同的服务器来接收SQL语句。

以下部分描述了版本标记的组件,讨论了如何安装和使用它,并提供了其组件的参考信息。

5.6.6.1版本标记组件

版本标记基于实现这些组件的插件库:

  • 名为的服务器端插件 version_tokens 保存与服务器关联的版本令牌列表,并订阅语句执行事件的通知。 version_tokens 插件使用 审计插件API 来监视来自客户端的传入语句,并将每个客户端的特定于会话的版本令牌列表与服务器版本令牌列表进行匹配。 如果匹配,则插件允许语句通过,服务器继续处理它。 否则,插件会向客户端返回错误,并且语句失败。

  • 一组用户定义函数(UDF)提供了一个SQL级API,用于操作和检查插件维护的服务器版本令牌列表。 VERSION_TOKEN_ADMIN SUPER 权限才能调用任何版本令牌的UDF。

  • version_tokens 插件加载时,它定义了 VERSION_TOKEN_ADMIN 动态特权。 可以将此权限授予UDF的用户。

  • 系统变量使客户端能够指定注册所需服务器状态的版本令牌列表。 如果客户端发送语句时服务器具有不同的状态,则客户端会收到错误。

5.6.6.2安装或卸载版本标记

注意

如果安装,版本标记涉及一些开销。 为避免此开销,请不要安装它,除非您打算使用它。

本节介绍如何安装或卸载Version Tokens,它在包含插件和用户定义函数(UDF)的插件库文件中实现。 有关安装或卸载插件和UDF的一般信息,请参见 第5.6.1节“安装和卸载插件” 第5.7.1节“安装和卸载用户定义的函数”

要使服务器可以使用,插件库文件必须位于MySQL插件目录( plugin_dir 系统变量 指定的目录 )中。 如有必要,通过设置 plugin_dir 服务器启动时 的值来配置插件目录位置

插件库文件基本名称是 version_tokens 文件名后缀因平台 .so 而异 (例如, 对于Unix和类Unix系统, .dll 对于Windows)。

要安装Version Tokens插件和UDF,请使用 INSTALL PLUGIN CREATE FUNCTION 语句( .so 根据需要 调整 平台 后缀):

INSTALL PLUGIN version_tokens SONAME'version_token.so';
CREATE FUNCTION version_tokens_set RETURNS STRING
  SONAME'version_token.so';
CREATE FUNCTION version_tokens_show RETURNS STRING
  SONAME'version_token.so';
CREATE FUNCTION version_tokens_edit RETURNS STRING
  SONAME'version_token.so';
CREATE FUNCTION version_tokens_delete返回STRING
  SONAME'version_token.so';
CREATE FUNCTION version_tokens_lock_shared RETURNS INT
  SONAME'version_token.so';
CREATE FUNCTION version_tokens_lock_exclusive返回INT
  SONAME'version_token.so';
CREATE FUNCTION version_tokens_unlock RETURNS INT
  SONAME'version_token.so';

您必须安装UDF来管理服务器的版本令牌列表,但您还必须安装插件,因为没有它,UDF将无法正常工作。

如果在主复制服务器上使用插件和UDF,请将它们安装在所有从属服务器上,以避免复制问题。

如上所述安装后,插件和UDF将保持安装状态,直到卸载为止。 要删除它们,请使用 UNINSTALL PLUGIN DROP FUNCTION 语句:

UNINSTALL PLUGIN version_tokens;
DROP FUNCTION version_tokens_set;
DROP FUNCTION version_tokens_show;
DROP FUNCTION version_tokens_edit;
DROP FUNCTION version_tokens_delete;
DROP FUNCTION version_tokens_lock_shared;
DROP FUNCTION version_tokens_lock_exclusive;
DROP FUNCTION version_tokens_unlock;

5.6.6.3使用版本标记

在使用版本标记之前,请按照 第5.6.6.2节“安装或卸载版本标记”中 提供的说明进行 安装

版本标记可能有用的方案是访问MySQL服务器集合但需要通过监视它们并根据负载变化调整服务器分配来管理它们以实现负载平衡的系统。 这样的系统包括以下组件:

  • 要管理的MySQL服务器的集合。

  • 管理或管理应用程序,与服务器通信并将它们组织到高可用性组中。 组服务于不同目的,每个组内的服务器可能具有不同的分配。 某个组内服务器的分配可以随时更改。

  • 访问服务器以检索和更新数据的客户端应用程序,根据分配给它们的目的选择服务器。 例如,客户端不应将更新发送到只读服务器。

版本标记允许根据分配管理服务器访问,而无需客户端反复查询服务器有关其分配的信息:

  • 管理应用程序执行服务器分配并在每个服务器上建立版本令牌以反映其分配。 应用程序缓存此信息以向其提供中央访问点。

    如果管理应用程序在某些时候需要更改服务器分配(例如,将其从允许写入更改为只读),则会更改服务器的版本令牌列表并更新其缓存。

  • 为了提高性能,客户端应用程序从管理应用程序获取缓存信息,使他们能够避免必须检索有关每个语句的服务器分配的信息。 根据它将发出的语句类型(例如,读取与写入),客户端选择适当的服务器并连接到它。

  • 此外,客户端向服务器发送其自己的客户端特定版本令牌,以注册其对服务器所需的分配。 对于客户端发送到服务器的每个语句,服务器将其自己的令牌列表与客户端令牌列表进行比较。 如果服务器令牌列表包含具有相同值的客户端令牌列表中存在的所有令牌,则匹配并且服务器执行该语句。

    另一方面,管理应用程序可能已更改服务器分配及其版本令牌列表。 在这种情况下,新的服务器分配现在可能与客户端要求不兼容。 服务器和客户端令牌列表之间出现令牌不匹配,服务器返回错误以回复该语句。 这表明客户端从管理应用程序缓存中刷新其版本令牌信息,并选择要与之通信的新服务器。

用于检测版本令牌错误和选择新服务器的客户端逻辑可以以不同方式实现:

  • 客户端可以处理所有版本令牌注册,不匹配检测和连接切换本身。

  • 这些操作的逻辑可以在管理客户端和MySQL服务器之间的连接的连接器中实现。 这样的连接器可能会处理不匹配错误检测和语句重发本身,或者它可能会将错误传递给应用程序并将其留给应用程序重新发送语句。

以下示例以更具体的形式说明了前面的讨论。

当版本标记在给定服务器上初始化时,服务器的版本标记列表为空。 令牌列表维护是通过调用用户定义的函数(UDF)来执行的。 VERSION_TOKEN_ADMIN SUPER 权限才能调用任何版本令牌的UDF,所以令牌列表修改预期由具有相应权限的管理或行政程序来完成。

假设管理应用程序与客户端查询的一组服务器进行通信,以访问员工和产品数据库( 分别 命名 emp prod 分配)。 允许所有服务器处理数据检索语句,但只允许其中一些服务器进行数据库更新。 为了在特定于数据库的基础上处理此问题,管理应用程序在每个服务器上建立版本令牌列表。 在给定服务器的令牌列表中,令牌名称表示数据库名称和令牌值是 read 或者 write 取决于数据库是否必须以只读方式使用或者是否可以进行读取和写入。

客户端应用程序通过设置系统变量来注册需要服务器匹配的版本令牌列表。 变量设置在特定于客户端的基础上进行,因此不同的客户端可以注册不同的要求。 默认情况下,客户端令牌列表为空,与任何服务器令牌列表匹配。 当客户端将其令牌列表设置为非空值时,匹配可能成功或失败,具体取决于服务器版本令牌列表。

要为服务器定义版本令牌列表,管理应用程序将调用 version_tokens_set() UDF。 (还有用于修改和显示令牌列表的UDF,稍后将对此进行描述。)例如,应用程序可能会将这些语句发送到三个服务器组:

服务器1:

MySQL的> SELECT version_tokens_set('emp=read;prod=read');
+ ------------------------------------------ +
| version_tokens_set('emp = read; prod = read')|
+ ------------------------------------------ +
| 2个版本的令牌集。|
+ ------------------------------------------ +

服务器2:

MySQL的> SELECT version_tokens_set('emp=write;prod=read');
+ ------------------------------------------- +
| version_tokens_set('emp = write; prod = read')|
+ ------------------------------------------- +
| 2个版本的令牌集。|
+ ------------------------------------------- +

服务器3:

MySQL的> SELECT version_tokens_set('emp=read;prod=write');
+ ------------------------------------------- +
| version_tokens_set('emp = read; prod = write')|
+ ------------------------------------------- +
| 2个版本的令牌集。|
+ ------------------------------------------- +

每种情况下的令牌列表都指定为以分号分隔的 列表 生成的令牌列表值会导致这些服务器分配: name=value

  • 任何服务器都接受任一数据库的读取

  • 只有服务器2接受 emp 数据库的 更新

  • 只有服务器3接受 prod 数据库的 更新

除了为每个服务器分配版本令牌列表外,管理应用程序还维护一个反映服务器分配的缓存。

在与服务器通信之前,客户端应用程序与管理应用程序联系并检索有关服务器分配的信息。 然后,客户端根据这些分配选择服务器。 假设客户端想要对 emp 数据库 执行读取和写入 操作。 根据前面的分配,只有服务器2符合条件。 客户端连接到服务器2并通过设置其 version_tokens_session 系统变量来 注册其服务器要求

MySQL的> SET @@SESSION.version_tokens_session = 'emp=write';

对于客户端发送到服务器2的后续语句,服务器将其自己的版本令牌列表与客户端列表进行比较以检查它们是否匹配。 如果是这样,语句正常执行:

MySQL的> UPDATE emp.employee SET salary = salary * 1.1 WHERE id = 4981;
查询正常,1行受影响(0.07秒)
匹配的行数:1已更改:1警告:0

MySQL的> SELECT last_name, first_name FROM emp.employee WHERE id = 4981;
+ ----------- ------------ + +
| last_name | first_name |
+ ----------- ------------ + +
| 史密斯| 安倍|
+ ----------- ------------ + +
1排(0.01秒)

服务器和客户端版本令牌列表之间的差异可以通过两种方式发生:

只要服务器2的分配没有改变,客户端就会继续使用它进行读写。 但是假设管理应用程序想要更改服务器分配,以便 emp 必须将数据库的 写入 发送到服务器1而不是服务器2.为此,它用于 version_tokens_edit() 修改 emp 两个服务器上的令牌值(并更新其服务器的缓存)分配):

服务器1:

MySQL的> SELECT version_tokens_edit('emp=write');
+ ---------------------------------- +
| version_tokens_edit('emp = write')|
+ ---------------------------------- +
| 1版本令牌已更新。|
+ ---------------------------------- +

服务器2:

MySQL的> SELECT version_tokens_edit('emp=read');
+ --------------------------------- +
| version_tokens_edit('emp = read')|
+ --------------------------------- +
| 1版本令牌已更新。|
+ --------------------------------- +

version_tokens_edit() 修改服务器令牌列表中的命名令牌,并保持其他令牌不变。

客户端下次向服务器2发送语句时,其自己的令牌列表不再与服务器令牌列表匹配,并发生错误:

MySQL的> UPDATE emp.employee SET salary = salary * 1.1 WHERE id = 4982;
ERROR 3136(42000):emp的版本令牌不匹配。正确读取值

在这种情况下,客户端应联系管理应用程序以获取有关服务器分配的更新信息,选择新服务器,并将失败的语句发送到新服务器。

注意

每个客户端必须通过仅根据它向给定服务器注册的令牌列表发送语句来与版本令牌合作。 例如,如果客户端注册了令牌列表 'emp=read' ,则版本令牌中没有任何内容可以阻止客户端为 emp 数据库 发送更新 客户本身必须避免这样做。

对于从客户端收到的每个语句,服务器隐式使用锁定,如下所示:

  • 为客户端令牌列表中指定的每个令牌(即,在 version_tokens_session 值中) 获取共享锁

  • 执行服务器和客户端令牌列表之间的比较

  • 根据比较结果执行语句或产生错误

  • 释放锁

服务器使用共享锁,以便可以在不阻塞的情况下进行多个会话的比较,同时防止在操作服务器令牌列表中的相同名称的令牌之前尝试获取排他锁的任何会话更改令牌。

上面的示例仅使用Version Tokens插件库中包含的一些用户定义,但还有其他一些。 一组UDF允许操作和检查服务器的版本令牌列表。 另一组UDF允许锁定和解锁版本令牌。

这些UDF允许创建,更改,删除和检查服务器的版本令牌列表:

  • version_tokens_set() 完全替换当前列表并分配新列表。 参数是以分号分隔的 列表 name=value

  • version_tokens_edit() 允许对当前列表进行部分修改。 它可以添加新标记或更改现有标记的值。 参数是以分号分隔的 列表 name=value

  • version_tokens_delete() 从当前列表中删除令牌。 参数是以分号分隔的标记名称列表。

  • version_tokens_show() 显示当前令牌列表。 它不需要争论。

如果成功,每个函数都返回一个二进制字符串,指示发生了什么操作。 以下示例建立服务器令牌列表,通过添加新令牌来修改它,删除一些令牌,并显示生成的令牌列表:

MySQL的> SELECT version_tokens_set('tok1=a;tok2=b');
+ ------------------------------- +
| version_tokens_set('tok1 = a; tok2 = b')|
+ ------------------------------- +
| 2个版本的令牌集。|
+ ------------------------------- +
MySQL的> SELECT version_tokens_edit('tok3=c');
+ ------------------------------- +
| version_tokens_edit('tok3 = c')|
+ ------------------------------- +
| 1版本令牌已更新。|
+ ------------------------------- +
MySQL的> SELECT version_tokens_delete('tok2;tok1');
+ ------------------------------------ +
| version_tokens_delete('tok2; tok1')|
+ ------------------------------------ +
| 删除了2个版本的令牌。|
+ ------------------------------------ +
MySQL的> SELECT version_tokens_show();
+ ----------------------- +
| version_tokens_show()|
+ ----------------------- +
| tok3 = C; |
+ ----------------------- +

如果令牌列表格式错误,则会出现警告:

MySQL的> SELECT version_tokens_set('tok1=a; =c');
+ ---------------------------------- +
| version_tokens_set('tok1 = a; = c')|
+ ---------------------------------- +
| 1个版本的令牌集。|
+ ---------------------------------- +
1排,1警告(0.00秒)

MySQL的> SHOW WARNINGS\G
*************************** 1。排******************** *******
  等级:警告
   代码:42000
消息:遇到无效的版本令牌对。提供的清单
         只是部分更新。
1排(0.00秒)

如前所述,版本令牌是使用以分号分隔的 列表定义的 考虑这个调用 name=value version_tokens_set()

MySQL的> SELECT version_tokens_set('tok1=b;;; tok2= a = b ; tok1 = 1\'2 3"4')
+ ------------------------------------------------- -------------- +
| version_tokens_set('tok1 = b ;;; tok2 = a = b; tok1 = 1 \'2 3“4')|
+ ------------------------------------------------- -------------- +
| 3个版本的令牌集。|
+ ------------------------------------------------- -------------- +

版本标记将参数解释如下:

  • 忽略名称和值周围的空格。 允许名称和值内的空格。 (对于 version_tokens_delete() ,它采用没有值的名称列表,忽略名称周围的空格。)

  • 没有引用机制。

  • 令牌顺序并不重要,除非令牌列表包含给定令牌名称的多个实例,最后一个值优先于先前的值。

根据这些规则,前面的 version_tokens_set() 调用会产生一个带有两个标记的标记列表: tok1 具有值 1'2 3"4 ,并 tok2 具有值 a = b 要验证这一点,请致电 version_tokens_show()

MySQL的> SELECT version_tokens_show();
+ -------------------------- +
| version_tokens_show()|
+ -------------------------- +
| tok2 = a = b; tok1 = 1'2 3“4; |
+ -------------------------- +

如果令牌列表包含两个令牌,为什么 version_tokens_set() 返回值 3 version tokens set 之所以发生这种情况是因为原始令牌列表包含两个定义 tok1 ,第二个定义替换了第一个定义。

Version Tokens令牌操作UDF将这些约束放在令牌名称和值上:

  • 令牌名称不能包含 = ; 字符,最大长度为64个字符。

  • 令牌值不能包含 ; 字符。 值的长度受 max_allowed_packet 系统变量 值的约束

  • 版本标记将标记名称和值视为二进制字符串,因此比较区分大小写。

版本标记还包括一组UDF,可以锁定和解锁令牌:

每个锁定函数返回非零表示成功。 否则,会发生错误:

MySQL的> SELECT version_tokens_lock_shared('lock1', 'lock2', 0);
+ ------------------------------------------------- +
| version_tokens_lock_shared('lock1','lock2',0)|
+ ------------------------------------------------- +
| 1 |
+ ------------------------------------------------- +

MySQL的> SELECT version_tokens_lock_shared(NULL, 0);
错误3131(42000):错误的锁定服务锁名称'(null)'。

使用版本代币锁定功能进行锁定是建议性的; 申请必须同意合作。

可以锁定不存在的令牌名称。 这不会创建令牌。

注意

版本标记锁定函数基于 第29.3.1节“锁定服务”中 描述 的锁定服务 ,因此对于共享锁和排它锁具有相同的语义。 (版本标记使用服务器内置的锁定服务例程,而不是锁定服务UDF接口,因此不需要安装那些UDF来使用版本标记。)版本标记获取的锁使用锁定服务命名空间 version_token_locks 可以使用性能模式监视锁定服务锁,因此对于版本标记锁也是如此。 有关详细信息,请参见 第29.3.1.2.3节“锁定服务监视”

对于版本标记锁定函数,标记名称参数完全按指定使用。 不会忽略周围的空格, = 并且 ; 允许使用字符。 这是因为Version Tokens只是将要锁定的令牌名称传递给锁定服务。

5.6.6.4版本标记参考

以下讨论作为对这些版本标记组件的引用:

版本标记功能

Version Tokens插件库包含多个用户定义的函数。 一组UDF允许操作和检查服务器的版本令牌列表。 另一组UDF允许锁定和解锁版本令牌。 VERSION_TOKEN_ADMIN SUPER 权限才能调用任何版本令牌UDF。

以下UDF允许创建,更改,删除和检查服务器的版本令牌列表。 解释 name_list token_list 参数(包括空格处理)的发生如 第5.6.6.3节“使用版本标记”中所述 ,其中提供了有关指定标记的语法的详细信息,以及其他示例。

  • version_tokens_delete(name_list)

    使用 name_list 参数 从服务器的版本标记列表中删除标记, 并返回指示操作结果的二进制字符串。 name_list 是一个以分号分隔的要删除的版本标记名称列表。

    MySQL的> SELECT version_tokens_delete('tok1;tok3');
    + ------------------------------------ +
    | version_tokens_delete('tok1; tok3')|
    + ------------------------------------ +
    | 删除了2个版本的令牌。|
    + ------------------------------------ +
    

    参数 NULL 被视为空字符串,对令牌列表没有影响。

    version_tokens_delete() 删除其参数中指定的标记(如果存在)。 (删除不存在的令牌不是错误。)要完全清除令牌列表而不知道列表中有哪些令牌,请传递 NULL 或不包含令牌的字符串 version_tokens_set()

    MySQL的> SELECT version_tokens_set(NULL);
    + ------------------------------ +
    | version_tokens_set(NULL)|
    + ------------------------------ +
    | 版本令牌列表已清除。|
    + ------------------------------ +
    MySQL的> SELECT version_tokens_set('');
    + ------------------------------ +
    | version_tokens_set('')|
    + ------------------------------ +
    | 版本令牌列表已清除。|
    + ------------------------------ +
    
  • version_tokens_edit(token_list)

    使用 token_list 参数 修改服务器的版本令牌列表, 并返回指示操作结果的二进制字符串。 token_list 是一个以分号分隔的 列表, 指定要定义的每个标记的名称及其值。 如果存在令牌,则使用给定值更新其值。 如果令牌不存在,则使用给定值创建令牌。 如果参数是 或不包含标记的字符串,则标记列表保持不变。 name=value NULL

    MySQL的> SELECT version_tokens_set('tok1=value1;tok2=value2');
    + ----------------------------------------------- +
    | version_tokens_set('tok1 = value1; tok2 = value2')|
    + ----------------------------------------------- +
    | 2个版本的令牌集。|
    + ----------------------------------------------- +
    MySQL的> SELECT version_tokens_edit('tok2=new_value2;tok3=new_value3');
    + ------------------------------------------------- ------- +
    | version_tokens_edit('tok2 = new_value2; tok3 = new_value3')|
    + ------------------------------------------------- ------- +
    | 2版本令牌已更新。|
    + ------------------------------------------------- ------- +
    
  • version_tokens_set(token_list)

    使用 token_list 参数中 定义的标记替换服务器的版本标记列表, 并返回指示操作结果的二进制字符串。 token_list 是一个以分号分隔的 列表, 指定要定义的每个标记的名称及其值。 如果参数是 或不包含标记的字符串,则清除标记列表。 name=value NULL

    MySQL的> SELECT version_tokens_set('tok1=value1;tok2=value2');
    + ----------------------------------------------- +
    | version_tokens_set('tok1 = value1; tok2 = value2')|
    + ----------------------------------------------- +
    | 2个版本的令牌集。|
    + ----------------------------------------------- +
    
  • version_tokens_show()

    将服务器的版本标记列表作为包含以分号分隔的 列表的二进制字符串返回 name=value

    MySQL的> SELECT version_tokens_show();
    + -------------------------- +
    | version_tokens_show()|
    + -------------------------- +
    | tok2 =值2; tok1 =值1; |
    + -------------------------- +
    

以下UDF允许锁定和解锁版本标记:

  • version_tokens_lock_exclusive(token_name[, token_name] ..., timeout)

    获取一个或多个版本令牌的排他锁,由名称指定为字符串,如果未在给定超时值内获取锁,则超时错误。

    MySQL的> SELECT version_tokens_lock_exclusive('lock1', 'lock2', 10);
    + ------------------------------------------------- ---- +
    | version_tokens_lock_exclusive('lock1','lock2',10)|
    + ------------------------------------------------- ---- +
    | 1 |
    + ------------------------------------------------- ---- +
    
  • version_tokens_lock_shared(token_name[, token_name] ..., timeout)

    获取一个或多个版本令牌上的共享锁,由名称指定为字符串,如果未在给定超时值内获取锁,则超时错误。

    MySQL的> SELECT version_tokens_lock_shared('lock1', 'lock2', 10);
    + ------------------------------------------------- -  +
    | version_tokens_lock_shared('lock1','lock2',10)|
    + ------------------------------------------------- -  +
    | 1 |
    + ------------------------------------------------- -  +
    
  • version_tokens_unlock()

    使用 version_tokens_lock_exclusive() 释放在当前会话中获取的所有锁 version_tokens_lock_shared()

    MySQL的> SELECT version_tokens_unlock();
    + ------------------------- +
    | version_tokens_unlock()|
    + ------------------------- +
    | 1 |
    + ------------------------- +
    

锁定功能具有以下特征:

  • 返回值非零表示成功。 否则,会发生错误。

  • 令牌名称是字符串。

  • 与操作服务器令牌列表的UDF的参数处理相反,不会忽略围绕令牌名称参数的空格, = 并且 ; 允许使用字符。

  • 可以锁定不存在的令牌名称。 这不会创建令牌。

  • 超时值是非负整数,表示在超时错误之前等待获取锁的时间(以秒为单位)。 如果超时为0,则没有等待,如果无法立即获取锁,则该函数会产生错误。

  • 版本标记锁定功能基于 第29.3.1节“锁定服务”中 描述 的锁定服务

版本标记系统变量

版本标记支持以下系统变量。 除非安装了Version Tokens插件,否则这些变量不可用(请参见 第5.6.6.2节“安装或卸载版本标记” )。

系统变量:

  • version_tokens_session

    属性
    命令行格式 --version-tokens-session=value
    系统变量 version_tokens_session
    范围 全球,会议
    动态
    SET_VAR 提示适用 没有
    类型
    默认值 NULL

    此变量的会话值指定客户端版本令牌列表,并指示客户端会话需要服务器版本令牌列表具有的令牌。

    如果 version_tokens_session 变量是 NULL (默认值)或具有空值,则任何服务器版本令牌列表都匹配。 (实际上,空值会禁用匹配要求。)

    如果 version_tokens_session 变量具有非空值,则其值与服务器版本标记列表之间的任何不匹配都会导致会话发送到服务器的任何语句出错。 在这些条件下发生不匹配:

    服务器版本令牌列表包含未在 version_tokens_session 值中 命名的令牌并不是不匹配

    假设管理应用程序已按如下方式设置服务器令牌列表:

    MySQL的> SELECT version_tokens_set('tok1=a;tok2=b;tok3=c');
    + -------------------------------------------- +
    | version_tokens_set('tok1 = a; tok2 = b; tok3 = c')|
    + -------------------------------------------- +
    | 3个版本的令牌集。|
    + -------------------------------------------- +
    

    客户端通过设置其 version_tokens_session 来注册需要服务器匹配的令牌 然后,对于客户端发送的每个后续语句,服务器会根据客户端 version_tokens_session 检查其令牌列表, 如果不匹配则会产生错误:

    mysql> SET @@SESSION.version_tokens_session = 'tok1=a;tok2=b';
    mysql>SELECT 1;
    + --- +
    | 1 |
    + --- +
    | 1 |
    + --- +
    
    mysql> SET @@SESSION.version_tokens_session = 'tok1=b';
    mysql>SELECT 1;
    ERROR 3136(42000):tok1的版本令牌不匹配。正确的价值a
    

    第一个 SELECT 成功,因为客户端令牌 tok1 并且 tok2 存在于服务器令牌列表中,并且每个令牌在服务器列表中具有相同的值。 第二个 SELECT 失败,因为尽管 tok1 存在于服务器令牌列表中,但它具有与客户端指定的值不同的值。

    此时,客户端发送的任何语句都会失败,除非服务器令牌列表发生更改,使其再次匹配。 假设管理应用程序更改服务器令牌列表,如下所示:

    MySQL的> SELECT version_tokens_edit('tok1=b');
    + ------------------------------- +
    | version_tokens_edit('tok1 = b')|
    + ------------------------------- +
    | 1版本令牌已更新。|
    + ------------------------------- +
    MySQL的> SELECT version_tokens_show();
    + ----------------------- +
    | version_tokens_show()|
    + ----------------------- +
    | tok3 = C; tok1 = B; tok2 = B; |
    + ----------------------- +
    

    现在,客户端 version_tokens_session 值与服务器令牌列表匹配,客户端可以再次成功执行语句:

    MySQL的> SELECT 1;
    + --- +
    | 1 |
    + --- +
    | 1 |
    + --- +
    
  • version_tokens_session_number

    属性
    命令行格式 --version-tokens-session-number=#
    系统变量 version_tokens_session_number
    范围 全球,会议
    动态 没有
    SET_VAR 提示适用 没有
    类型 整数
    默认值 0

    此变量供内部使用。

5.7 MySQL服务器用户定义的函数

MySQL Server支持创建用户定义的函数(UDF)并将其加载到服务器中以扩展服务器功能。 可以使用UDF全部或部分实现服务器功能。 此外,您可以编写自己的UDF。

以下部分描述如何安装和卸载UDF,以及如何在运行时确定安装了哪些UDF并获取有关它们的信息。 有关编写UDF的信息,请参见 第29.4节“向MySQL添加新函数”

5.7.1安装和卸载用户定义的功能

必须先将用户定义的函数(UDF)加载到服务器中,然后才能使用它们。 MySQL支持在运行时加载UDF。

要加载UDF,请使用该 CREATE FUNCTION 语句。 例如:

创造功能的metaphon
  返回STRING
  SONAME'udf_example.so';

UDF文件基名取决于您的平台。 对于Windows .so 常见的后缀适用 于Unix和类Unix系统 .dll

加载UDF时,可从Performance Schema user_defined_functions 表中 获取有关它的信息 请参见 第5.7.2节“获取用户定义的功能信息”

该语句还在 mysql.func 系统表中 注册UDF, 以使服务器在后续重新启动时加载它。 因此, CREATE FUNCTION 需要 数据库 INSERT 权限 mysql

要删除UDF,请使用该 DROP FUNCTION 语句。 例如:

DROP FUNCTION metaphon;

CREATE FUNCTION 卸载UDF并将其从 mysql.func 系统表中 删除 因此, DROP FUNCTION statement需要 数据库 DELETE 特权 mysql 由于UDF不再在表中注册,服务器不会自动加载UDF以便后续重新启动。

您无法用于 CREATE FUNCTION 重新安装以前安装的功能。 要重新安装某个功能,请先将其删除 DROP FUNCTION ,然后重新安装 CREATE FUNCTION 您需要执行此操作,例如,如果升级到提供该函数的更新实现的新版本的MySQL,或者您重新编译已编写的函数的新版本。 否则,服务器继续使用旧版本。

如果使用该 --skip-grant-tables 选项 启动服务器 ,则它不会查询该 mysql.func 表,也不会加载其中列出的UDF。

5.7.2获取用户自定义的功能信息

Performance Schema user_defined_functions 表包含有关当前加载的用户定义函数的信息:

SELECT * FROM performance_schema.user_defined_functions;

有关更多信息,请参见 第26.12.17.6节“user_defined_functions表”

5.8在一台机器上运行多个MySQL实例

在某些情况下,您可能希望在一台计算机上运行多个MySQL实例。 您可能希望测试新的MySQL版本,同时保持现有的生产设置不受干扰。 或者您可能希望让不同的用户访问 他们自己管理的 不同 mysqld 服务器。 (例如,您可能是一个希望为不同客户提供独立MySQL安装的Internet服务提供商。)

每个实例可以使用不同的MySQL服务器二进制文件,或者对多个实例使用相同的二进制文件,或者两种方法的任意组合。 例如,您可以从MySQL 5.7运行服务器,从MySQL 8.0运行服务器,以查看不同版本如何处理给定的工作负载。 或者,您可以运行当前生产版本的多个实例,每个实例管理一组不同的数据库。

无论您是否使用不同的服务器二进制文件,您运行的每个实例都必须配置多个操作参数的唯一值。 这消除了实例之间冲突的可能性。 可以在命令行,选项文件或设置环境变量中设置参数。 请参见 第4.2.2节“指定程序选项” 要查看给定实例使用的值,请连接到它并执行 SHOW VARIABLES 语句。

MySQL实例管理的主要资源是数据目录。 每个实例都应使用不同的数据目录,其位置使用该 选项 指定 有关使用自己的数据目录配置每个实例的方法,以及有关未执行此操作的危险的警告,请参见 第5.8.1节“设置多个数据目录” --datadir=dir_name

除了使用不同的数据目录之外,其他几个选项必须为每个服务器实例具有不同的值:

  • --port=port_num

    --port 控制TCP / IP连接的端口号。 或者,如果主机具有多个网络地址,则可以设置 bind_address 系统变量以使每个服务器侦听不同的地址。

  • --socket={file_name|pipe_name}

    --socket 控制Unix上的Unix套接字文件路径或Windows上的命名管道名称。 在Windows上,必须仅为配置为允许命名管道连接的那些服务器指定不同的管道名称。

  • --shared-memory-base-name=name

    此选项仅在Windows上使用。 它指定Windows服务器使用的共享内存名称,以允许客户端使用共享内存进行连接。 必须仅为配置为允许共享内存连接的服务器指定不同的共享内存名称。

  • --pid-file=file_name

    此选项指示服务器在其中写入其进程ID的文件的路径名。

如果使用以下日志文​​件选项,则每个服务器的值必须不同:

有关日志文件选项的进一步讨论,请参见 第5.4节“MySQL服务器日志”

要获得更好的性能,可以为每个服务器指定不同的以下选项,以在多个物理磁盘之间分配负载:

拥有不同的临时目录还可以更容易地确定哪个MySQL服务器创建了任何给定的临时文件。

如果在不同位置安装了多个MySQL,则可以使用该 选项 为每个安装指定基本目录 这会导致每个实例自动使用不同的数据目录,日志文件和PID文件,因为每个参数的默认值都相对于基本目录。 在这种情况下,您需要指定的唯一其他选项是 选项。 假设您使用 文件二进制分发 安装不同版本的MySQL 它们安装在不同的位置,因此您可以使用命令 bin / mysqld_safe 在其相应的基目录下 为每个安装启动服务器 mysqld_safe的 --basedir=dir_name --socket --port tar 确定 --basedir 传递给 mysqld 的正确 选项 ,并且只需要指定 mysqld_safe --socket --port 选项

如以下各节所述,可以通过指定适当的命令选项或设置环境变量来启动其他服务器。 但是,如果需要更长期地运行多个服务器,则使用选项文件为每个服务器指定必须唯一的选项值会更方便。 --defaults-file 选项对此有用。

5.8.1设置多个数据目录

计算机上的每个MySQL实例都应该有自己的数据目录。 使用 选项 指定位置 --datadir=dir_name

为新实例设置数据目录有不同的方法:

  • 创建一个新的数据目录。

  • 复制现有数据目录。

以下讨论提供了有关每种方法的更多细节。

警告

通常,您不应该有两台服务器更新同一数据库中的数据。 如果您的操作系统不支持无故障系统锁定,这可能会导致令人不快的意外。 如果(尽管出现此警告)您使用相同的数据目录运行多个服务器并且已启用日志记录,则必须使用相应的选项指定每个服务器唯一的日志文件名。 否则,服务器会尝试登录到相同的文件。

即使遵守上述预防措施,这种设置仅适用于 MyISAM MERGE 表,而不适用于任何其他存储引擎。 此外,在服务器之间共享数据目录的警告始终适用于NFS环境。 允许多个MySQL服务器通过NFS访问公共数据目录是一个 非常糟糕的主意 主要问题是NFS是速度瓶颈。 它不适用于此类用途。 NFS的另一个风险是您必须设计一种方法来确保两台或多台服务器不会相互干扰。 通常NFS文件锁定由。处理 lockd 守护进程,但目前没有平台可以在任何情况下100%可靠地执行锁定。

创建一个新的数据目录

使用此方法,数据目录将处于与首次安装MySQL时相同的状态。 它将具有默认的MySQL帐户集,并且没有用户数据。

在Unix上,初始化数据目录。 请参见 第2.10节“安装后设置和测试”

在Windows上,数据目录包含在MySQL发行版中:

  • Windows的MySQL Zip归档文件包含一个未修改的数据目录。 您可以将此类分发包解压缩到临时位置,然后将其复制 data 到您正在设置新实例的位置。

  • Windows MSI软件包安装程序创建并设置已安装服务器将使用的数据目录,但还会创建一个 在安装目录下 命名 的原始 模板 数据 data 目录。 使用MSI包执行安装后,可以复制模板数据目录以设置其他MySQL实例。

复制现有数据目录

使用此方法,数据目录中存在的任何MySQL帐户或用户数据都将转移到新数据目录。

  1. 使用数据目录停止现有的MySQL实例。 这必须是干净关闭,以便实例将任何挂起的更改刷新到磁盘。

  2. 将数据目录复制到新数据目录所在的位置。

  3. 复制 现有实例使用 my.cnf my.ini 选项文件。 这是新实例的基础。

  4. 修改新选项文件,以便引用原始数据目录的任何路径名引用新数据目录。 此外,修改每个实例必须唯一的任何其他选项,例如TCP / IP端口号和日志文件。 有关每个实例必须唯一的参数列表,请参见 第5.8节“在一台计算机上运行多个MySQL实例”

  5. 启动新实例,告诉它使用新选项文件。

5.8.2在Windows上运行多个MySQL实例

您可以在Windows上运行多个服务器,方法是从命令行手动启动它们,每个服务器都有适当的操作参数,或者将多个服务器作为Windows服务安装并以这种方式运行。 有关从命令行或作为服务运行MySQL的一般说明,请参见 第2.3节“在Microsoft Windows上安装MySQL” 以下各节介绍如何为每个服务器必须唯一的选项(例如数据目录)启动具有不同值的每个服务器。 第5.8节“在一台机器上运行多个MySQL实例” 中列出了这些选项

5.8.2.1在Windows命令行启动多个MySQL实例

第2.3.5.6节“从Windows命令行启动MySQL”中 介绍了从命令行手动启动单个MySQL服务器的过程 要以这种方式启动多个服务器,可以在命令行或选项文件中指定相应的选项。 将选项放在选项文件中更方便,但有必要确保每个服务器都有自己的选项集。 为此,请为每个服务器创建一个选项文件,并 --defaults-file 在运行时 通过 选项 告诉服务器文件名

假设您要 在端口3307上 运行 mysqld的 一个实例, 其数据目录为 C:\mydata1 ,而另一个实例在端口3308上运行,数据目录为 C:\mydata2 使用此程序:

  1. 确保每个数据目录都存在,包括其自己的 mysql 包含授权表 数据库 副本

  2. 创建两个选项文件。 例如,创建一个名为的文件 C:\my-opts1.cnf ,如下所示:

    的[mysqld]
    datadir = C:/ mydata1
    port = 3307
    

    创建一个名为的第二个文件 C:\my-opts2.cnf ,如下所示:

    的[mysqld]
    datadir = C:/ mydata2
    port = 3308
    
  3. 使用该 --defaults-file 选项可以使用自己的选项文件启动每个服务器:

    C:\> C:\mysql\bin\mysqld --defaults-file=C:\my-opts1.cnf
    C:\>C:\mysql\bin\mysqld --defaults-file=C:\my-opts2.cnf
    

    每个服务器都在前台启动(在服务器退出之前不会出现新提示),因此您需要在单独的控制台窗口中发出这两个命令。

要关闭服务器,请使用相应的端口号连接到每个服务器:

C:\> C:\mysql\bin\mysqladmin --port=3307 --host=127.0.0.1 --user=root --password shutdown
C:\>C:\mysql\bin\mysqladmin --port=3308 --host=127.0.0.1 --user=root --password shutdown

如上所述配置的服务器允许客户端通过TCP / IP进行连接。 如果您的Windows版本支持命名管道,并且您还希望允许命名管道连接,请指定启用命名管道并指定其名称的选项。 每个支持命名管道连接的服务器都必须使用唯一的管道名称。 例如, C:\my-opts1.cnf 文件可能写成如下:

的[mysqld]
datadir = C:/ mydata1
port = 3307
启用命名管道
socket = mypipe1

C:\my-opts2.cnf 类似地 修改 以供第二服务器使用。 然后如前所述启动服务器。

类似的过程适用于您希望允许共享内存连接的服务器。 使用该 --shared-memory 选项 启用此类连接, 使用该 选项为每个服务器指定唯一的共享内存名称 --shared-memory-base-name

5.8.2.2启动多个MySQL实例作为Windows服务

在Windows上,MySQL服务器可以作为Windows服务运行。 第2.3.5.8节“将MySQL作为Windows服务启动” 中介绍了安装,控制和删除单个MySQL服务的过程

要设置多个MySQL服务,除了每个实例必须唯一的其他参数之外,还必须确保每个实例使用不同的服务名称。

对于以下说明,假设您要分别 从安装在 和的 两个不同版本的MySQL 运行 mysqld 服务器 (如果您将5.5.9作为生产服务器运行,但也希望使用8.0.18进行测试,则可能出现这种情况。) C:\mysql-5.5.9 C:\mysql-8.0.18

要将MySQL安装为Windows服务,请使用 --install --install-manual 选项。 有关这些选项的信息,请参见 第2.3.5.8节“将MySQL作为Windows服务启动”

根据上述信息,您可以通过多种方式设置多个服务。 以下说明描述了一些示例。 在尝试其中任何一个之前,请关闭并删除任何现有的MySQL服务。

  • 方法1: 在其中一个标准选项文件中指定所有服务的选项。 为此,请为每个服务器使用不同的服务名称。 假设你要运行5.5.9 的mysqld 使用的服务名称 mysqld1 和8.0.18 的mysqld 使用的服务名称 mysqld2 在这种情况下,您可以使用 [mysqld1] 组5.5.9和 [mysqld2] 组8.0.18。 例如,您可以这样设置 C:\my.cnf

    #mysqld1服务的选项
    [mysqld1]
    basedir = C:/mysql-5.5.9
    port = 3307
    启用命名管道
    socket = mypipe1
    
    #mysqld2服务的选项
    [mysqld2]
    basedir = C:/mysql-8.0.18
    port = 3308
    启用命名管道
    socket = mypipe2
    

    使用完整服务器路径名安装以下服务,以确保Windows为每个服务注册正确的可执行程序:

    C:\> C:\mysql-5.5.9\bin\mysqld --install mysqld1
    C:\>C:\mysql-8.0.18\bin\mysqld --install mysqld2
    

    要启动服务,请使用服务管理器或 NET START SC START 以及相应的服务名称:

    C:\> SC START mysqld1
    C:\>SC START mysqld2
    

    要停止服务,请使用服务管理器,或使用 具有相应服务名称的 NET STOP SC STOP

    C:\> SC STOP mysqld1
    C:\>SC STOP mysqld2
    
  • 方法2: 在单独的文件中指定每个服务器的选项,并 --defaults-file 在安装服务时 使用 ,以告知每个服务器要使用的文件。 在这种情况下,每个文件都应使用 [mysqld] 列出选项

    使用这种方法,要为5.5.9 mysqld 指定选项 ,请创建一个如下所示的文件 C:\my-opts1.cnf

    的[mysqld]
    basedir = C:/mysql-5.5.9
    port = 3307
    启用命名管道
    socket = mypipe1
    

    对于8.0.18 mysqld ,创建一个如下所示的文件 C:\my-opts2.cnf

    的[mysqld]
    basedir = C:/mysql-8.0.18
    port = 3308
    启用命名管道
    socket = mypipe2
    

    按如下方式安装服务(在一行中输入每个命令):

    C:\> 
    C:\>C:\mysql-5.5.9\bin\mysqld --install mysqld1
               --defaults-file=C:\my-opts1.cnfC:\mysql-8.0.18\bin\mysqld --install mysqld2
               --defaults-file=C:\my-opts2.cnf
    

    将MySQL服务器作为服务安装并使用 --defaults-file 选项时,服务名称必须位于该选项之前。

    安装服务后,以与上一示例相同的方式启动和停止它们。

要删除多个服务,请 为每个 服务使用 SC DELETE mysqld_service_name 或者, 对每个 使用 mysqld --remove ,在该 --remove 选项 后面指定服务名称 如果服务名称是默认值( MySQL ),则可以在使用 mysqld --remove 时省略它

5.8.3在Unix上运行多个MySQL实例

注意

这里的讨论使用 mysqld_safe 来启动MySQL的多个实例。 对于使用RPM分发的MySQL安装,服务器启动和关闭由systemd在几个Linux平台上管理。 在这些平台上, 没有安装 mysqld_safe, 因为它是不必要的。 有关使用systemd处理多个MySQL实例的信息,请参见 第2.5.9节“使用systemd管理MySQL服务器”

一种方法是在Unix上运行多个MySQL实例,用不同的默认TCP / IP端口和Unix套接字文件编译不同的服务器,这样每个服务器都可以监听不同的网络接口。 在每个安装的不同基目录中进行编译也会自动生成每个服务器的单独的已编译数据目录,日志文件和PID文件位置。

假设为默认的TCP / IP端口号(3306)和Unix套接字文件( /tmp/mysql.sock 配置了现有的5.7服务器 要将新的8.0.18服务器配置为具有不同的操作参数,请使用以下 类似 CMake 命令:

外壳> cmake . -DMYSQL_TCP_PORT=port_number \
             -DMYSQL_UNIX_ADDR=file_name \
             -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.18

这里, port_number 并且 file_name 必须与默认的TCP / IP端口号和Unix套接字文件路径名不同,并且该 CMAKE_INSTALL_PREFIX 值应指定与现有MySQL安装所在的安装目录不同的安装目录。

如果您有MySQL服务器侦听给定的端口号,您可以使用以下命令找出它用于几个重要的可配置变量的操作参数,包括基本目录和Unix套接字文件名:

外壳> mysqladmin --host=host_name --port=port_number variables

使用该命令显示的信息,您可以确定 在配置其他服务器时 使用 哪些选项值

如果指定 localhost 为主机名,则 mysqladmin 默认使用Unix套接字文件连接而不是TCP / IP。 要显式指定连接协议,请使用该 --protocol={TCP|SOCKET|PIPE|MEMORY} 选项。

您不需要编译新的MySQL服务器只是为了从不同的Unix套接字文件和TCP / IP端口号开始。 也可以使用相同的服务器二进制文件,并在运行时使用不同的参数值开始每次调用它。 一种方法是使用命令行选项:

外壳> mysqld_safe --socket=file_name --port=port_number

要启动第二个服务器,请提供不同的 --socket --port 选项值,并将 选项 传递 mysqld_safe, 以便服务器使用不同的数据目录。 --datadir=dir_name

或者,将每个服务器的选项放在不同的选项文件中,然后使用 --defaults-file 指定相应选项文件路径 选项 启动每个服务器 例如,如果两个服务器实例的选项文件被命名为 /usr/local/mysql/my.cnf /usr/local/mysql/my.cnf2 ,像这样开头的服务器:命令:

shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf
shell>mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2

实现类似效果的另一种方法是使用环境变量来设置Unix套接字文件名和TCP / IP端口号:

shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell> MYSQL_TCP_PORT=3307
shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> bin/mysqld --initialize --user=mysql
shell>mysqld_safe --datadir=/path/to/datadir &

这是启动第二台服务器用于测试的快速方法。 这个方法的好处是环境变量设置适用于从同一个shell调用的任何客户端程序。 因此,这些客户端的连接会自动定向到第二个服务器。

第4.9节“MySQL程序环境变量” 包括可用于影响MySQL程序的其他环境变量的列表。

在Unix上, mysqld_multi 脚本提供了另一种启动多个服务器的方法。 请参见 第4.3.4节“ mysqld_multi - 管理多个MySQL服务器”

5.8.4在多服务器环境中使用客户端程序

要将客户端程序连接到侦听与编译到客户端的网络接口不同的网络接口的MySQL服务器,可以使用以下方法之一:

  • 启动客户端 以使用TCP / IP连接到远程服务器, 使用TCP / IP连接到本地服务器,或 使用Unix套接字文件或Windows命名管道连接到本地服务器。 --host=host_name --port=port_number --host=127.0.0.1 --port=port_number --host=localhost --socket=file_name

  • 启动客户端 --protocol=TCP 以使用TCP / IP --protocol=SOCKET 进行连接,使用Unix套接字文件 --protocol=PIPE 进行连接,使用命名管道 --protocol=MEMORY 进行连接 ,或 使用共享内存进行连接。 对于TCP / IP连接,您可能还需要指定 --host --port 选项。 对于其他类型的连接,您可能需要指定 --socket 用于指定Unix套接字文件或Windows命名管道名称的 --shared-memory-base-name 选项 ,或 指定用于指定共享内存名称 选项。 仅在Windows上支持共享内存连接。

  • 在Unix上,设置 MYSQL_UNIX_PORT MYSQL_TCP_PORT 环境变量启动您的客户端之前指向Unix套接字文件和TCP / IP端口号。 如果您通常使用特定的套接字文件或端口号,则可以放置命令在 .login 文件中 设置这些环境变量, 以便每次登录时都应用它们。请参见 第4.9节“MySQL程序环境变量”

  • [client] 选项文件 组中 指定默认的Unix套接字文件和TCP / IP端口号 例如,您可以 C:\my.cnf 在Windows上 使用 ,或 .my.cnf 在Unix上的主目录中 使用 文件。 请参见 第4.2.2.2节“使用选项文件”

  • 在C程序中,您可以在 mysql_real_connect() 调用中 指定套接字文件或端口号参数 您也可以通过调用程序读取选项文件 mysql_options() 请参见 第28.7.7节“C API函数描述”

  • 如果您使用的是Perl DBD::mysql 模块,则可以从MySQL选项文件中读取选项。 例如:

    $ dsn =“DBI:mysql:test; mysql_read_default_group = client;”“MYSQL_READ_DEFAULT_FILE =的/ usr /本地/ MySQL的/数据/ my.cnf中”;
    $ dbh = DBI-> connect($ dsn,$ user,$ password);
    

    请参见 第28.9节“MySQL Perl API”

    其他编程接口可以提供用于读取选项文件的类似功能。

原文