附录C MySQL常用配置变量和状态变量详解 - xiaoboluo768/qianjinliangfang GitHub Wiki

附录C MySQL常用配置变量和状态变量详解

  • 本文档主要基于mysql 5.6.35和5.7.17版本编写,但在编写后期也加入了一些新版本特性相关的额参数:例如,MySQL 5.7.22以及8.0.x版本中的并行复制优化参数
  • 以下配置参数在整理的过程中,融合了5.6.35版本和5.7.17版本(即,同一个参数,多个版本之间如果有差异的,则整合到了一起)

1、MySQL关键配置参数

1.1. 基本设置

1.1.1. transaction_isolation
1.1.2. max_allowed_packet
1.1.3. max_length_for_sort_data
1.1.4. optimizer_switch
1.1.5. memlock
1.1.6. default_password_lifetime=0
1.1.7. old_passwords=0
1.1.8. group_concat_max_len=1024
  • 用于控制group_concat()函数能够连接的最大结果集字节长度
    • 全局,会话,动态变量,整型值,默认值为1024字节,64位平台取值范围为:4~18446744073709551615字节
1.1.9. default_storage_engine=innodb
1.1.10. default_tmp_storage_engine=innodb
  • 设置使用create temporary语句显式创建的临时表设置默认存储引擎。
    • 全局,会话,动态变量,枚举类型,默认值为innodb,有效值:使用 SHOW ENGINES语句或查询INFORMATION_SCHEMA ENGINES表的结果集,该变量在5.6.3版本中引入
1.1.11. internal_tmp_disk_storage_engine=innodb
  • 设置内部临时表使用的默认存储引擎,如:Using filesort,Using temporary等需要使用到磁盘临时表的场景时,内部创建的内部临时表的默认存储引擎。
    • 全局变量,会话变量,枚举类型,有效值为MYISAM和INNODB,5.7.5引入,默认值在5.7.5中为myisam,在5.7.6及其之后的版本中为innodb。
    • 注意:在internal_tmp_disk_storage_engine = INNODB下,如果内部临时表生成超过InnoDB行或列限制的查询结果集将返回Row size too large 或 Too many columns errors。 此时解决方法是将internal_tmp_disk_storage_engine设置为MYISAM。
1.1.12. explicit_defaults_for_timestamp=ON
1.1.13. unique_checks=ON
  • 控制是否检查唯一约束的开关
    • 全局,会话,动态变量,布尔型,默认值为1。如果设置为1,则存储引擎会对辅助索引执行唯一约束检查,发现重复值会报错拒绝插入,但是,如果设置为0,则存储引擎不会对辅助索引执行唯一约束检查,但仍然会在存储引擎层检查,如果发现重复值,仍然会报错拒绝插入,但设置为0时可能对大表插入有加速作用
1.1.14. time_zone=SYSTEM
  • 用于指定客户端当前时区,在客户端连接初始化时,对客户端使用这个变量设置的时区,默认值为SYSTEM,代表使用system_time_zone系统变量设置的时区值。也可以使用--default-time-zone启动选项在服务器启动时显式指定该值。
    • 全局,会话,动态变量,string类型,默认值为SYSTEM,代表使用system_time_zone系统变量设置的时区值。
1.1.15. sync_frm=ON
  • 控制是否在创建非临时表时,同时把.frm文件落盘,这可能比较慢,但是在意外崩溃时更安全
    • 全局变量,动态变量,布尔值,默认值为true。
    • 该变量从5.7.6开始不建议使用,在8.0版本中已经废弃,默认内部开启,因为关闭这个参数被认为不安全
1.1.16. super_read_only=OFF
  • 控制是否开启super权限帐号只读。如果启用了read_only系统变量,则服务器仅允许具有SUPER权限的用户进行更新。 如果还同时启用了super_read_only系统变量,则服务器同时禁止具有SUPER的用户更新。在主库上对super_read_only的更改不会复制到从库上。主备各自设置该变量不会相互影响。
    • 全局变量,动态变量,布尔型,默认值为OFF,5.7.8版本引入,要注意:该变量设置为ON时,会同时强制把read_only变量也设置为ON,当read_only变量设置为OFF时,也会同时强制把该变量设置为OFF
1.1.17. sql_safe_updates=OFF
1.1.18. datadir=/data/mysql/data/
  • 设置数据文件存放路径。如果log_bin、relay_log、error_log、general_log、slow_query_log、innodb_log_group_home_dir、innodb_data_home_dir等路径参数没有设置路径值时,默认会把这些参数对应的磁盘文件存放在datadir目录下
    • 全局变量,只读变量,directory name类型,无默认值,但如果是二进制包安装,在mysql.server文件中的默认datadir=/usr/local/mysql/data,如果是编译安装或者rpm包安装,在mysql.server文件中的默认datadir=/var/lib/mysql。且rpm包的mysql.server中在启动时还会判断datadir是否存在,如果不存在还会创建一个datadir并进行mysqld的初始化操作,所以你会发现rpm包安装的mysql只需要rpm安装一下,然后直接service mysqld start就可以使用了。
1.1.19. collation_server=utf8_bin
  • 设置server的默认校对规则(排序规则),该变量的值会被collation_database参数继承。如果创建表时没有单独设置校对规则,那么表也会继承,如果定义字段时没有单独指定校对规则,则字段也会继承。
    • 全局,会话,动态变量,string类型,默认值为latin1_swedish_ci,有效值:通过select * from information_schema.collations;语句查询的结果集的COLLATION_NAME字段,其中IS_DEFAULT字段标识了是否是对应的CHARACTER_SET_NAME列列出的字符集的默认校对规则。
    • 注意:5.7.x的版本不再支持collation启动选项,使用collation_server在配置文件中代替该启动选项。另外,如果character_set_server使用了非默认的字符集,则不指定校对规则时,会使用对应字符集的默认校对规则。
1.1.20. character_set_server=utf8
  • 设置server的默认字符集,该变量的值会被character_set_client、character_set_connection、character_set_database、character_set_results、character_set_system参数继承。如果创建表时没有单独设置字符集,那么表也会继承,如果定义字段时没有单独指定字符集,则字段也会继承
    • 全局,会话,动态变量,string类型,默认值为latin1,有效值:通过select * from information_schema.collations;语句查询结果集的CHARACTER_SET_NAME字段
1.1.21. basedir=/usr/local/mysql
  • 指定mysql的程序安装路径,其中mysql相关的所有脚本中调用mysql的程序都默认使用该路径。
    • 全局变量,只读变量,directory name类型,默认值通常为:/usr/local/mysql
1.1.22. autocommit=1
  • 控制是否开启自动提交模式。 如果设置为1,对表的所有更改将立即提交。 如果设置为0,则必须显式使用COMMIT提交事务或ROLLBACK回滚事务。 如果autocommit在session级别从0更改为1时(无论是在事务内还是在事务外,只要该值从0变为1,就会隐式提交当前会话中的所有事务),MySQL将对会话级别活跃的事务隐式执行COMMIT操作,默认情况下,客户端连接server是自动提交的。要使客户端以默认值0开始,请使用--autocommit = 0选项启动server来禁止全局自动提交值。 或者在启动server前在my.cnf中的[mysqld]标签下添加autocommit=0配置参数。
    • 全局,会话,动态参数,布尔型,默认值为ON
1.1.23. auto_increment_increment=2
1.1.24. auto_increment_offset=2
  • 设置自增的偏移量(起始值),常常与auto_increment_increment变量一起用于在主主复制环境中避开双写时的主键冲突。
    • 全局,会话,动态变量,整型值,取值范围1~65535,如果设置该变量值为小于等于0时,默认使用1代替,如果设置为大于65535的值时,使用65535代替
    • 注意:auto_increment_offset的值不能大于步长auto_increment_increment的值,如果设置大于auto_increment_increment的值,则在实际影响自增插入值时会被自动忽略auto_increment_offset的设置,而使用默认值1
1.1.25. sql_mode=''
1.1.26. read_only=OFF
1.1.27. pid_file=/data/mysql/data/localhost.localdomain.pid
  • 指定mysql 进程id存放文件的路径和名称,默认情况下不指定时在datadir下生成一个hostname.pid
    • 全局变量,只读变量,file name类型
1.1.28. port=3306
  • 用于指定TCP/IP连接监听的端口号,在unix或类unix系统中,非root用户启动mysqld时只能指定大于1024的端口号(但可以使用0值),使用root用户启动mysqld才能使用1024以下的端口号
    • 全局变量,只读变量,整型值,默认值为3306,取值范围:0~65535
    • 注意:设置为0时,mysqld是直接使用默认的3306端口代替,另外,对于mysql客户端使用-P参数时,如果是走的socket连接(不加-h参数时默认使用socket方式),则mysql客户端会直接忽略-P参数,因为端口是用于TCP/IP方式连接时使用
1.1.29. max_user_connections=0
1.1.30. max_sort_length=1024
  • 在进行排序操作时,GROUP BY, ORDER BY, 和 DISTINCT操作都仅仅使用字符串 max_sort_length这个字节长度的前缀 进行比较,而忽略剩下的字节长度部分,当增加这个值时,还需要相应的增加sort_buffer_size参数
    • 全局,会话,动态参数 ,整型值,取值范围4~8388608字节(8M),默认为1024字节
1.1.31. lower_case_table_names=ON
1.1.32. foreign_key_checks=ON
1.1.33. local_infile=ON
  • 设置是否允许使用LOAD DATA INFILE语句的LOCAL方式(即LOAD DATA LOCAL INFILE)。 如果该变量被禁用,客户端不能在LOAD DATA语句中使用LOCAL。 虽然此变量的默认值为true,但是LOAD DATA INFILE LOCAL是否实际允许取决于MySQL的编译方式(编译时是否编译支持了local_infile),以及客户端上连接时是否使用了--local-infile选项
    • 全局变量,动态变量,布尔型,默认值为true
1.1.34. disabled_storage_engines=''
1.1.35. skip_show_database=OFF
  • 如果没有SHOW DATABASES权限,则可以防止用户使用SHOW DATABASES语句。 如果您担心用户能够看到不属于用户自己的数据库,那么这个选项默认值可以提高安全性。 如果变量值为ON,SHOW DATABASES语句仅允许具有SHOW DATABASES权限的用户,但该语句会显示所有数据库名称(包括不具有访问权限的数据库名称)。 如果值为OFF,则允许所有用户使用SHOW DATABASES,且仅显示用户具有SHOW DATABASES及其具有访问权限的数据库的名称。
    • 全局变量,只读变量,布尔型,默认值为OFF
1.1.36. skip_grant_tables
1.1.37. system_time_zone=CST
  • 设置mysql server的时区。当服务器启动时,从操作系统继承时区。也可以使用mysqld_safe脚本的--timezone启动选项指定。注意:system_time_zone变量与time_zone变量不同。 虽然它们可能具有相同的值,但是后者用于初始化每个客户端连接的时区。
    • 全局变量,只读变量,string类型,默认值为从操作系统中继承(操作系统的时区可以使用date命令查看)
1.1.38. secure_file_priv=null
1.1.39. log_timestamps=SYSTEM
  • 此变量控制错误日志信息的时间戳与时区,以及查询日志和慢查询日志写入文件时的时间戳与时区,但不会影响查询日志和慢查询日志写入表中时的时间戳与时区(mysql.general_log,mysql.slow_log)。 从这些表中检索的行中的时间信息可以通过CONVERT_TZ()函数或通过设置会话time_zone系统变量来转换为本地系统时间戳与时区,允许设置的值有UTC(默认值)和SYSTEM(本地系统时区),时间戳是使用ISO 8601 / RFC 3339格式编写的:YYYY-MM-DDThh:mm:ss.uuuuuuu zone
    • 全局变量,动态变量,枚举类型,有效值为UTC、SYSTEM,默认值为UTC,5.7.2版本引入,在5.7.2之前时间戳使用的是本地系统时间,而不是UTC
1.1.40. max_execution_time=0
1.1.41. slave_exec_mode=STRICT
1.1.42. offline_mode=OFF
1.1.43. show_compatibility_56=OFF
1.1.44. tx_read_only=OFF
1.1.45. sql_slave_skip_counter=0
1.1.46. old_alter_table=0
  • 控制是否使用旧的方式执行DDL语句
    • 设置为1时:表示启用此变量,server处理ALTER TABLE操作时不使用优化(online ddl),server使用老的方式:先创建一个临时表,逐行copy数据到临时表,然后将临时表重命名为原始表,然后再删除旧表。在MySQL 5.0及更早版本中使用(注:5.1的innodb插件和5.5中除了创建和删除索引可以使用Fast Index Creation特性之外,其他类型的DDL操作都需要使用copy方式,5.6及其后续的版本中也有少数DDL操作需要使用copy方式)
    • 全局,会话,动态变量,布尔型,,默认值为OFF
1.1.47. max_prepared_stmt_count=16382
  • 此变量限制服务器中prepared语句的总数,可用于预防潜在的大量prepared 语句消耗大量内存导致mysqld OOM的DDOS攻击, 如果该值设置为低于当前server中的prepared语句数量,则现有语句执行不受影响,但在当前prepared语句数量大于了该参数的限制值,则就不能再执行prepare语句,直到当前的prepare语句降低到该变量值之下才可以继续执行prepare语句
    • 全局变量,动态变量,整型值,默认值为16,382,取值范围为0~1048576,将值设置为0时将禁用prepare语句
    • PS:这里说的prepare语句不是两阶段提交中的prepare,这里说的prepare语句实际上就是一个预编译语句,先把SQL语句进行编译,且可以设定参数占位符(例如:?符号),然后调用时通过用户变量传入具体的参数值,如果一个语句需要多次执行而仅仅只是where条件不同,那么使用prepare语句可以大大减少硬解析的开销,prepare语句有三个步骤,预编译prepare语句,执行prepare语句,释放销毁prepare语句,prepare语句。详见链接:https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
1.1.48. key_buffer_size=8M
1.1.49. plugin_load='xx.so'
1.1.50. metadata_locks_hash_instances=64
  • 设置元数据锁集合分成多少个不同的散列表,以便允许高并发场景下不同连接访问不同对象的时使用不同的锁散列,以减少争用。
    • 在MySQL 5.7.4中,改变了元数据锁的实现机制,使得这个变量不再需要,该变量被弃用,在未来的MySQL版本中将被删除
    • 全局变量,只读变量,整型值,默认值为8,取值范围为:1~1024
1.1.51. slave_max_allowed_packet=1G
1.1.52. default_authentication_plugin=mysql_native_password
1.1.53. tmpdir=/home/mysql/data/mysqldata1/tmpdir

1.2. 连接设置

1.2.1. interactive_timeout = 1800
  • 指的是mysql在关闭一个交互的连接之前所要等待的秒数(交互连接如mysql gui tool中的连接)
    • 全局,会话变量,动态变量,默认值为28800(8个小时),整型值
1.2.2. wait_timeout = 1800
  • 指的是MySQL在关闭一个非交互的连接之前所要等待的秒数
    • 全局,会话变量,动态变量,默认值为28800(8个小时),整型值。
1.2.3. lock_wait_timeout = 1800
1.2.4. skip_name_resolve = 1
  • 设置是否跳过域名解析,只使用IP和localhost作为主机地址
    • 如果为OFF,则mysqld在检查客户端连接时会使用DNS解析主机名(会优先使用/etc/hosts中的记录进行解析,如果不存在对应的记录,就会走DNS查找,如果DNS查找失败)。 如果为ON,则mysqld只使用IP解析客户端。 在这种情况下,授权表中的所有主机列值必须为IP地址或localhost
    • 全局变量,只读变量,布尔型,默认值为OFF
1.2.5. max_connections = 512
  • 此参数控制允许连接到mysql的最大数量,默认是151,如果状态变量connect_errors_max_connections不为零,并且一直在增长,就说明不断有连接请求因为数据库连接达到最大 允许而连接失败,应该考虑增大max_connections参数的值,另外,由于每个session操作数据库表时都要占用文件描述符,数据库连接本身也要占用文件描述符,因此在调整这个参数时,也要对应调整操作系统的open-files-limit设置。建议设置为历史最高位的80%,太大了容易导致所有连接卡死。注意:这个参数完全控制不具有super权限的用户的并发连接数,另外mysql还为具有super权限的用户额外预留了一个连接。即mysql的最大连接数其实是:max_connections+1
    • 全局变量,动态变量,整型值,默认为151,取值范围为1~100000
1.2.6. max_connect_errors = 1000000
  • 如果一个主机连续登录mysql失败超过这个参数(如果在没有超过这个次数之后重试连接成功过一次,那么就会重置错误计数器),则server断拒绝这个主机继续尝试登录,可以用flush hosts命令刷新这个登录失败的主机记录,并调整这个参数的大小避免这种情况的发生
    • 全局变量,动态变量,整型值,默认值为100,64位平台取值范围为1~18446744073709551615
1.2.7. net_write_timeout=60
  • 客户端向server端请求数据后,server端返回client所需数据并在向client端发送数据时(server端向客户端写入数据时),如果一个数据包写入客户端之后,客户端没有响应,那么server端会等待该参数定义的时长,如果超过这个时长后客户端还没有给出响应,那么server端将断开client连接。这与net_read_timeout参数的作用类似
    • 全局,会话,动态变量,整型值,最小值为1,默认值为60
1.2.8. net_retry_count=10
  • 设置在通信端口上的读取或写入中断时,重试多次放弃之后仍然失败就放弃。由于FreeBSD系统内部中断信号会发送到所有线程,因此在FreeBSD操作系统上该变量的值应该设置一个较高的值
    • 全局,会话,动态变量,整型值,默认值为10,64位平台取值范围为:1~18446744073709551615
1.2.9. net_read_timeout=30
  • 设置client向server端写入数据时(server端向客户端读取数据),如果server端读取一个数据包client端超过net_read_timeout定义的时间没有响应,则断开client连接。这与net_write_timeout参数作用类似
    • 全局,会话,动态变量,整型值,最小值为1,默认值为30
1.2.10. net_buffer_length=65535
  • 设置每个客户端会话线程相关的连接缓冲区和结果集缓冲区初始大小, 两个缓冲区在连接创建开始就设置为net_buffer_length变量给出的大小,后续根据需要可动态放大到max_allowed_packet系统变量指定的字节大小, 每个SQL语句执行完成之后,结果集缓冲区自动缩小到net_buffer_length变量指定的大小
    • 该变量通常不应该更改,但是如果内存很少,则可以将其设置小一些
    • 全局变量,会话变量(会话级别为只读变量),动态变量,整型值,默认值为16K,取值范围为:1024~1048576字节(1K~1M)
1.2.11. skip_networking=OFF
  • 设置是否跳过TCP/IP连接方式,如果服务器仅允许本地(非TCP/IP)连接,则设置此选项为ON。 在Unix上,本地连接使用Unix套接字文件。 在Windows上,本地连接使用命名管道或共享内存。设置仅允许本地连接时,使用--skip-networking启动选项或者在配置文件中将此变量设置为ON
    • 全局变量,只读变量,布尔型,默认值为OFF

1.3. 表缓存性能设置

1.3.1. table_open_cache = 4096
1.3.2. table_definition_cache = 4096
1.3.3. table_open_cache_instances = 32
  • table_open_cache实例的数量,5.6.6版本新增,默认情况下,table_open_cache_instances 的值为1,表示只有一个table_open_cache实例,此时,DML、DDL语句访问表时,需要把整个table_open_cache实例锁住,可以通过table_open_cache_instances设置大于1的值来将table_open_cache划分为多个实例。这样DML访问就不需要把所有的table_open_cache实例锁住,在一些场景下可以提高性能。但DDL语句仍然会把所有的table_open_cache实例锁住。
    • 默认值为1(在MySQL 5.7.8及其之后的版本中默认值为16),整型值,全局变量,只读变量,取值范围为1~64

1.4. session相关的内存设置

1.4.1. read_buffer_size = 16M
1.4.2. read_rnd_buffer_size = 32M
  • MyISAM表排序缓存的缓存大小(注意,是key-sorting索引排序),如果需要对Myisam表做排序,可以增大read_rnd_buffer_size改善性能,这个变量同样的每会话独占,也不能设置太大。
    • 该变量控制的buffer在从任何存储引擎读取数据的时候,都会用于缓存读取的数据,包括MRR优化特性也会使用
    • 全局,会话变量,动态变量,默认值为256K,最大值为2G,整型值。取值范围1~2147483647字节(2G)
1.4.3. sort_buffer_size = 32M
1.4.4. tmp_table_size = 64M
1.4.5. max_heap_table_size=64M
1.4.6. join_buffer_size = 32M
1.4.7. thread_cache_size = 64

1.5. 日志设置

1.5.1. slow_query_log = 1
1.5.2. log_queries_not_using_indexes = 1
  • 控制没有使用索引的Query是否也计入慢查询日志。全局变量,动态变量,默认为OFF,布尔型值。测试环境可以开启,线上环境不建议开启,因为开启之后,像set,commit之类的没有用到索引的SQL都会进行记录
1.5.3. log_slow_admin_statements = 1
  • 控制是否把管理语句慢的也计入慢查询日志,这个参数打开可能导致一些没有意义的sql被记录到慢日志里。线上环境不建议开启,排查问题时可以临时打开。全局变量,动态变量,默认为OFF,布尔型值。
1.5.4. log_slow_slave_statements = 1
  • 控制是否把从库执行慢的语句也计入从库的慢查询日志中。全局变量,动态变量,默认为OFF,布尔型值。设置这个变量不会立即生效,需要重启当前的slave线程,或者对于5.7.x的版本对后续启动的复制通道生效。
1.5.5. expire_logs_days = 90
  • 设置二进制日志的过期天数,过了指定天数的日志将被自动删除,可动态修改
    • 如果设置了非0值,则在mysqld启动和日志刷新时,可能执行清理超过定义天数的binlog file
    • 全局变量,动态变量,默认值为0(代表不会自动清理binlog),整型值,取值范围为0~99
1.5.6. long_query_time = 2
1.5.7. binlog_rows_query_log_events = 1
1.5.8. log_slave_updates = 1
  • 将master传输过来的变更操作,再次记录成本地binlog,用于做二次复制,当做中继分发节点,但是要注意,从库中记录的这个binlog与主库中的binlog内容格式不一样,从库中的binlog包含了主库和从库的server-id,为了防止复制的循环重复执行。在GTID复制模式下,所有数据库都要开启log_slave_updates参数,是因为为了方便快速同步数据,如果涉及到切换,那么可以快速地把二进制日志进行同步(因为所有服务器都有记录完整的binlog)
    • 全局变量,只读变量,默认值为false,布尔型值
    • 注:该参数在5.7.x版本中如果关闭,备库在复制重放来自主库的事务时,每一个事务提交时都会实时更新mysql.gtid_executed表
1.5.9. general_log=0
1.5.10. log_bin=mysql-bin
  • 此变量控制是否开启对二进制日志的日志记录功能。 默认值为1(做日志记录)。 用于在会话级别临时开关binlog记录功能,如果要更改当前会话的日志记录,请更改此变量的会话值。 用户必须具有设置此变量的SUPER权限
    • 在MySQL 5.6及其之后的版本中,不可能在事务或子查询中设置@@ session.sql_log_bin。
    • 会话变量,动态变量,布尔型,默认值为ON,该变量要使得binlog记录功能生效,必须打开log_bin参数,否则就算sql_log_bin=ON也不会记录binlog。
1.5.11. sql_log_bin=ON
  • 此变量控制是否开启对二进制日志的日志记录功能。 默认值为1(做日志记录)。 用于在会话级别临时开关binlog记录功能,如果要更改当前会话的日志记录,请更改此变量的会话值。 用户必须具有设置此变量的SUPER权限
    • 在MySQL 5.6及其之后的版本中,不可能在事务或子查询中设置@@ session.sql_log_bin。
    • 会话变量,动态变量,布尔型,默认值为ON,该变量要使得binlog记录功能生效,必须打开log_bin参数,否则就算sql_log_bin=ON也不会记录binlog。
1.5.12. log_bin_index=/data/mysql/data/mysql-bin.index
  • binlog索引文件的路径+名称,索引文件中存放着binlog文件的路径和名称(log_bin如何定义路径,这个索引文件中就如何存放binlog路径,如:log_bin只定义了mysql-bin,则那么index文件中记录的就是./mysql-bin.000001这样的记录条目,如果log_bin定义的是/path/mysql-bin,则index文件中记录的就是/path/mysql-bin.000001这样的记录条目
    • 全局变量,只读变量,默认值为datadir + log_bin定义的前缀+index
1.5.13. log_syslog_tag
1.5.14. log_syslog=OFF
  • 设置是否将错误日志输出写入syslog(在Unix和类Unix系统上)或事件日志(在Windows上)。
    • 全局变量,动态变量,布尔型值,在Unix和Unix系统上,该变量默认为OFF,在Windows上,事件日志输出默认启用,这与旧的MySQL版本一致
1.5.15. log_syslog_include_pid=ON
  • 在syslog中写入错误日志信息时,是否同时写入mysql server的进程ID,该变量需要在log_syslog=ON时才生效
    • 全局变量,动态变量,布尔值,默认值为ON
1.5.15. log_error=/data/mysql/data/error.log
1.5.16. log_error_verbosity=3
1.5.17. log_warnings
1.5.18. log_output=FILE
1.5.19. min_examined_row_limit=0
  • 当一个查询语句在存储引擎中检查的数据行数超过了这个变量设置的行数时,该语句就会被记录到慢查询中,默认情况下,该变量为0,表示不限制返回记录数量
    • 全局会话变量,动态变量,整型值,默认值为0,取值范围:32位平台为:0~4294967295,64位平台为:0~18446744073709551615
1.5.20. log_short_format=1
  • 用于控制慢查询的长度,这是mysqld的启动选项,不是系统参数,启用该参数之后,会使得慢查询日志记录更少的信息
    • mysqld启动选项,布尔型,默认值为FALSE
1.5.21. log_throttle_queries_not_using_indexes=0
  • 如果启用log_queries_not_using_indexes参数,则log_throttle_queries_not_using_indexes变量如果同时启用,则log_throttle_queries_not_using_indexes变量设置的值会限制每60秒内可写入慢查询日志的查询语句次数。默认值为0(默认值)表示“无限制”
    • 全局变量,动态变量,整型值,默认值为0,取值范围为int类型的有效值范围
1.5.22. transaction_write_set_extraction=XXHASH64
  • 定义用于生成与写入事务关联的哈希算法。 在组复制架构中,哈希值将用于分布式冲突检测和处理。所以64位系统上运行组复制架构,建议将其设置为XXHASH64,以避免不必要的哈希冲突导致用户事务认证失败回滚
    • 全局,会话变量,动态变量,枚举类型,默认值为OFF,MySQL 5.7.6版本引入,5.7.13版本之前有效值为OFF、MURMUR32,5.7.13及其之后的版本有效值为OFF、MURMUR32、XXHASH64
    • 注意:当binlog_transaction_dependency_tracking系统变量设置为WRITESET或WRITESET_SESSION值时,transaction_write_set_extraction不能修改,也不能设置为OFF,只能使用MURMUR32、XXHASH64值(MySQL 8.0.2及其以上版本默认值为XXHASH64)
1.5.23. binlog_transaction_dependency_tracking=COMMIT_ORDER
1.5.24. binlog_transaction_dependency_history_size=25000
  • 设置最近发生数据修改的事务在内存中保存的用于计算hash值的最大数据行数,达到上限之后,历史记录将被清除
    • 全局变量,动态变量,整型值,默认值为25000,取值范围为:1~1000000,MySQL 5.7.22版本引入
    • PS:请根据数据库配置高低设置 binlog_transaction_dependency_history_size,性能有富余的实例可以适当调大该参数,找到更小的 commit parent,提高备库回放并行度。内存和CPU紧张的实例最好避免在 WriteSet上消耗太多资源。binlog_transaction_dependency_history_size 过大,不光消耗内存,还会降低冲突查询的效率

1.6. innodb引擎设置

1.6.1. innodb_buffer_pool_size = 160G
1.6.2. innodb_buffer_pool_instances = 16
1.6.3. innodb_buffer_pool_dump_at_shutdown = 1
1.6.4. innodb_buffer_pool_load_at_startup = 1
  • 如果在my.cnf中设置为ON,则就会在mysqld启动之后,重新加载缓冲池热数据页列表ib_buffer_pool文件
    • 全局变量,只读变量,布尔型值,5.6.x、5.7.6及其之前的的版本默认为OFF,5.7.7及其之后的版本默认为ON
1.6.5. innodb_io_capacity = 10000
1.6.6. innodb_flush_method = O_DIRECT
1.6.7. innodb_file_format = Barracuda
1.6.8. innodb_flush_neighbors = 0
  • 开启与关闭刷新邻接页功能(buffer pool中相对于磁盘上相同的区中的脏页),默认为1,可动态修改,枚举类型。对于传统机械磁盘建议设置为1即启用,对于SSD则建议设置为0即关闭。此外还有一个为2的值,该值也同样刷新邻接页,但不要求在同一个区中的脏页是连续的。而1是要求buffer pool中相对于磁盘上相同的区之外,还要求在同一个区中是连续的
1.6.9. innodb_log_file_size = 17179869184
1.6.10. innodb_log_files_in_group = 2
  • 设置redo log日志组中有多少个redo log文件,全局变量,只读变量,默认值且也是推荐值为2,最大值为100,最小值也为2,整型值。
1.6.11. innodb_purge_threads = 4
  • 控制purge线程是否独立出主线程,开启多少个独立的purge线程,如果CPU核心数比较多且磁盘性能比较高,可适当修改上面几个参数。
    • 全局变量,只读变量,5.6.4及其之前的版本默认值为0,5.6.5开始的版本默认值为1,最大值为32,整型值。
    • 设置多个独立purge线程时,有助于提高DML多表操作的效率。以及减少innodb内部的资源争用。
1.6.12. innodb_thread_concurrency = 64
1.6.13. innodb_write_io_threads = 16
  • 控制innodb内部写线程数量参数,全局变量,只读变量,默认值为4,最小值为1,最大值为64
    • 在一台机器上跑多实例的时候,要注意操作系统的aio-max-nr设置限制。如果被限制时,要么增大操作系统的这个值,要么减少my.cnf中的配置
    • 另外,binlog的刷新也是使用这个线程,特别是sync_binlog=1时也要把这个参数加一
1.6.14. innodb_read_io_threads = 16
  • 控制innodb内部读线程数量参数,全局变量,只读变量,默认值为4,最小值为1,最大值为64
1.6.15. innodb_file_per_table = 1
  • 设置innodb表是否使用独立表空间,如果设置为1,表示使用独立表空间,每个表的表数据、索引信息、插入缓冲bitmap在独立表空间里存放,但是表的元数据、undo log、插入缓冲等等还是保存在共享表空间里
    • 全局变量,动态变量(如果动态修改,立即对所有的连接生效,动态修改需要有super权限),5.6.5及其之前的版本默认为OFF,5.6.6及其之后的版本默认为ON,当为OFF时,所有的表的数据和索引都存放在共享表空间, 共享表空间增大之后无法收缩(5.7.x版本可以自动收缩)
1.6.16. innodb_autoinc_lock_mode = 2
1.6.17. innodb_open_files=4096
  • innodb引擎限制一次打开表空间文件.ibd的文件描述符数量,只在使用独立表空间时才有用,范围10~4294967295
    • 全局变量,只读变量,5.6.6之后的版本默认为-1,表示根据实际打开数量自动设置(自动计算规则:如果innodb_file_per_table没有打开,则默认值为300,如果打开了,则以innodb_open_files与table_open_cache中的较大值为准)。5.6.5及其之前的版本默认为300。
    • 该值仅用于限制innodb表空间.ibd文件的描述符数量,不影响table cache的数量,增大这个变量需要注意同时修改server层的变量open_files_limit=num(只读变量),这个参数为系统级别的文件句柄限制参数,由于每个session操作数据库表时都要占用文件描述符,数据库连接本身也要占用文件描述符,因此如果手动指定innodb_open_files参数时,还需要注意并发连接数量open_files_limit的大小设置
1.6.18. innodb_adaptive_hash_index=ON
  • 控制innodb自适应哈希索引特性是否开启参数,全局变量,动态变量(修改需要有super权限),默认为ON,布尔型值。开启时,会在内存中把热点数据对应的B树索引在内存中映射到一个hash表中,这样可以加快热点数据的查询
    • 禁用自适应散列索引会立即清空hash散列表。当散列表被清空时,正常操作可以继续,但正在使用hash散列表的查询立即直接访问B树索引。当重新启用自适应hash散列索引时,又会在内存中把热点数据对应的B树索引在内存中重新映射到一个hash表中
1.6.19. innodb_data_file_path=ibdata1:20M:autoextend
1.6.20. innodb_log_group_home_dir=.
  • 设置日志组文件路径和文件名称,全局变量,只读变量,默认为datadir+ib_logfileN
1.6.21. innodb_doublewrite=ON
  • 控制Innodb双写缓冲的开关的变量,因为双写缓冲是对连续磁盘空间的顺序写,因此开启双写缓冲对性能的影响不太大(但刷数据的流量会增加一半),对于要求高性能,又能容忍极端情况下可以丢失少量数据的应用,可以在配置文件中增加innodb_doublewrite=0来关闭双写缓冲
    • 全局变量,只读变量,默认值为ON,布尔型值
1.6.22. innodb_fast_shutdown=1
1.6.23. innodb_flush_log_at_trx_commit=1
1.6.24. innodb_force_recovery=0
1.6.25. innodb_lock_wait_timeout=50
1.6.26. innodb_locks_unsafe_for_binlog=OFF
1.6.27. innodb_max_dirty_pages_pct=50
  • 设置buffer pool中的最大脏页比例,innodb会尝试刷新脏页,以使得buffer pool中的脏页比例不高于这个比例
    • innodb_max_dirty_pages_pct设置只是建立了刷新活动的目标。 但它不影响刷新的速率。 有关管理刷新速率的信息,请参见第14.6.3.5节“配置InnoDB缓冲池刷新”。
    • 全局变量,动态变量,默认值为75表示75%,最小值为0,最大值为99,numeric类型
1.6.28. innodb_max_dirty_pages_pct_lwm=0
1.6.29. innodb_rollback_on_timeout=ON
  • 用来设置是否在等待超时后对进行中的事务进行回滚操作(只读变量),默认是OFF,代表不回滚。
    • 全局变量,只读变量,布尔型,默认值为OFF
    • 注意:要牢记,在默认情况下,innodb不会回滚超时引发的错误异常,其实innodb存储引擎大部分情况下都不会对异常进行回滚。另外,即时该参数设置为ON,使用start transaction;和begin;语句显式开启的事务,也不会受该参数的影响,显式开启的事务必须使用commit和rollback语句显式地提交和回滚。
1.6.30. innodb_sort_buffer_size=1048576
1.6.31. innodb_support_xa=ON
1.6.32. innodb_buffer_pool_dump_now=OFF
  • 立即记录缓存在InnoDB缓冲池中的页面到datadir下的ib_buffer_pool文件中。 通常与innodb_buffer_pool load_now结合使用
    • 全局变量,动态变量,布尔型值,默认值为OFF
1.6.33. innodb_buffer_pool_dump_pct=25
  • 指定要读取并转储的每个缓冲池最近使用的页面的百分比。例如,如果有4个缓冲池,每个缓冲池有100页,innodb_buffer_pool_dump_pct设置为25,则每个缓冲池中最近使用的25个页面将被转储。
    • 全局变量,动态变量,整型值,5.7.2版本引入,5.7.6及其之前的版本默认值为100,5.7.7及其之后的版本默认为25,取值范围为:1~100,单位是百分比
1.6.34. innodb_buffer_pool_filename=ib_buffer_pool
  • 保存由innodb_buffer_pool_dump_at_shutdown或innodb_buffer_pool_dump_now参数触发的导出buffer pool时生成的表空间ID和页面ID列表的文件的名称。 表空间ID和页面ID以格式"space,page_id"代表一个页为一行保存。 默认情况下,文件名为ib_buffer_pool,位于InnoDB数据目录中。
    • 全局变量,动态变量,file name类型,默认值为ib_buffer_pool,可以使用SET语句在运行时指定文件名:SET GLOBAL innodb_buffer_pool_filename ='file_name'; 您还可以在启动时,指定启动选项或MySQL配置文件中指定文件名。 如果是在启动时使用启动选项指定文件名,则该文件必须事先存在,否则InnoDB将返回提示没有这样的文件或目录的启动错误。
1.6.35. innodb_buffer_pool_load_at_startup=ON
  • 在MySQL服务器启动时,InnoDB缓冲池通过加载之前停止mysql时保存的buffer pool中的热点数据页面列表文件ib_buffer_pool,以尽快恢复mysql的最佳查询性能,通常与innodb_buffer_pool_dump_at_shutdown组合使用(停止时需要先使用这个参数导出buffer pool中的页列表生成ib_buffer_pool文件)
    • 全局变量,只读变量,布尔型值,5.6.x、5.7.6及其之前的的版本默认为OFF,5.7.7及其之后的版本默认为ON
1.6.36. innodb_buffer_pool_load_now=OFF
  • 立即载入datadir下的ib_buffer_pool文件中的页面到缓冲池中,将热点数据页立即加载到buffer pool中,以迅速恢复数据库的最佳性能
    • 全局变量,动态变量,布尔型值,默认值为OFF
1.6.37. innodb_buffer_pool_load_abort=OFF
  • 中断由innodb_buffer_pool_load_at_startup或innodb_buffer_pool_load_now触发的加载InnoDB缓冲池内容(ib_buffer_pool文件)的恢复过程
    • 全局变量,动态变量,布尔型值,默认值为OFF
1.6.38. innodb_print_all_deadlocks=OFF
  • 设置是否将死锁信息记录到错误日志中。默认情况下,死锁信息只能通过show engine innodb status语句查看,且该语句中只记录了最后一次死锁信息,如果后续再发生死锁,前一次的死锁信息将被覆盖。
    • 全局,动态变量,布尔型,默认值为OFF,5.6.2中引入
    • 注意:生产环境不建议一直打开,否则错误日志将变得越来越大。建议只在需要排查死锁问题的时候动态打开,问题排查之后关闭。
1.6.39. innodb_status_output=OFF
1.6.40. innodb_status_output_locks=OFF
1.6.41. innodb_table_locks=ON
1.6.42. innodb_strict_mode=ON
1.6.43. innodb_undo_log_truncate=OFF
1.6.44. innodb_undo_directory=./
  • 设置独立与系统表空间的undo logs文件存放路径,如果设置为相对路径,通常用于将undo日志放在不同的存储设备上。 需要与innodb_undo_logs和innodb_undo_tablespaces一起使用才生效。
    • 全局变量,只读变量,directory name类型,5.6.3引入,5.6.x版本中默认值为 . 号,代表datadir目录,5.7.7及其之前的5.7.x版本也默认为 . 号,5.7.8及其之后的版本中没有默认值(它为NULL,但是show variables出来是一个./值)。 如果未指定路径,则在datadir定义的MySQL数据目录中创建undo表空间
1.6.45. innodb_undo_logs=128
1.6.46. innodb_undo_tablespaces=0
1.6.47. innodb_stats_method=nulls_equal
1.6.48. innodb_stats_auto_recalc=ON
  • innodb引擎表中的数据发生显着变化后会自动重新计算持久性统计信息。触发阈值是表中行数据的10%发生了变化。要使得自动更新持久化统计信息生效,必须启用innodb_stats_persistent系统参数,启用innodb_stats_persistent之后所有表的统计信息都会自动重新计算,当然在innodb_stats_persistent变量未启用时,可以显式通过在CREATE TABLE或ALTER TABLE语句中指定STATS_PERSISTENT = 1来指定表需要执行自动统计信息重新计算。采样生成统计信息的采样页数由innodb_stats_persistent_sample_pages系统参数控制
    • 全局变量,动态变量,布尔值,默认值为ON
1.6.49. innodb_stats_include_delete_marked=OFF
1.6.50. innodb_stats_on_metadata=OFF
1.6.51. innodb_stats_persistent=ON
1.6.52. innodb_stats_persistent_sample_pages=20
1.6.53. innodb_stats_transient_sample_pages=8
1.6.54. innodb_page_size=16384
1.6.55. innodb_page_cleaners=1
1.6.56. innodb_deadlock_detect=ON
  • 此系统参数用于控释是否禁用死锁检测。
    • 在高并发系统上,当许多线程等待同一个锁时,死锁检测可能导致速度减慢。有时,禁用死锁检测可能会加快多线程并发访问速度,并且在发生死锁时依靠innodb_lock_wait_timeout系统参数设置进行事务回滚(事务获取锁超过这个时间时,发生的超时回滚,可能还需要打开参数innodb_rollback_on_timeout=ON)
    • 全局变量,动态变量,布尔型,默认值为ON
1.6.57. innodb_change_buffering=all
1.6.58. innodb_max_undo_log_size=1073741824
  • 定义undo log表空间触发自动收缩的触发阈值大小。如果undo表空间超过该阈值,则当启用innodb_undo_log_truncate启用时,超过该阀值大小的undo logs文件被标记为可以truncate
    • 全局变量,动态变量,整型值,默认值为1024 MiB(1073741824 bytes),最小值为10M,取值范围为:10485760~2**64-1字节,5.7.5版本引入
1.6.59. innodb_purge_rseg_truncate_frequency=128
  • 定义purge线程的清除系统释放回滚段的频率,undo log表空间在其对应的回滚段被释放之前是不能被回收的。默认情况下,清除系统会在回滚段被调用128次之后执行一次释放回滚段操作(回滚段默认为128个,用完了需要释放不需要的回滚段), 减少innodb_purge_rseg_truncate_frequency值会增加清除线程释放回滚段的频率,innodb_purge_rseg_truncate_frequency在innodb_undo_log_truncate为ON时才生效,用于配合innodb_undo_log_truncate变量以怎样的频率来做undo log的自动回收。
    • 全局变量,动态变量,整型值,取值范围为:1~128,默认值为128,5.7.5版本引入
1.6.60. innodb_purge_batch_size=300
1.6.61. innodb_max_purge_lag=0
1.6.62. innodb_max_purge_lag_delay=0
  • 指定由innodb_max_purge_lag系统参数指定阀值触发的延迟执行后的最大延迟时间(以毫秒为单位)。 非零值表示延迟指定值大小的时间之后不再延迟DML操作,对比值是基于innodb_max_purge_lag的值的公式计算出的延迟周期的上限。 默认为零表示延迟时间间隔没有上限
    • 全局变量,动态变量,整型值,默认值为0,最小值为0,无最大上限
1.6.63. innodb_default_row_format=dynamic
1.6.64. innodb_flush_sync=ON
  • 开启该参数时,在做checkpoint时,发生IO突增时,回忽略innodb_io_capacity设置的值,即全速IO做checkpoint
    • 全局变量,动态变量,布尔型,默认值为ON,5.7.8版本引入
1.6.65. innodb_numa_interleave=ON
  • 控制是否启用NUMA交错内存策略来分配InnoDB缓冲池。当启用innodb_numa_interleave时,对于mysqld进程,NUMA内存策略设置为MPOL_INTERLEAVE,在分配InnoDB缓冲池之后,NUMA内存策略设置为MPOL_DEFAULT。 要使innodb_numa_interleave选项,默认情况下二进制包里边是没有编译进这个参数的。也就是说,要使用这个系统参数,MySQL必须在支持NUMA的Linux系统上指定NUMA选项进行编译,以支持该选项
    • 从MySQL 5.7.17开始,使用CMake编译时会基于当前平台是否支持NUMA来自动设置默认的WITH_NUMA值
    • 全局变量,只读变量,布尔型,默认值为OFF,5.6.27版本引入
1.6.66. innodb_read_only=OFF
1.6.67. innodb_online_alter_log_max_size=134217728
1.6.68. innodb_tmpdir='/path/'
1.6.69. innodb_change_buffer_max_size=25
  • 控制在buffer pool size中用于change buffer的内存比例,如果你DML操作频繁而select少,那么你可能需要调整这个比例值以优化IO操作
    • 全局变量,动态变量,整型值,默认值为25,取值范围0~50
1.6.70. innodb_log_buffer_size=128M
  • InnoDB redo log日志文件的缓冲区大小(以字节为单位)。在引入32k和64k innodb_page_size值,默认值从8MB更改为16MB。 较大的日志缓冲区可以使大型事务运行时缓存更多的日志内容,而不是必须在事务提交之前将日志内容写入磁盘。 因此,如果您有更新,插入或删除操作多行的事务,使用较大的日志缓冲区可以节省更多的磁盘I/O
    • 全局变量,只读变量,整型值,取值范围:5.7.5之前版本为262144~4294967295字节,默认值为8388608(8M),5.7.6之后的版本为1048576~4294967295字节,默认为16777216(16M)

1.7. 复制设置

1.7.1. master_info_repository = TABLE
1.7.2. sync_master_info=10000
1.7.3. sync_relay_log=10000
  • 控制IO线程读取主库binlog往relay log中写了多少个events的时候就调用fdatasync()把binlog数据同步到relay log磁盘文件中,如果设置为0,则表示等到操作系统刷新到磁盘。
    • 全局变量,动态变量,默认值为10000,整型值,如果relay_log_recovery参数没有开启的话,则建议设置为1来保证IO线程读取的主库binlog数据能实时存盘到relay log文件中,以保证主从复制的正常运行。
1.7.4. relay_log_info_repository = TABLE
1.7.5. sync_relay_log_info=10000
1.7.6. relay_log_recovery = 1
1.7.7. sync_binlog = 1
1.7.8. gtid_mode = on
1.7.9. enforce_gtid_consistency = 1
1.7.10. binlog_format = ROW
1.7.11. max_binlog_size=512M
1.7.12. slave_parallel_workers=0
1.7.13. binlog_row_image=minimal
1.7.14. max_binlog_cache_size=4G
  • 设置事务语句的总的最大binlog缓存大小,最小值为4096.最大可能值为16EB(exabytes),默认值为最大值,全局变量,动态变量,整型值。 最大推荐值为4GB; 这是由于MySQL目前二进制日志的position不能大于4GB
    • 全局变量,动态变量,整型值,取值范围:4096~18446744073709551615(4K~16EB),默认值为最大值
1.7.15. binlog_cache_size=32K
1.7.16. binlog_stmt_cache_size=32K
  • 设置非事务语句的binlog cache大小。 如果server支持事务性存储引擎,并且启用了二进制日志(--log-bin选项),则为每个客户端分配独立的事务和非事务语句binlog高速缓存(所有客户端的总的非事务语句binlog cache大小由变量max_binlog_stmt_cache_size控制,如果超过这个大小时会报错)。 如果在事务期间经常使用大的非事务性语句,则可以增加此高速缓存大小以获得更好的性能。 观察Binlog_stmt_cache_use和Binlog_stmt_cache_disk_use状态变量的大小,如果Binlog_stmt_cache_disk_use经常被使用到,则可以调整此变量的大小。
    • 全局变量,动态变量,默认值为32K,整型值
1.7.17. max_binlog_stmt_cache_size=4G
  • 与max_binlog_cache_size作用类似,但是限制非事务语句总的binlog cache大小
1.7.18. slave_parallel_type=LOGICAL_CLOCK
1.7.19. slave_rows_search_algorithms='INDEX_SCAN,HASH_SCAN'
1.7.20. binlog-row-event-max-size=N
  • 控制row格式下,binlog event的最大大小,单位字节
    • 该选项为mysqld启动选项,并不是系统变量,整型类型,默认值为8192字节,最小值256字节,大于256的值需要是256字节的倍数。当行event的大小大于此值时会被分割为这个启动选项指定的大小
1.7.21. binlog_group_commit_sync_delay=0
  • 控制在将二进制日志文件同步到磁盘之前等待多少微秒以把事务合并到一个binlog group中一次性提交。 默认情况下,binlog-group-commit-sync-delay设置为0,表示没有延迟。 将binlog-group-commit-sync-delay设置为N时,可使更多的事务一次同步到磁盘,从而缩短了提交一组事务的总时间,因为较大的组提交能够减少磁盘IO,也能够减少提交事务消耗的总时间,适当调整该参数的值,可以提高从库并行复制性能,而不会影响主库的吞吐量和性能
    • 全局变量,动态变量,整型值,默认值为0,最大值为1000000,单位毫秒,表示1000S,5.7.5版本引入
1.7.22. binlog_group_commit_sync_no_delay_count=0
  • 在binlog-group-commit-sync-delay指定的延迟时间之内,一次组提交允许等待的最大事务数量,达到该参数指定的事务数量即进行组提交,不会再进行等待。 如果binlog-group-commit-sync-delay设置为0,则此选项不起作用
    • 全局变量,动态变量,整型值,默认值为0,最大值为1000000,表示最大只允许等待1000000个事务合并到一个提交组里。5.7.5版本引入
1.7.23. slave_preserve_commit_order=0
1.7.24. log_bin_trust_function_creators=1
1.7.25. log_bin_use_v1_row_events=0
  • MySQL 5.6.6之后的版本使用V2版本的binlog row events,MySQL 5.6.6之前的MySQL Server版本不能读取。 将此选项设置为1时mysqld使用V1版本的binlog row events来记录二进制日志,在mysql5.6.6之前V1是唯一的binlog row events版本,将-log-bin-use-v1-row-events设置为0(默认值)时mysqld使用V2的binlog row events记录二进制日志
    • 全局变量,只读变量,布尔型,默认值为OFF。
1.7.26. binlog_checksum=CRC32
1.7.27. master_verify_checksum=OFF
  • master_verify_checksum默认是禁用的; 如果启用,则主库使用二进制日志中的事件长度来验证事件,以便从库从二进制日志读取完整的事件(从库也需要同时使用参数slave_sql_verify_checksum=ON来打开校验checksum的功能),此时,如果读取到checksum不匹配的events时就会报错终止复制
    • 全局变量,动态变量,布尔型,默认值为OFF
1.7.28. binlog_error_action=IGNORE_ERROR
1.7.29. slave_net_timeout=60
  • 备库等待主库发送数据的超时时间,如果超过这个时间主库还未发送任何消息,则从库人为主库的master/slave连接已经断开了,开始尝试重连操作,重连操作的间隔时间以及重试次数由change master的MASTER_CONNECT_RETRY和MASTER_RETRY_COUNT另个参数在做change master语句的时候指定的。该指定值同时会记录到mysql.slave_master_info表的Connect_retry和Retry_count字段中
    • 全局变量,动态变量,整型值,最小值为1,5.7.7之前的版本默认值为3600,5.7.7及其之后的版本默认值为60,单位为秒
1.7.30. server_id=N
1.7.31. relay_log_purge=ON
  • 设置是否在sql线程重放完relay log之后,把对应的重放完的relay log自动清理掉,因为对于从库来讲,重放完的relay log代表着对应的数据已经写到数据文件中。
    • 全局变量,动态变量,布尔型,默认值为true
1.7.32. relay_log_index=/data/mysql/data/localhost-relay-bin.index
  • 中继日志的索引文件名称和路径,与log_bin_index类似。在5.7.x及其之后的版本中,表示默认复制通道中的中继日志的索引文件名称和路径
    • 全局变量,只读变量,file name类型,默认值需要看relay_log系统变量如何设置,如果relay_log显式设置且是带路径的,那么relay_log_index默认值为relay_log指定值+.index,如果relay_log显式设置但是未带路径,那么relay_log_index默认值为datadir+relay_log指定值+.index,如果relay_log_index未指定,那么默认值为datadir+host_name-relay-bin.index,实际上从mysql5.6.2版本开始,mysql内部生成了一个变量relay_log_basename,从结果上看,如果使用了主备复制,那么relay_log_index值总是为relay_log_basename+.index
1.7.33. relay_log=relay_log
1.7.34. relay_log_basename=/data/mysql/data/localhost-relay-bin
  • 保存中继日志文件的完整路径
    • 全局变量,只读变量,file name类型,默认值为datadir + '/' + hostname + '-relay-bin',如果relay_log变量指定了值而没有指定路径,那么该变量的值自动变更为datadir+relay_log指定值,如果relay_log指定了值且带有路径,那么该变量的值自动变更为与relay_log值相同
1.7.35. gtid_next=AUTOMATIC
1.7.36. slave_load_tmpdir=/home/mysql/data/mysqldata1/tmpdir
1.7.37. gtid_purged='af9c79b8-fb3f-11e5-93df-000c295e08a0:1-11978'
1.7.38. binlog_gtid_simple_recovery=ON
1.7.39. gtid_executed='799ef59c-4126-11e7-83ce-00163e407cfb:1-122471'
1.7.40. gtid_executed_compression_period=1000
1.7.41. gtid_owned=''
  • 此变量保存的GTID集合值取决于其作用范围,当使用会话级别查看时,该变量显示包含该客户端的所有GTID集合; 当使用全局级别查看时,该变量显示server中所有的GTID集合
    • 通常情况下该变量的会话,全局级别都为空串
    • 全局,会话,只读变量,字符串类型
1.7.42. binlog_order_commits=ON

1.8. 半同步复制设置

1.8.1. rpl_semi_sync_master=semisync_master.so
  • 指定半同步复制在master上使用的库文件名称,不需要使用路径,该参数为mysqld启动参数,并非system variables,在my.cnf中不需要指定,只需要在安装插件库时使用INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';语句安装过这个库即可。
1.8.2. rpl_semi_sync_master_enabled = 1
  • 是否在主库上启用半同步复制插件,如果开启,则需要主库上已经安装了semisync_master.so插件库
    • 全局变量,动态变量,默认值为OFF,布尔型值
1.8.3. rpl_semi_sync_master_timeout = 3000
  • 当参数rpl_semi_sync_master_enabled 开启时,该参数控制主库使用半同步复制机制把binlog发送到slave之后,等待从库ACK接收确认包的时间,如果在这个超时时间之内收到slave的接收确认包,则继续使用半同步复制机制同步下一个事务的binlog到从库,如果在这个超时时间之内未收到任何slave的接收确认包,则主库自动切换为异步复制。
    • 全局变量,动态变量,默认为10000,表示10S(10000毫秒),整型值。
1.8.4. rpl_semi_sync_master_trace_level=32
1.8.5. rpl_semi_sync_master_wait_no_slave=ON
1.8.6. rpl_semi_sync_slave=semisync_slave.so
  • 指定半同步复制在slave上使用的库文件名称,不需要使用路径,该参数为mysqld启动参数,并非system variables,在my.cnf中不需要指定,只需要在安装插件库时使用INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';语句安装过这个库即可。
1.8.7. rpl_semi_sync_slave_enabled = 1
  • 是否在从库上启用半同步复制插件,如果开启,则需要从库上已经安装了semisync_slave.so插件库
    • 全局变量,动态变量,默认值为OFF,布尔型值
1.8.8. rpl_semi_sync_slave_trace_level=32
  • 参考主库的rpl_semi_sync_master_trace_level参数解释部分
1.8.9. rpl_semi_sync_master_wait_for_slave_count=1
1.8.10. rpl_semi_sync_master_wait_point=AFTER_SYNC

1.9. performance_schema设置

1.9.1. performance_schema=OFF
1.9.2. max_digest_length=1024
1.9.3. performance_schema_max_digest_length=1024
  • 用于控制标准化形式的SQL语句文本在存入performance_schema时的限制长度,该变量与max_digest_length变量相关
    • 全局变量,只读变量,默认值1024字节,整型值,取值范围0~1048576,5.6.26和5.7.8版本中引入
1.9.4. performance_schema_accounts_size=-1
1.9.5. performance_schema_digests_size=10000
  • 控制events_statements_summary_by_digest表中的最大行数。如果产生的语句摘要信息超过此最大值,便无法继续存入该表,此时performance_schema会增加状态变量Performance_schema_digest_lost的值
    • 全局变量,只读变量,整型值,单位为行,取值范围-1~1048576,为-1时表示自动计算,但通常情况下,自动计算出的值都是10000,如果不够可自行调整,5.6.5版本引入
1.9.6. performance_schema_events_stages_history_long_size=10000
1.9.7. performance_schema_events_stages_history_size=10
1.9.8. performance_schema_events_statements_history_long_size=10000
1.9.9. performance_schema_events_statements_history_size=10
1.9.10. performance_schema_events_transactions_history_long_size=10000
  • 控制events_transactions_history_long 表中的最大行数
    • 全局变量,只读变量,整型值,5.7.3版本引入,默认值为-1,通常情况下,自动计算的值都是10000
1.9.11. performance_schema_events_transactions_history_size=10
  • 控制events_transactions_history 表中的每个线程的最大行数
    • 全局变量,只读变量,整型值,5.7.3版本引入,默认值为-1,通常情况下,自动计算的值都是10
1.9.12. performance_schema_events_waits_history_long_size=10000
1.9.13. performance_schema_events_waits_history_size=10
1.9.14. performance_schema_hosts_size=-1
1.9.15. performance_schema_max_cond_classes=80
  • 控制condition instruments的最大载入数量
    • 全局变量,只读变量,整型值,默认值为80
    • 如果某带有condition instruments的插件在载入时因为该变量的限制无法载入对应的instruments,则performance_schema会增加状态变量Performance_schema_cond_classes_lost的值
1.9.16. performance_schema_max_cond_instances=-1
1.9.17. performance_schema_max_file_classes=80
  • 控制file instruments载入最大数量
    • 全局变量,只读变量,整型值,默认值5.7.8及其之前的版本默认为50,5.7.9及其之后的版本默认为80
    • 如果某带有file instruments的插件在载入时因为该变量限制无法载入对应的instruments,则performance_schema会增加状态变量Performance_schema_file_classes_lost的值
1.9.18. performance_schema_max_file_handles=32768
1.9.19. performance_schema_max_file_instances=-1
1.9.20. performance_schema_max_index_stat=-1
  • 控制在performance_schema中维护索引统计信息的最大数量,如果超出这个参数定义的值,则会发生索引统计信息丢失,此时performance_schema会增加状态变量Performance_schema_index_stat_lost的值
    • 全局变量,只读变量,整型值,默认值为-1,自动计算时使用perform_schema_max_table_instances的值来自动调整,5.7.6版本引入
1.9.21. performance_schema_max_memory_classes=320
  • 控制最大memory instruments的载入数量
    • 如果带有memory instruments的插件在载入时因为该变量的限制无法载入对应的instruments,则performance_schema会增加状态变量Performance_schema_memory_classes_lost的值
    • 全局变量,只读变量,整型值,5.7.2版本引入,5.7.4及其之前的版本默认值为250,5.7.5及其之后的版本默认值为320
1.9.22. performance_schema_max_metadata_locks=-1
  • MDL锁instruments的最大数量,这个值控制metadata_locks表中的最大行数
    • 如果产生的MDL锁数量超过了该变量定义的值,则超出部分将不能被instrumetns监控,此时performance_schema会增加系统变量Performance_schema_metadata_lock_lost的值
    • 全局变量,只读变量,整型值,5.7.3版本引入,默认值为-1
1.9.23. performance_schema_max_mutex_classes=210
  • 控制mutex锁 instruments的最大载入数量
    • 全局变量,只读变量,整型值,默认值为200
    • 如果某带有mutex instruments的插件在载入时因为该变量的限制无法载入对应的instruments,则performance_schema会增加状态变量Performance_schema_mutex_classes_lost的值
1.9.24. performance_schema_max_mutex_instances=-1
1.9.25. performance_schema_max_prepared_statements_instances=-1
  • 控制prepared_statements_instances表中的最大行数,如果这个行数被塞满,那么当后续再有prepared statemen信息的时候就不能够被instruments检测到,此时performance_schema会增加系统变量Performance_schema_prepared_statements_lost的值
    • 全局变量,只读变量,整型值,5.7.4版本引入,默认值为-1,自动计算基于系统变量max_prepared_stmt_count的值计算,max_prepared_stmt_count系统变量的默认值为16382
1.9.26. performance_schema_max_program_instances=-1
  • 控制performance_schema维护的最大存储程序数量的统计信息,如果存储程序超过该变量定义的值,则performance_schema会增加状态变量Performance_schema_program_lost的值
    • 全局变量,只读变量,整型值,5.7.2版本引入,5.7.5及其之前的版本默认值为5000,5.7.6及其之后的版本默认值为-1
1.9.27. performance_schema_max_rwlock_classes=40
1.9.28. performance_schema_max_rwlock_instances=-1
1.9.29. performance_schema_max_socket_classes=10
  • 控制socket instruments最大载入数量
    • 全局变量,只读变量,整型值,默认值为10,5.6.3版本引入
    • 如果某带有socket instruments的插件在载入时因为该变量的限制无法载入对应的instruments,则performance_schema会增加状态变量Performance_schema_socket_classes_lost的值
1.9.30. performance_schema_max_socket_instances=-1
1.9.31. performance_schema_max_sql_text_length=1024
1.9.32. performance_schema_max_stage_classes=150
  • 控制stage instruments最大载入数量
    • 全局变量,只读变量,整型值,默认值为150,5.6.3版本引入
    • 如果某带有stage instruments的插件在载入时因为该变量的限制无法载入对应的instruments,则performance_schema会增加状态变量Performance_schema_stage_classes_lost的值
1.9.33. performance_schema_max_statement_classes=193
  • 控制statement instruments的最大数量
    • 全局变量,只读变量,整型值,默认值为-1,默认值server在初始化时根据client/server协议中的命令数量和server中支持的SQL语句类型的数量自动计算的
    • 不建议修改该变量(设置为0除外,因为设置为0时禁用所有语句检测以及相关的内存分配),将变量设置为除默认值之外的其他非零值没有任何好处,因为大于默认值时需要分配更多的内存
1.9.34. performance_schema_max_statement_stack=10
  • 控制performance_schema中维护的存储程序统计信息的的最大调用嵌套深度,当调用嵌套层级超过了该变量定义的值时,performance_schema就会增加状态变量Performance_schema_nested_statement_lost的值,并且丢失超过层级的统计信息
    • 全局变量,只读变量,整型值,默认值为10,5.7.2版本引入
1.9.35. performance_schema_max_table_handles=-1
1.9.36. performance_schema_max_table_instances=-1
1.9.37. performance_schema_max_table_lock_stat=-1
  • 控制在performance_schema中维护的最大表锁统计信息数量,如果表锁数量超过这个参数定义的数量,超出部分将无法记录表锁统计信息,此时performance_schema将增加状态变量Performance_schema_table_lock_stat_lost的值
    • 全局变量,只读变量,整型值,默认值为-1,5.7.6版本引入
1.9.38. performance_schema_max_thread_classes=50
  • 控制thread instruments最大载入数量
    • 全局变量,只读变量,整型值,默认值为50
    • 如果某带有thread instruments的插件在载入时因为该变量的限制无法载入对应的instruments,则performance_schema会增加状态变量Performance_schema_thread_classes_lost的值
1.9.39. performance_schema_max_thread_instances=-1
1.9.40. performance_schema_session_connect_attrs_size=512
1.9.41. performance_schema_setup_actors_size=-1
1.9.42. performance_schema_setup_objects_size=-1
1.9.43. performance_schema_users_size=-1
1.9.44. performance_schema_consumer_events_stages_current=FALSE
  • 在mysql server启动时是否就开启events_stages_current表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.45. performance_schema_consumer_events_stages_history=FALSE
  • 在mysql server启动时是否就开启events_stages_history表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.46. performance_schema_consumer_events_stages_history_long=FALSE
  • 在mysql server启动时是否就开启events_stages_history_long表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.47. performance_schema_consumer_events_statements_current=TRUE
  • 在mysql server启动时是否就开启events_statements_current表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.48. performance_schema_consumer_events_statements_history=TRUE
  • 在mysql server启动时是否就开启events_statements_history表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.49. performance_schema_consumer_events_statements_history_long=FALSE
  • 在mysql server启动时是否就开启events_statements_history_long表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.50. performance_schema_consumer_events_transactions_current=FALSE
  • 在mysql server启动时是否就开启events_transactions_current表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.51. performance_schema_consumer_events_transactions_history=FALSE
  • 在mysql server启动时是否就开启events_transactions_history表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.52. performance_schema_consumer_events_transactions_history_long=FALSE
  • 在mysql server启动时是否就开启events_transactions_history_long表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.53. performance_schema_consumer_events_waits_current=FALSE
  • 在mysql server启动时是否就开启events_waits_current表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.54. performance_schema_consumer_events_waits_history=FALSE
  • 在mysql server启动时是否就开启events_waits_history表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.55. performance_schema_consumer_events_waits_history_long=FALSE
  • 在mysql server启动时是否就开启events_waits_history_long表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.56. performance_schema_consumer_global_instrumentation=TRUE
1.9.57. performance_schema_consumer_statements_digest=TRUE
  • 在mysql server启动时是否就开启events_statements_summary_by_digest 表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.58. performance_schema_consumer_thread_instrumentation=TRUE
  • 在mysql server启动时是否就开启events_xxx_summary_by_yyy_by_event_name表的记录功能,启动之后也可以在setup_consumers表中使用UPDATE语句进行动态配置
    • 启动选项,不是system variables
1.9.59. performance_schema_instrument[=name]
  • 在mysql server启动时是否就开启相应的instruments,其中[=name]可以指定为具体的Instruments名称(但是这样如果有多个需要指定的时候,就需要使用该选项多次),也可以使用通配符,可以指定instruments相同的前缀+通配符,也可以使用%代表所有的instruments

1.10 group_replication

  • 本小节配置参数变量是针对Group Replication插件的系统变量。每个配置参数都以“group_replication”为前缀
    • 要注意:虽然大多数参数变量都被描述为动态变量,并且可以在MySQL Server运行时进行更改,但大多数参数修改需要重启复制插件才能生效,修改之后不需要重启插件的参数变量会在每个变量的解释部分进行说明(也是本小节需要重点关注的配置参数)
1.10.1. group_replication_allow_local_disjoint_gtids_join
  • 即使该组中缺失一些事务(请求加入的节点中比复制组中的事务还要多),也允许当前服务器加入该组。该变量在5.7.21版中已弃用,计划在将来的版本中删除
    • 警告:慎用该参数,不正确的使用可能会导致复制组中的数据出现不一致
    • 全局变量,动态变量,布尔型,默认值为OFF,MySQL 5.7.17版本引入,5.7.21版本弃用
1.10.2. group_replication_allow_local_lower_version_join
  • 即使当前请求加入复制组的节点使用的组复制插件版本低于复制组中使用的插件,也仍然允许其加入该复制组
    • 全局变量,动态变量,布尔型,默认为OFF,MySQL 5.7.17版本引入
1.10.3. group_replication_auto_increment_increment
  • 自动设置复制组中的每个节点的自增值,以确保每个实例在复制组中的自增列值有序且不重叠
    • 全局变量,动态变量,整型值,默认值为7,取值范围:1~65535
1.10.4. group_replication_bootstrap_group
  • 使用该参数变量指定以此节点做引导拉起复制组。 该参数变量只能在一台Server上设置,并且只能在首次启动集群或重新启动整个集群时设置在其中一个Server上设置。当复制组拉起之后需要设置该变量为OFF动态关闭。如果在某Server上使用该变量拉起复制组之后再在另外一个Server中使用该变量启动复制组,则如果两个节点有相同的组名称时会产生脑裂(所以该参数通常写在配置文件中认设置为OFF)
    • 全局变量,动态变量,布尔型,默认为OFF,MySQL 5.7 17版本引入
1.10.5. group_replication_components_stop_timeout
  • 组复制在关闭时等待每个组件的超时时间(以秒为单位)
    • 全局变量,动态变量,整型值,默认值为3153600,取值范围为:2~3153600,MySQL 5.7.17版本引入
1.10.6. group_replication_compression_threshold
  • 当该参数变量设置为非零值时,传输的数据包超过该值就会使用LZ4对传输的数据包进行压缩,当设置为0时,压缩功能关闭
    • 全局变量,动态变量,整型值,默认值为1000000,取值范围为0~4294967295,MySQL 5.7.17版本引入
1.10.7. group_replication_enforce_update_everywhere_checks
  • 在多主模式的组复制集群中,该变量为所有节点启用或禁用严格一致性检查
    • 全局变量,动态变量,布尔型,默认为OFF,MySQL 5.7.17版本引入
1.10.8. group_replication_flow_control_applier_threshold
  • 指定应用队列中触发流控的等待事务数量。 修改此参数就变量无需重启组复制插件即可生效
    • 全局变量,动态变量,整型值,默认值为25000,取值范围为:0~2147483647,MySQL 5.7.17版本引入
1.10.9. group_replication_flow_control_certifier_threshold
  • 指定验证队列中触发流控的等待事务数量。 修改此参数就变量无需重启组复制插件即可生效,MySQL 5.7.17版本引入
    • 全局变量,动态变量,整型值,默认值为25000,取值范围为:0~2147483647
1.10.10. group_replication_flow_control_mode
  • 指定流控模式,修改此参数就变量无需重启组复制插件即可生效
    • 全局变量,动态变量,枚举值,默认值为QUOTA,有效值为:QUOTA(定额,即按照group_replication_flow_control_certifier_threshold和group_replication_flow_control_applier_threshold指定的阈值进行流控)、DISABLED(关闭流控),MySQL 5.7.17版本引入
1.10.11. group_replication_force_members
  • 组成员的地址列表,以逗号分隔,例如host1:port1,host2:port2。 此参数变量用于强制设置新的组成员身份,其中被排除的成员(未写进该参数变量中的成员)在该变量设置成功之后就不会收到新视图消息。 然后你需要手动移除/关闭被排除在该参数列表之外的成员。 另外。如果列表中的存在任何无效主机名可能导致后续节点执行START GROUP_REPLICATION语句失败,因为这些无法通讯的节点无法响应组成员间的通讯请求
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.12. group_replication_group_name
  • UUID格式的有效组名称,在二进制日志中用于为组复制事件设置GTID,复制组将在内部使用此UUID,注意,需要保证在同一个复制组中全局统一(即此Server实例所在复制组共用的UUID)
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.13. group_replication_group_seeds
  • 表示复制组中的组成员列表,通常该参数变量需要提供所有组成员的IP:PORT地址列表,但也可以指定至少一个有效的其他组成员的地址,否则使用语句START GROUP_REPLICATION启动复制插件时将会失败(多个成员的地址之间使用逗号分隔,例如,host1:port1,host2:port2)
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.14. group_replication_gtid_assignment_block_size
  • 为每个成员保留的连续GTID数。 每个成员从中进行消耗,并在其需要的时候获取更多的GTID数
    • 全局变量,动态变量,整型值,默认值为1000000,取值范围:32位平台为14294967295,64位平台为19223372036854775807,MySQL 5.7.17版本引入
1.10.15. group_replication_ip_whitelist
  • 指定允许哪些主机连接到该复制组。默认值为AUTOMATIC,在该值下每个组成员各自扫描所在主机上活跃网卡,这些活动网络接口上的本地私子网将被添加到该白名单列表中,多个网络地址之间使用逗号分隔,白名单列表可以使用IPV4、或子网 CIDR 表示法来指定允 许的主机,例如:192.0.2.22,198.51.100.0/24,example.org,www.example.com/24。对于127.0.0.1网段,始终允许访问组。不支持IPv6地址和解析为IPv6地址的主机名、域名
    • 全局变量,动态变量,默认值为AUTOMATIC,字符串类型,MySQL 5.7.17版本引入
1.10.16. group_replication_local_address
  • 复制组成员用于提供给组中的其他成员连接访问的网络地址,格式为host:port字符串。 复制组中的所有成员都要求可访问该地址,因为该地址用于内部组通信系统XCOM使用。
    • 警告:该地址和端口提供的访问协议不是MySQL Server的SQL协议,客户端程序不要使用该地址直接访问组成员
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.17. group_replication_member_weight
1.10.18. group_replication_poll_spin_loops
  • 该参数变量设置组复制通信线程在等待传入更多的网络消息之前,需要等待通信引擎互斥锁(mutex)被释放的次数
    • 全局变量,动态变量,整型值,默认值为0,取值范围:32位平台为04294967295,64位平台为018446744073709551615
1.10.19. group_replication_recovery_complete_at
  • 在状态传输后处理缓存中的事务时的恢复策略。此参数变量指定节点在接受到加入组之前(TRANSACTIONS_CERTIFIED)遗漏的事务之后标记为online,还是在接收并应用加入组之前(TRANSACTIONS_APPLIED)遗漏的事务之后标记为online
    • 全局变量,动态变量,枚举类型,默认值为TRANSACTIONS_APPLIED,有效值为:TRANSACTIONS_APPLIED、TRANSACTIONS_CERTIFIED,MySQL 5.7.17版本引入
1.10.20. group_replication_recovery_reconnect_interval
  • 当一个新的待加入节点尝试加入到复制组中时,如果没有发现可用donor节点,会尝试重新连接(寻找)可用的donor节点,此参数变量设置重连间隔时间(单位为秒)
    • 全局变量,动态变量,整型值,默认值为60,取值范围为:0~31536000,MySQL 5.7.17版本引入
1.10.21. group_replication_recovery_retry_count
  • 一个新的待加入节点在尝试加入复制组时,由于某些原因导致无法找到可用的donor节点,该变量设置重新尝试寻找可用donor节点的次数
    • 全局变量,动态变量,整型值,默认值为10,取值范围为:0~31536000,MySQL 5.7.17版本引入
1.10.22. group_replication_recovery_ssl_ca
  • 包含受信任SSL证书颁发机构列表文件的路径
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.23. group_replication_recovery_ssl_capath
  • 包含受信任的SSL证书颁发机构颁发的证书目录的路径
    • 全局变量,变量,字符串类型,MySQL 5.7.17版本引入
1.10.24. group_replication_recovery_ssl_cert
  • 用于建立安全连接的SSL证书文件的名称
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.25. group_replication_recovery_ssl_cipher
  • 允许用于SSL加密的密码列表
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.26. group_replication_recovery_ssl_crl
  • 包含证书吊销列表的文件的目录路径
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.27. group_replication_recovery_ssl_crlpath
  • 包含证书吊销列表的文件的目录路径
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.28. group_replication_recovery_ssl_key
  • 用于建立安全连接的SSL密钥文件的名称
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.29. group_replication_recovery_ssl_verify_server_cert
  • 在恢复过程中用于检查donor数据源节点发送的证书中的Common Name(共同名称)值
    • 全局变量,动态变量,字符串类型,MySQL 5.7.17版本引入
1.10.30. group_replication_recovery_use_ssl
  • 复制组恢复时,用于恢复的连接通道是否需要使用SSL
    • 全局变量,动态变量,布尔型,默认为OFF,MySQL 5.7.17版本引入
1.10.31. group_replication_single_primary_mode
  • 用于指定复制组是以单主模式运行工作负载还是多主模式运行工作负载,单主时(设置为ON)只有primary节点可读写,其他节点为SECONDARIES角色,是只读的。设置为OFF表示关闭单主模式(多主模式)
    • 全局变量,动态变量,布尔型,默认值为ON,MySQL 5.7.17版本引入
1.10.32. group_replication_ssl_mode
  • 指定组复制成员之间的连接的安全状态
    • 全局变量,动态变量,枚举类型,默认值为DISABLED,有效值为:DISABLED、REQUIRED、VERIFY_CA、VERIFY_IDENTITY
1.10.33. group_replication_start_on_boot
  • 是否在节点实例自身启动期间把复制组件一同拉起来
    • 全局变量,动态变量,布尔型,默认值为ON,MySQL 5.7.17版本引入
1.10.34. group_replication_transaction_size_limit
  • 设置复制组中的最大事务大小限制(以字节为单位)。当一个事务的数据量大于该参数变量设置的值时,事务会被回滚,可使用该参数来避免复制组中的大事务,大事务可能导致复制组出现内存、网络、性能方面的问题,还可能因为节点忙于处理大事务而无法响应节点间的健康检测包,从而导致故障转移机制执行写节点切换,当该参数变量设置为0时,复制组内接受的事务大小没有限制,有一定风险,请根据自己环境的工作负载情况来设定该参数变量的值
    • 全局变量,动态变量,整型值,默认值为0,取值范围为:0~2147483647,MySQL 5.7.19版本引入
1.10.35. group_replication_unreachable_majority_timeout

2、MySQL关键状态变量

  • 状态变量统计的是累计值,使用show global可以查看自服务器启动以来的global级别的状态变量统计值,使用show session可以查看到自连接创建以来的会话级别状态变量统计值且包含global级别的状态变量统计值一并输出,要获取每秒累计值,可以连续两秒获取状态变量并计算两次结果的差值,或者使用mysqladmin -r -i 1 ext |grep 'xx'查看

2.1. temporary table,table cache

2.1.1. Created_tmp_disk_tables
2.1.2. Created_tmp_tables
2.1.3. Table_open_cache_hits
  • 打开一个表时,在表缓存查找中的命中次数, 这个变量是在MySQL 5.6.6中添加的
2.1.4. Table_open_cache_misses
  • 打开一个表时,在表缓存查找中的未命中次数, 这个变量是在MySQL 5.6.6中添加的
2.1.5. Table_open_cache_overflows
  • 打开表缓存的溢出次数,在打开或关闭表之后,cache instance中具有未使用的条目,此时如果打开表的总数大于table_open_cache / table_open_cache_instances数量。 则该变量的值就会增加,且会开始尝试清理每一个cache instance中未使用的表(如果一旦后续的查询中又开始使用被清理出cache instance的表,那么此时就会导致Table_open_cache_misses和Table_open_cache_overflows值的增加)。所以,在高并发的情况下,你需要尽量保证table_open_cache / table_open_cache_instances=你的实例中的表数量的1倍左右(防止在高并发的情况下实例中的每一个表都被打开至少一次,甚至是高并发下大量的多表联结查询),这个变量是在MySQL 5.6.6中添加的。
2.1.6. Com_lock_tables
  • 显式锁表语句执行的次数
2.1.7. Com_unlock_tables
  • 显式解锁语句执行的次数

2.2. Handlers

  • 本章节主要讲解对句柄的操作计数变量
2.2.1. Handler_commit
  • 内部提交语句的数量,对于insert语句,通常可能回有两个Handler_commit计数,但首次操作表会计数4次,对于其他DDL语句的操作,该计数器会增加数十次以上,所以,该计数器通常在TPS/QPS计算中略有偏差,特别是数据库实例刚运行不久的时候
2.2.2. Handler_read_first
  • 读取索引中第一条记录的次数。 如果此值很高,则表明服务器正在执行大量全索引扫描; 例如,SELECT col1 FROM foo语句,假设col1已建立索引。
2.2.3. Handler_read_key
  • 基于索引键读取行的请求数。 如果此值很高,这是一个很好的指示,代表你的查询使用到了适当的索引进行查询
2.2.4. Handler_read_last
  • 查询读索引最后一个索引键的请求数。当使用ORDER BY时,服务器优先发出使用第一个索引键的请求,之后顺序往后扫描索引键。当使用ORDER BY DESC时,服务器优先发出使用最后一个索引键的请求, 之后向前扫描索引键。 这个变量在MySQL 5.6.1中添加
2.2.5. Handler_read_next
  • 以索引键顺序读取下一行的请求数。 如果查询带有范围约束且使用到了索引列或者正在执行索引扫描,则此值将增加。
2.2.6. Handler_read_rnd
  • 基于固定位置读取行的请求数。 如果您正在执行大量需要对结果排序的查询,那么此值很高。 你可能有很多查询需要MySQL扫描整个表,或者有不能正确使用索引键来进行排序的查询
2.2.7. Handler_read_rnd_next
  • 读取数据文件中下一行的请求数。 如果您正在进行大量表扫描,则此值很高。 通常,这表明表中没有创建合适的索引,或者查询语句编写有问题(不满足查询优化器使用索引的要求)而导致没有正确利用到已有的索引
2.2.8. Handler_delete
  • 从表中删除的数据行数,注意,不是SQL语句执行次数(不需要事务提交)
2.2.9. Handler_discover
  • 在使用NDBCLUSTER的场景中,MySQL Server在接收到给定表的请求时,询问NDBCLUSTER是否知道该表,该过程被称作discovery,该变量就表示使用该机制发现表的次数
2.2.10. Handler_external_lock
  • 服务器在每次调用external_lock()函数的时候递增此变量,该函数通常在开始访问一个表和访问结束关闭表的时候各自调用一次(即,对一个表访问一次,该变量会增加2),该变量在不同的存储引擎之间可能存在差异, 例如:如果是分区表,则每个分区表自身会加2,然后每个被访问到的分区表都会各自加2,即要计算一个分区表被锁定的分区数量,可以先减去2,然后再除以2就得到了被锁定分区表的数量
2.2.11. Handler_mrr_init
  • MySQL Server使用InnoDB存储引擎的MRR(多范围读)来进行表访问的次数
2.2.12. Handler_prepare
  • 两阶段提交中prepare阶段的执行次数,每个DDL语句修改表结构该状态变量会增加4,每个DML修改数据该状态变量会增加2
2.2.13. Handler_read_prev
  • 按照索引顺序读取前一行的请求数,该读取数据的方法主要用于优化 ORDER BY ... DESC语句,即,使用了ORDER BY ... DESC语句查询的每一行数据,都会增加该状态变量一次
2.2.14. Handler_rollback
  • 存储引擎请求执行回滚操作的次数,对于使用rollback语句显式回滚的操作,状态变量每次加1,如果是超时或者死锁自动回滚,每个语句状态变量加2
2.2.15. Handler_savepoint
  • 存储引擎使用savepoint savepoint_name;语句设置保存点的请求数,每执行一次savepoint语句该状态变量会增加2
2.2.16. Handler_savepoint_rollback
  • 存储引擎使用rollback to savepoint_name;语句回滚到某个指定保存点的请求数,每执行一次rollback to savepoint_name语句该状态变量会增加2
2.2.17. Handler_update
  • 更新表中的行记录的请求次数,对于表中真实修改的每一行记录,该状态变量都会加1(不需要事务提交),注意:匹配到但未真实修改的行记录不会增加该状态变量值
2.2.18. Handler_write
  • 插入表中的行记录的请求数,对于插入表中的每一行记录,该状态变量都会加1(不需要事务提交)

2.3. locks

2.3.1. Innodb_row_lock_current_waits
  • 在InnoDB表上的操作当前正在等待的行锁的数量
2.3.2. Table_locks_immediate
  • 可以立即授予表级锁请求的次数,如果你使用的是myisam,memory这种表级别锁的引擎,那么这个值增加时需要关注这个值,否则如果你使用的是Innodb表,那么很可能是应用层显式锁表了
2.3.3. Table_locks_waited
  • 无法立即授予表级锁请求并需要等待的次数。 如果这个值比较高,代表可能有性能问题(注意:如果是myisam表,并发写的时候可能急剧增加,如果是innodb,那么这个值就应该很小,如果也很大,说明应用层锁表了,或者其他地方显式对innodb加表锁了),应该首先优化您的查询,然后拆分大表(或者把频繁查询的字段按照业务类型进行拆分)或使用复制架构做读写分离。
2.3.4. Innodb_row_lock_time
  • Innodb表等待获取行锁的总时间开销,单位毫秒,注意:需要事务结束的时候才会对事务的行锁请求等待时间进行计算
2.3.5. Innodb_row_lock_time_avg
  • Innodb表等待获取行锁的平均时间开销,单位毫秒,注意:事务开始请求锁和事务结束的时候都会对事务的行锁请求等待时间进行计算
2.3.6. Innodb_row_lock_time_max
  • Innodb表等待获取行锁的最大时间开销,单位毫秒,注意:需要事务结束的时候才会对行锁请求的等待事件进行计算,如果有事务行锁请求的时间大于当前值,则会进行更新
2.3.7. Innodb_row_lock_waits
  • Innodb表行锁等待的操作次数,事务请求锁时出现锁等待即状态变量加1

2.4. innodb buffer pool

2.4.1. Innodb_buffer_pool_pages_dirty
  • InnoDB缓冲池中当前的脏页数量,与fulsh list对应。当使用压缩表时,脏页数量可能会增多,可能导致最终使用该状态变量的值统计buffer pool中的总页数时超过Innodb_buffer_pool_pages_total状态变量的值
2.4.2. Innodb_buffer_pool_pages_free
  • InnoDB缓冲池中的可用页数量(空闲页数量),与free list对应
2.4.3. Innodb_buffer_pool_pages_data
  • InnoDB缓冲池中的包含数据的页数量。与lru list对应(注意:lru list也包含了dirty page), 该数字包括脏页和干净页(脏页就是在在buffer pool中被修改过的页,干净页就是在buffer pool中没有发生过修改的页)。 当使用压缩表时,Innodb_buffer_pool_pages_data值可能大于Innodb_buffer_pool_pages_total(bug#59550)
2.4.4. innodb_buffer_pool_reads
  • 表示从物理磁盘读取页的次数(InnoDB无法从缓冲池中满足逻辑读取时,直接从磁盘读取页的次数),当一次IO请求涉及到多个页时,会累加计算
2.4.5. innodb_buffer_pool_read_requests
  • Innodb逻辑读次数(从buffer pool中读取数据的次数),这个是衡量系统压力的重要指标,也是SQL调优最精准的参照。与Innodb physical reads对比可以得到buffer pool的命中率
2.4.6. Innodb_buffer_pool_write_requests
  • Innodb 写入数据文件,请求的页数量,当一次IO请求涉及到多个页时,会累加计算(注意是对InnoDB缓冲池执行的写入数,即逻辑写),physical reads和physical writes可以估算应用的读写比例
2.4.7. Innodb_buffer_pool_pages_flushed
  • innodb缓存池中刷新页请求的数目
2.4.7. Innodb_buffer_pool_wait_free
  • 当InnoDB后台线程需要读取一个页到内存中或需要创建一个页且没有可用的空闲页(clean page)时,InnoDB首先刷新一些脏页到磁盘,并等待该操作完成, 此状态变量即计数这些等待, 正常情况下,如果innodb_buffer_pool_size设置够大,那么此值应很小,如果不为0且在持续增加,说明当前ibp(innodb_buffer_pool_size)严重不足,需要加大ibp
2.4.8. Innodb_buffer_pool_dump_status
  • 设置了系统变量innodb_buffer_pool_dump_at_shutdown=1或innodb_buffer_pool_dump_now=1时,会触发导出InnoDB缓冲池中保存的页面的操作的过程(即触发导出buffer pool中的热点数据页列表到datadir下的ib_buffer_pool文件中),该状态变量即统计整个导出过程的进度信息(总共需要导出多少个页,当前导出了多少个页等,导出完成时显示完成时间戳)
2.4.9. Innodb_buffer_pool_load_status
  • 加载更早的时间对innodb buffer pool中导出的热点数据也列表文件ib_buffer_pool时的进度状态信息(总共需要导入多少个页,当前导入了多少个页等,导入完成时显示完成时间戳)。该操作由innodb_buffer_pool_load_at_startup=1或innodb_buffer_pool_load_load_now=1系统变量的设置触发。如果导入热点数据页操作开销太高(磁盘读IO),可以通过设置innodb_buffer_pool_load_abort=1来终止热点数据页的导入过程
2.4.10. Innodb_buffer_pool_resize_status
  • 动态设置innodb_buffer_pool_size系统参数可以触发动态调整InnoDB缓冲池大小,该状态变量显示动态调整buffer pool size大小操作的状态(进度信息)
2.4.11. Innodb_buffer_pool_bytes_data
  • InnoDB缓冲池中包含数据的页的字节总数。其中包括脏页和干净的页。对于Innodb_buffer_pool_pages_data状态变量来说,Innodb_buffer_pool_bytes_data状态变量统计内存使用量更精确,详见Innodb_buffer_pool_pages_data状态变量解释部分
2.4.12. Innodb_buffer_pool_bytes_dirty
  • InnoDB缓冲池中脏页数据字节总数。相对于Innodb_buffer_pool_pages_dirty状态变量来说,Innodb_buffer_pool_bytes_dirty状态变量对于内存使用统计更精确,详见Innodb_buffer_pool_pages_dirty状态变量解释部分
2.4.13. Innodb_buffer_pool_pages_misc
  • InnoDB缓冲池中为了管理资源分配而维护的页数量(如行锁或自适应哈希索引页等)。这个值可以通过公式 Innodb_buffer_pool_pages_total − Innodb_buffer_pool_pages_free − Innodb_buffer_pool_pages_data = Innodb_buffer_pool_pages_misc 来进行计算。但当使用压缩表时,Innodb_buffer_pool_pages_misc 状态变量可能会显示一个巨大的溢出值。
2.4.14. Innodb_buffer_pool_pages_total
  • InnoDB缓冲池的总页数量。当使用压缩表时,Innodb_buffer_pool_pages_data 状态变量可能显示一个巨大的溢出值
2.4.15. Innodb_buffer_pool_read_ahead_rnd
  • InnoDB发起的“随机”预读的次数。 当查询以随机扫描访问表中的大部分数据时,会发生预读操作。
2.4.16. Innodb_buffer_pool_read_ahead
  • 预读后台线程读入InnoDB缓冲池的页数
2.4.17. Innodb_buffer_pool_read_ahead_evicted
  • 由预读后台线程读入InnoDB缓冲池中的且因为一定时间内没有被访问而被驱逐出innodb buffer pool中的页数量
2.4.18. Innodb_page_size
  • InnoDB页大小(默认为16KB)。许多状态变量的值都是以页为单位进行计算,使用页大小来计算字节数等
2.4.19. Innodb_pages_created
  • 在InnoDB表中创建的页数量,需要物理扩展表空间文件大小

2.5. innodb data io

2.5.1. innodb_data_read
  • innodb存储引擎读数据文件的IO流量(字节为单位)
2.5.2. innodb_data_reads
  • innodb数据读取的总IO次数(OS文件读取,即发起物理读取的IO请求次数,每次读取可能需要读取多个页,但并不会每个页累加这个值)
2.5.3. Innodb_data_writes
  • innodb数据写入的总IO次数(OS文件写入,即发起物理写入的IO请求次数,每次写入可能需要写入多个页,但并不会每个页累加这个值)
2.5.4. Innodb_data_written
  • innodb存储引擎写数据文件的IO流量(字节为单位)
2.5.5. Innodb_pages_written
  • 通过操作InnoDB表引起的数据写入涵盖的页数,即向InnoDB表中写入的页数
2.5.6. Innodb_pages_read
  • 通过操作InnoDB表引起的从InnoDB缓冲池读取数据涵盖的页数,即,在对表执行读取操作时,直接从innodb buffer pool中读取返回数据的页数
2.5.7. Innodb_data_fsyncs
  • 刷新数据文件的fsync()系统调用的次数,fsync()系统调用频率受innodb_flush_method参数设置影响
2.5.8. Innodb_data_pending_fsyncs
  • 当前挂起(等待处理)的fsync()操作数量。fsync()调用的频率会受innodb_flush_method配置选项设置的影响
2.5.9. Innodb_data_pending_reads
  • 当前挂起(等待处理)的读请求数量
2.5.10. Innodb_data_pending_writes
  • 当前挂起(等待处理)的写请求数量
2.5.11. Innodb_dblwr_pages_written
  • 已经写入到双写缓冲中的页数
2.5.12. Innodb_dblwr_writes
  • 已经执行完成的doublewrite写操作的次数

2.6. innodb rows

2.6.1. innodb_rows_deleted
  • 从innodb表删除的行数,通过计算每秒的差值,可以衡量Innodb每秒删除行能力(不需要事务提交)
2.6.2. innodb_rows_inserted
  • 在innodb表插入的行数,通过计算每秒的差值,可以衡量Innodb每秒插入行能力(不需要事务提交)
2.6.3. innodb_rows_read
  • 从innodb表读取的行数,通过计算每秒的差值,可以衡量Innodb每秒读取能力。如果这个值比较大请检查select的相关指标
2.6.4. innodb_rows_updated
  • 在innodb表更新的行数,通过计算每秒的差值,可以衡量Innodb每秒更新行能力(不需要事务提交)

2.7. threads,client connection

2.7.1. threads_running
  • 当前正处于激活状态的线程个数(MySQL内部正在干活的线程个数),代表MySQL并发用户活动会话数量,在系统负载很大时,SQL持续时间会增加,这个指标会上升
2.7.2. threads_connected
  • MySQL当前已连接的线程的个数(包含MySQL内部正在干活的线程数以及处于sleep状态的线程数)
2.7.3. Threads_created
  • 为处理新的连接而新创建的线程数。 如果Threads_created比较大,可能要增加thread_cache_size值, 线程缓存命中率可以使用公式:Threads_created / Connections计算,用该比例值可以衡量thread_cache_size参数的设置是否合理,该值越接近1,说明线程cache的命中率越低,就应该考虑增加thread_cache_size这个参数的值
2.7.4. Connections
  • 尝试连接MySQL的次数,包括成功的与不成功的连接数
2.7.5. Aborted_clients
2.7.6. Aborted_connects
2.7.8. Connection_errors_accept
  • MySQL Server在侦听端口上调用accept()函数期间发生的错误数量
2.7.9. Connection_errors_internal
  • 由于MySQL Server内部错误导致连接被拒绝的数量,例如:无法启动新线程或内存不足时导致的连接创建失败会增加该状态变量的值
2.7.10. Connection_errors_max_connections
  • 由于客户端连接数达到了系统变量max_connections的限制阈值而被拒绝的连接数
2.7.11. Connection_errors_peer_address
  • 搜索连接客户端IP地址时发生的错误数
2.7.12. Connection_errors_select
  • 在侦听端口上调用select()或poll()函数期间发生的错误数。(注意:此调用操作失败并不是客户端连接被拒绝)
2.7.13. Connection_errors_tcpwrap
  • 由libwrap库拒绝的连接数
2.7.14. Slow_launch_threads
  • 创建线程的时间超过slow_launch_time系统变量设置值的线程数,此状态变量在嵌入式Server(libmysqld)中没有意义,从MySQL 5.7.2版本开始在嵌入式Server中该状态变量不再可见
2.7.15. Threads_cached

2.8. innodb log io

2.8.1. Innodb_log_writes
  • Innodb redo日志写次数,指的是对InnoDB重做日志文件的物理写入次数(注意,这里不是指的操作系统层的fsync redo log文件次数,而是mysql层面的对redo log的写入次数)
2.8.2. Innodb_os_log_fsyncs
  • Innodb redo 日志文件在操作系统层面的fsync()次数。该指标数量主要与innodb_flush_log_at_trx_commit设置值有关
2.8.3. Innodb_log_waits
  • innodb redo log写发生的等待次数,可能因为日志缓冲区太小,导致写redo log buffer时需要等待,如果这个大于0,就表示innodb_log_buffer不够用了,需要加大
2.8.4. Innodb_os_log_written
  • innodb存储引擎写redo log的IO流量(字节为单位)
2.8.5. Innodb_log_write_requests
  • InnoDB redo log写请求数量
2.8.6. Innodb_os_log_pending_fsyncs
  • InnoDB重做日志文件的fsync()调用挂起(等待处理)次数
2.8.7. Innodb_os_log_pending_writes
  • InnoDB重做日志文件写入操作被挂起(等待处理)操作次数

2.9. queries,response time

2.9.1. Queries
  • 服务器执行的语句数。此变量包括在存储过程和函数中执行的语句,与Questions变量不同。 它不计算COM_PING或COM_STATISTICS命令
    • SUM(Com_xxx) + Qcache_hits = Questions + statements executed within stored programs = Queries
2.9.2. Questions
  • 服务器执行的语句数。 仅包括由客户端发送到服务器的语句,而不包括在存储过程和存储函数中执行的语句,这与Queries变量不同。 此变量不计算COM_PING,COM_STATISTICS,COM_STMT_PREPARE,COM_STMT_CLOSE或COM_STMT_RESET命令
    • qps计算:questions / uptime 或者基于com_%计算:Com_select/s + Com_insert/s + Com_update/s + Com_delete/s
2.9.2. Com_commit
  • MySQL提交的事务数量
    • Com_xxx类的语句状态变量指示每个xxx类别语句已执行的次数。 每种类型的语句都有一个状态变量。 例如,Com_delete和Com_update分别计数DELETE和UPDATE语句。 Com_delete_multi和Com_update_multi类似,但适用于使用多表语法的DELETE和UPDATE语句,如果从查询缓存中返回查询结果,则服务器将增加Qcache_hits状态变量,而不是Com_select(不开启查询缓存则忽略Qcache_hits)
  • tps的计算:Com_commit/S+Com_rollback/S(这种计算方式中有一些版本可能不能统计隐式提交的事务数),或者(Handler_commit + Handler_rollback)/Uptime
2.9.3. Com_rollback
  • MySQL回滚的事务数量
2.9.4. Slow_queries
  • MySQL产生的慢查条数,查询时间超过long_query_time秒的查询的个数(只要查询时间超过了long_query_time参数该状态变量就会增加,不管慢查询日志记录功能是否开启),正常的话慢查时间设置为1秒,该值应该小于1
2.9.5. Com_delete
  • delete语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功
2.9.5. Com_delete_multi
  • 多表关联的delete语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功
2.9.5. Com_insert
  • insert语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功
2.9.5. Com_insert_select
  • insert...select 语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功
2.9.5. Com_replace
  • replace 语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功
2.9.5. Com_replace_select
  • replace...select 语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功
2.9.5. Com_select
  • select 语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功,如果开启了查询缓存,则直接从查询缓存返回,该变量计数不增加,而是增加Qcache_hits的计数
2.9.5. Com_update
  • update 语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功
2.9.5. Com_update_multi
  • 多表关联的update 语句执行的次数,注意,只是记录语句执行次数,不管语句是否执行成功

2.10. select

2.10.1. Select_scan
  • 单表查询或者join的第一个表使用全表扫描方式的select查询数量。该值应该小于5。如果该指标数量比较多,说明表中没有合适的索引或者索引设计不合理导致查询无法正确使用,建议添加索引或检查索引创建是否符合mysql查询优化器使用索引的规则,或者看看你的查询语句是否编写有问题
2.10.2. Select_range
  • 单表查询或者join的第一个表使用索引范围扫描方式的select查询数量,该值正常情况下变得比较大也问题不大
2.10.3. Select_full_join
  • join查询中被驱动表使用全表扫描(被驱动表不能使用索引)的select查询数量。该值应该小于5。如果该指标数量比较多,建议添加索引或者检查索引创建是否符合mysql查询优化器使用索引的规则,或者看看你的查询语句是否编写有问题
2.10.4. Select_range_check
  • join查询中关联字段没有索引,导致在join查询中被驱动表每次都需要检查是否可以使用索引范围扫描的select查询数量,如果此值不为0,则应仔细检查表的索引
2.10.5. Select_full_range_join
  • join查询中被驱动表使用索引范围扫描的select查询数量

2.11. 排序

2.11.1. Sort_rows
  • MySQL排序的行数.衡量SQL排序效率.如果这个值比较大请检查sort相关指标
2.11.2. Sort_scan
  • 使用全表扫描来进行排序的select次数。该指标数量较多建议增加索引,以使排序使用索引
2.11.3. Sort_range
  • 使用索引范围扫描来进行排序的select次数
2.11.4. Sort_merge_passes
  • 排序算法已经执行的合并的次数。如果这个变量值较大,应考虑增加sort_buffer_size、max_length_for_sort_data或max_sort_length相关系统变量的值。 调大一点

2.12. 网络流量

2.12.1. Bytes_sent
  • MySQL发送给所有客户端的网络流量字节数,结合bytes received,可以作为数据库网卡吞吐量的评测指标,单位字节
2.12.2. Bytes_received
  • MySQL从所有客户端接收的网络流量字节数,结合bytes sent, 可以作为数据库网卡吞吐量的评测指标,单位字节

2.13. binlog, binlog cache

2.13.1. Binlog_cache_disk_use
  • 使用临时的二进制日志高速缓存保存事务语句变更数据时大小超过了binlog_cache_size值,导致使用到临时文件来保存事务语句变更数据的事务数量,如果是非事务的语句产生的binlog日志量超过了binlog_cache_size值,则会增加Binlog_stmt_cache_disk_use状态变量额值,表示非事务语句使用到binlog磁盘临时文件的语句数量
2.13.2. Binlog_cache_use
  • 事务语句在写binlog日志时使用到二进制日志高速缓存的事务数量
2.13.3. Binlog_stmt_cache_disk_use
  • 非事务语句写binlog日志时,由于超过了binlog_cache_size值导致使用到了临时文件存储这些日志数据的语句数量
2.13.4. Binlog_stmt_cache_use
  • 非事务语句写binlog日志时使用到二进制日志语句高速缓存的非事务性语句的数量
2.13.5. Com_binlog
  • 执行binlog语句的次数,binlog语句用于执行base64编码的binlog日志(解析二进制日志中的BINLOG 'xxx';这个就是),可以用于判断在当前实例中是否有通过解析二进制日志来补偿数据的行为。通常不需要关注
2.13.6. Com_show_binlog_events
  • 执行show binlog events in 'binlog_file' 语句的次数
2.13.7. Com_show_binlogs
  • 执行show binary logs语句的次数

2.14. replication , slave

2.14.1. Slave_open_temp_tables
2.14.2. Com_change_db
  • 执行use db_name;切换默认数据库的语句执行的次数
2.14.3. Com_change_master
  • 执行change master;配置或修改复制信息的语句执行的次数
2.14.4. Com_change_repl_filter
  • 该变量表示执行修改复制过滤规则语句(CHANGE REPLICATION FILTER)的次数
2.14.5. Com_slave_start
  • 执行start slave;语句的次数
2.14.6. Com_slave_stop
  • 执行stop slave;语句的次数

2.15. ddl sql

2.15.1. Com_alter_db
  • 执行ALTER {DATABASE | SCHEMA} [db_name]语句的次数(不带UPGRADE子句)
2.15.2. Com_alter_db_upgrade
  • 执行ALTER {DATABASE | SCHEMA} db_name UPGRADE DATA DIRECTORY NAME语句的次数
2.15.3. Com_alter_event
  • 执行alter event语句的次数
2.15.4. Com_alter_function
  • 执行alter function语句的次数
2.15.5. Com_alter_instance
  • 执行alter instance语句的次数,instance和表空间加密相关
2.15.6. Com_alter_procedure
  • 执行alter procedure语句的次数
2.15.7. Com_alter_server
  • 执行ALTER SERVER server_name OPTIONS (option [, option] ...)语句的次数
2.15.8. Com_alter_table
  • 执行alter table..语句的次数
2.15.9. Com_alter_tablespace
  • 执行ALTER TABLESPACE tablespace_name... 语句的次数
2.15.10. Com_alter_user
  • 执行ALTER USER [IF EXISTS]... 语句的次数
2.15.11. Com_create_db
  • 执行create database语句的次数
2.15.12. Com_create_event
  • 执行create event语句的次数
2.15.13. Com_create_function
  • 执行create function语句的次数
2.15.14. Com_create_index
  • 执行CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ... 语句的次数
2.15.15. Com_create_procedure
  • 执行create procedure...语句的次数
2.15.16. Com_create_server
  • 执行create server... 语句的次数
2.15.17. Com_create_table
  • 执行create table..语句的次数
2.15.18. Com_create_trigger
  • 执行create trigger... 语句的次数
2.15.19. Com_create_udf
  • 执行CREATE [AGGREGATE] FUNCTION function_nameRETURNS {STRING|INTEGER|REAL|DECIMAL} SONAME shared_library_name 语句的次数,即创建用户自定义函数语句的次数,用户自定义函数需要从plugin dir目录下的库文件加载,需要用户有mysql.func表的INSERT权限
2.15.20. Com_create_user
  • 执行create user... 语句的次数
2.15.21. Com_create_view
  • 执行create view... 语句的次数
2.15.22. Com_drop_db
  • 执行drop database..语句的次数
2.15.23. Com_drop_event
  • 执行drop event...语句的次数
2.15.24. Com_drop_function
  • 执行drop function... 语句的次数
2.15.25. Com_drop_index
  • 执行drop index... 语句的次数
2.15.26. Com_drop_procedure
  • 执行drop procedure... 语句的次数
2.15.27. Com_drop_server
  • 执行drop server... 语句的次数
2.15.28 Com_drop_table
  • 执行drop table... 语句的次数
2.15.29. Com_drop_trigger
  • 执行drop trigger... 语句的次数
2.15.30. Com_drop_user
  • 执行driop user... 语句的次数
2.15.31. Com_drop_view
  • 执行driop view.. 语句的次数

2.16. admin sql

2.16.1. Com_analyze
  • 执行ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ... 语句的次数
2.16.2. Com_check
  • 执行CHECK TABLE tbl_name [, tbl_name] ... [option].. 语句的次数
2.16.3. Com_install_plugin
  • 执行INSTALL PLUGIN plugin_name SONAME 'shared_library_name' 语句的次数
2.16.4. Com_kill
  • 执行KILL [CONNECTION | QUERY] processlist_id.. 语句的次数
2.16.5. Com_load
  • 执行 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' .. 语句的次数
2.16.6. Com_purge
  • 执行PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }语句的次数(不包含BEFORE datetime_expr 子句)
2.16.7. Com_purge_before_date
  • 执行PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }语句的次数(不包含TO 'log_name'子句)
2.16.8. Com_release_savepoint
  • 执行RELEASE SAVEPOINT identifier语句的次数
2.16.9. Com_rename_table
  • 执行RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2]... 语句的次数
2.16.10. Com_rename_user
  • 执行RENAME USER old_user TO new_user [, old_user TO new_user]... 语句的次数
2.16.11. Com_repair
  • 执行REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...语句的次数
2.16.12. Com_revoke
  • 执行 REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ... 语句的次数(不包含GRANT OPTION权限回收的revoke语句)
2.16.13. Com_revoke_all
  • 执行REVOKE ALL PRIVILEGES, GRANT OPTION FROM user... 语句的次数(一次性回收包含GRANT OPTION权限的所有权限的revoke语句)
2.16.14. Com_reset
  • 执行reset query cache; reset slave [all] ; reset master; 语句的次数
2.16.15. Com_resignal
  • 执行RESIGNAL [condition_value] [SET signal_information_item [, signal_information_item] ...] 修改MySQL 错误的语句次数
2.16.16. Com_flush
  • 已执行了多少次FLUSH语句,所有flush语句的子句都会统计
2.16.17. Com_get_diagnostics
2.16.18. Com_grant
  • 执行grant授权语句的次数
2.16.19. Com_optimize
  • 执行OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] 语句的次数
2.16.20. Com_shutdown
  • 执行shutdown语句的次数,执行shutdown语句需要有shutdown权限,在MySQL 5.7.9引入了该命令的SQL命令行接口级别的功能,和mysqladmin命令的的shutdown子句一样,用于关闭MySQL Server
2.16.21. Com_truncate
  • 执行 TRUNCATE [TABLE] tbl_name 语句的次数
2.16.22. Com_uninstall_plugin
  • 执行UNINSTALL PLUGIN plugin_name 语句的次数
2.16.23. Com_set_option
  • 执行set语句的次数 ,例如:set @x=1; 、 set sql_log_bin=1;
2.16.24. Com_signal
  • 执行 SIGNAL condition_value [SET signal_information_item [, signal_information_item] ...] 语句的次数(该语句可以根据需要在语句或存储过程中设置错误号打印洗没洗)
2.16.25. Flush_commands
  • MySQL Server执行刷新表的次数,用户手工执行FLUSH TABLES语句和Server内部执行刷新表操作都会增加该状态变量的值,另外 ,MySQL Server接收COM_REFRESH数据包时该状态变量也会递增
2.16.26. Com_do
  • 执行DO expr [, expr] ...语句的次数,do语句与select语句类似,也可以执行语句,但是do语句不返回结果信息(注:do语句只能在执行一些函数的时候,如果不需要返回结果,就可以使用do语句来代替select)
2.16.27. Compression
  • 客户端连接Server端时是否使用压缩

2.17. transaction

2.17.1. Com_begin
  • 执行begin;语句的次数,这里是指的是标记事务开始的begin,而不是存储过程或函数中的begin语句
2.17.2. Com_rollback_to_savepoint
  • 执行rollback to savepoint_name;语句的次数
2.17.3. Com_savepoint
  • 执行SAVEPOINT identifier... 语句的次数
2.17.4. Com_stmt_execute
  • 执行execute语句的次数,该变量统计语句执行次数(语句格式:EXECUTE stmt_name[USING @var_name [, @var_name] ...]),而不管语句是否执行成功,该变量对应旧的状态统计变量Com_execute_sql
2.17.5. Com_stmt_close
  • 关闭prepare语句的次数,该变量统计语句执行次数(语句格式:{DEALLOCATE | DROP} PREPARE stmt_name),而不管语句是否执行成功,该变量对应旧的状态统计变量Com_dealloc_sql
2.17.6. Com_stmt_fetch
  • 表示使用prepare语句时,从游标获取数据的次数,该变量统计语句执行次数,而不管语句是否执行成功
2.17.7. Com_stmt_prepare
  • 执行prepare语句的次数,该变量统计语句执行次数(语句格式:PREPARE stmt_name FROM preparable_stmt),而不管语句是否执行成功,该变量对应旧的状态统计变量Com_prepare_sql
2.17.8. Com_stmt_reprepare
  • 该变量表示在对prepare语句引用的表或视图的元数据更改后,服务器自动重新预编译prepare语句的次数。reprepare操作同时增加Com_stmt_reprepare和Com_stmt_prepare状态变量值
2.17.9. Com_xa_commit
  • 执行XA COMMIT xid [ONE PHASE]...语句的次数
2.17.10. Com_xa_end
  • 执行XA END xid [SUSPEND [FOR MIGRATE]]... 语句的次数
2.17.11. Com_xa_prepare
  • 执行XA PREPARE xid... 语句的次数
2.17.12. Com_xa_recover
  • 执行 XA RECOVER [CONVERT XID]... 语句的次数
2.17.13. Com_xa_rollback
  • 执行 XA ROLLBACK xid... 语句的次数
2.17.14. Com_xa_start
  • 执行XA {START|BEGIN} xid [JOIN|RESUME] ... 语句的次数

2.18. show sql

2.18.1. Com_show_charsets
  • 执行show charset; 或show character set like '%%'; 语句的次数
2.18.2. Com_show_collations
  • 执行SHOW COLLATION [LIKE 'pattern' | WHERE expr]... 语句的次数
2.18.3. Com_show_create_db
  • 执行SHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name... 语句的次数
2.18.4. Com_show_create_event
  • 执行SHOW CREATE EVENT event_name 语句的次数
2.18.5. Com_show_create_func
  • 执行SHOW CREATE FUNCTION func_name 语句的次数
2.18.6. Com_show_create_proc
  • 执行SHOW CREATE PROCEDURE proc_name.. 语句的次数
2.18.7. Com_show_create_table
  • 执行SHOW CREATE TABLE tbl_name 语句的次数
2.18.8. Com_show_create_trigger
  • 执行SHOW CREATE TRIGGER trigger_name 语句的次数
2.18.9. Com_show_databases
  • 执行SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]... 语句的次数
2.18.10. Com_show_engine_logs
  • 执行show engine engine_name logs语句的次数
2.18.11. Com_show_engine_mutex
  • 执行show engine engine_name mutex语句的次数
2.18.12. Com_show_engine_status
  • 执行show engine engine_name status语句的次数
2.18.13. Com_show_events
  • 执行SHOW EVENTS [{FROM | IN} schema_name] [LIKE 'pattern' | WHERE expr]... 语句的次数
2.18.14. Com_show_errors
  • 执行SHOW ERRORS [LIMIT [offset,] row_count] 语句的次数
2.18.15. Com_show_fields
  • 执行SHOW [FULL] {COLUMNS | FIELDS} {FROM | IN} tbl_name [{FROM | IN} db_name [LIKE 'pattern' | WHERE expr] 语句的次数
2.18.16. Com_show_function_code
  • 执行SHOW FUNCTION CODE func_name 语句的次数,注意:需要MySQL Server使用--with-debug选项初始化
2.18.17. Com_show_function_status
  • 执行SHOW RUNCTION STATUS [like_or_where] 'function_name';语句的次数
2.18.18. Com_show_grants
  • 执行 SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER(); 语句的次数
2.18.19. Com_show_keys
  • 执行SHOW INDEX FROM tbl_name [FROM db_name] 语句的次数
2.18.20. Com_show_master_status
  • 执行 show master status;语句的次数
2.18.21. Com_show_open_tables
  • 执行SHOW OPEN TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] 语句的次数
2.18.22. Com_show_plugins
  • 执行 SHOW PLUGINS 语句的次数
2.18.23. Com_show_privileges
  • 执行 SHOW PRIVILEGES 语句的次数
2.18.24. Com_show_procedure_code
  • 执行SHOW PROCEDURE CODE proc_name 语句的次数,注意:需要MySQL Server使用--with-debug选项初始化
2.18.25. Com_show_procedure_status
  • 执行SHOW PROCEDURE STATUS [like_or_where] 'procedure_name';语句的次数
2.18.26. Com_show_processlist
  • 执行show processlist; 语句的次数
2.18.27. Com_show_profile
2.18.28. Com_show_profiles
  • 执行 SHOW PROFILES 语句的次数
2.18.29. Com_show_relaylog_events
  • 执行 SHOW RELAYLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count] 语句的次数
2.18.30. Com_show_slave_hosts
  • 执行 SHOW SLAVE HOSTS 语句的次数
2.18.31. Com_show_slave_status
  • 执行 SHOW SLAVE STATUS [FOR CHANNEL channel] 语句的次数
2.18.32. Com_show_status
  • 执行SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern' | WHERE expr] 语句的次数
2.18.33. Com_show_storage_engines
  • 执行 SHOW [STORAGE] ENGINES 语句的次数
2.18.34. Com_show_table_status
  • 执行 SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] 语句的次数
2.18.35. Com_show_tables
  • 执行SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] 语句的次数
2.18.36. Com_show_triggers
  • 执行 SHOW TRIGGERS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] 语句的次数
2.18.37. Com_show_variables
  • 执行 SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern' | WHERE expr] 语句的次数
2.18.38. Com_show_warnings
  • 执行 SHOW WARNINGS [LIMIT [offset,] row_count] 语句的次数
2.18.39. Com_show_create_user
  • 执行 SHOW CREATE USER user 语句的次数

2.19. performance_schema

  • 本小节状态变量含义请结合1.9小节的系统变量含义进行阅读
2.19.1. Performance_schema_accounts_lost
  • 由于访问Server的账号数量超过了在accounts表中的记录(记录数量超过performance_schema_accounts_size系统变量设置的值)而无法添加到该表中的记录数
2.19.2.Performance_schema_cond_classes_lost
  • 由于加载的条件对象采集器数量超过了系统变量performance_schema_max_cond_classes的值而无法加载的条件对象采集器数量
2.19.3.Performance_schema_cond_instances_lost
  • 由于创建的条件对象实例数量超过了系统变量performance_schema_max_cond_instances的值而无法创建的条件对象采集器数量
2.19.4.Performance_schema_digest_lost
  • 无法在events_statements_summary_by_digest表中写入的摘要信息的数量。 如果performance_schema_digests_size的值太小,则此值可能就不为零
2.19.5.Performance_schema_file_classes_lost
  • 由于加载的文件对象采集器数量超过了系统变量performance_schema_max_file_classes的值而无法加载的文件对象采集器数量
2.19.6.Performance_schema_file_handles_lost
  • 由于打开的文件对象实例数量超过了performance_schema_max_file_handles系统变量设置的值而无法打开的文件对象实例的数量 performance_schema_max_file_handles
2.19.7.Performance_schema_file_instances_lost
  • 由于创建的文件对象实例数量超过了performance_schema_max_file_instances 系统变量设置的值而无法创建的文件对象采集器的数量
2.19.8.Performance_schema_hosts_lost
  • 由于访问Server的主机数量超过了在hosts表中记录的数据行数(超过了performance_schema_hosts_size 系统变量设置的值)而无法添加到hosts表中的记录数
2.19.9.Performance_schema_index_stat_lost
  • 由于需要统计的索引数量超过了在表table_io_waits_summary_by_index_usage中的索引数量(超过了performance_schema_max_index_stat 系统变量的值)而导致丢失统计的索引数量(无法添加到table_io_waits_summary_by_index_usage表)
2.19.10.Performance_schema_memory_classes_lost
  • 由于加载的内存采集器数量超过了 performance_schema_max_memory_classes 系统变量设置的值而无法加载的内存采集器的数量
2.19.11.Performance_schema_metadata_lock_lost
  • 由于metadata_locks中记录的MDL锁数量超过了performance_schema_max_metadata_locks 系统变量设置的值而无法采集信息的MDL锁数量,如果performance_schema_max_metadata_locks设置太小,则会发现该状态变量可能不为0
2.19.12.Performance_schema_mutex_classes_lost
  • 由于加载的互斥对象采集器数量超过了performance_schema_max_mutex_classes 系统变量设置的值而无法加载的互斥对象采集器数量
2.19.13.Performance_schema_mutex_instances_lost
  • 由于创建的互斥对象实例超过了performance_schema_max_mutex_instances 系统变量设置的值而无法创建的互斥对象采集器的数量
2.19.14.Performance_schema_nested_statement_lost
  • 丢失统计信息的存储程序语句数。 如果performance_schema_max_statement_stack的值太小,则此状态变量值可能不为零
2.19.15.Performance_schema_prepared_statements_lost
  • 由于创建的prepare语句数量超过了prapareperformance_schema_max_prepared_statements_instances系统变量的值而无法在prepared_statements_instances表中记录的prepare语句数量,prapareperformance_schema_max_prepared_statements_instances系统变量设置太小可能导致该状态变量不为0
2.19.16.Performance_schema_program_lost
  • 丢失统计信息的存储程序数(注意与Performance_schema_nested_statement_lost状态变量区分,该状态变量统计丢失语句数量,而Performance_schema_program_lost统计的是丢失的存储程序数量)。 如果performance_schema_max_program_instances的值太小,则此值可能不为零
2.19.17.Performance_schema_rwlock_classes_lost
  • 由于加载的rwlock采集器数量超过了performance_schema_max_rwlock_classes 系统变量设置的值而无法加载的rwlock采集器的数量
2.19.18.Performance_schema_rwlock_instances_lost
  • 由于创建的rwlock实例数量超过了performance_schema_max_rwlock_instances 系统变量设置的值而无法创建的rwlock采集器的数量
2.19.19.Performance_schema_session_connect_attrs_lost
  • 连接属性被清除的连接数。对于给定连接,如果客户端发送的属性总大小大于performance_schema_session_connect_attrs_size系统变量值,则performance_schema会清理该连接的属性数据并递增Performance_schema_session_connect_attrs_lost状态变量值。如果该状态变量不为0,则您可能需要增大performance_schema_session_connect_attrs_size系统变量的值
2.19.20.Performance_schema_socket_classes_lost
  • 由于加载的socket采集器超过了performance_schema_max_socket_classes 系统变量的值而无法加载的socket采集器的数量
2.19.21.Performance_schema_socket_instances_lost
  • 由于创建的socket实例数量超过了performance_schema_max_socket_instances系统变量的值而无法监控的socket实例数量
2.19.22.Performance_schema_stage_classes_lost
  • 由于加载的阶段事件采集器的数量超过了performance_schema_max_stage_classes系统变量的值而无法加载的阶段事件采集器的数量
2.19.23.Performance_schema_statement_classes_lost
  • 由于加载的语句事件采集器的数量超过了performance_schema_max_statement_classes 系统变量的值而无法加载的语句事件采集器的数量
2.19.24.Performance_schema_table_handles_lost
  • 由于打开的表文件句数量超过了performance_schema_max_table_handles 系统变量的值而无法被监控的表句柄实例数量,如果performance_schema_max_table_handles系统变量设置太小可能导致该状态变量不为0
2.19.25.Performance_schema_table_instances_lost
  • 由于创建的表对象采集器实例超过了performance_schema_max_table_instances 系统变量设置的值而无法创建的表对象采集器实例的数量
2.19.26.Performance_schema_table_lock_stat_lost
  • 由于创建的表锁数量超过了performance_schema_max_table_lock_stat 系统变量设置的值而无法统计的表锁数量,如果performance_schema_max_table_lock_stat系统变量设置太小,可能导致该状态变量不为0
2.19.27.Performance_schema_thread_classes_lost
  • 由于加载的线程对象采集器数量超过了performance_schema_max_thread_classes 系统变量的值而无法加载的线程对象采集器的数量
2.19.28.Performance_schema_thread_instances_lost
  • 由于创建的线程实例数量超过了threads表中的最大监控数量(超过了performance_schema_max_thread_instances系统变量设置的值)而无法被添加到threads表进行监控的线程数量,如果performance_schema_max_thread_instances系统变量设置的太小可能导致该状态变量不为0
2.19.29.Performance_schema_users_lost
  • 由于访问Server的用户数量超过了users表的最大监控数量(超过了performance_schema_users_size系统变量的值)而无法被添加到users表进行监控的用户数量

2.20. other

2.20.1. Com_dealloc_sql
  • 与状态变量Com_stmt_close含义相同,该变量为旧的状态变量
2.20.2. Com_execute_sql
  • 与状态变量Com_stmt_execute含义相同,该变量为旧的状态变量
2.20.3. Com_explain_other
  • 表示EXPLAIN [options] FOR CONNECTION connection_id;语句执行的次数,例如:explain for connection 33; 33为执行select connection_id()查询返回的结果
2.20.4. Com_prepare_sql
  • 与状态变量Com_stmt_prepare 含义相同,该变量为旧的状态变量
2.20.5 Com_help
  • 执行 help 语句的次数
2.20.6. Com_preload_keys
  • 执行LOAD INDEX INTO CACHE tb_name ; 语句的次数,表示重新加载索引到key_buffer中,注意,该语句只支持MyISAM引擎
2.20.7. Com_checksum
  • 执行 CHECKSUM TABLE tb_name; 语句的次数
2.20.8. Com_call_procedure
  • 执行 CALL sp_name([parameter[,...]]) 语句调用存储过程的语句次数
2.20.9. Created_tmp_files
  • 表示mysqld进程创建了多少个临时文件
2.20.10. Delayed_errors
  • 表示延迟插入发生错误的次数,该变量即将废弃,在将来的版本中将会移除(因为后续版本会移除延迟插入功能)
2.20.11. Delayed_insert_threads
  • 表示延迟插入的线程数量,该变量即将废弃,在将来的版本中将会移除(因为后续版本会移除延迟插入功能)
2.20.12. Delayed_writes
  • 表示延迟插入的次数,该变量即将废弃,在将来的版本中将会移除(因为后续版本会移除延迟插入功能)
2.20.13. Innodb_num_open_files
  • InnoDB引擎当前打开的文件数量,注意:并不是表数量,也不是正在使用的表数量,打开文件数包含所有可能使用到的磁盘文件,例如:共享表空间,undo,redo,表空间文件等
2.20.14. Innodb_truncated_status_writes
  • show engine innodb status;语句输出信息过长被截断的次数(默认输出长度限制为1MB)
2.20.15. Innodb_available_undo_logs
  • InnoDB可用的回滚段总数,该总数还跟系统变量innodb_rollback_segments的设置有关(5.6.3版本之后该系统变量变更为innodb_undo_logs),MySQL 5.7引入临时表空间文件之后,使用独立Undo的时候,共享表空间中保留了1个undo段用于支持在线回收undo log,临时表空间中保留32个Undo段分配给临时表使用,所以Innodb_available_undo_logs状态变量输出的值不会小于>=33,但<=128(innodb_undo_logs取值范围为0-128)
    • 该状态变量从MySQL 5.7.19 开始弃用,将在以后的版本中删除。
2.20.16. Key_blocks_not_flushed
  • 在MyISAM 引擎中,已经修改的键缓存块但还未刷新到磁盘的键缓存块数量
2.20.17. Key_blocks_unused
  • MyISAM 的键缓存中未使用的块数量,你可以使用该状态变量的值来确定当前有多少未使用的键缓存
  • 详见 1.1.48 中key_buffer_size系统变量介绍
2.20.18. Key_blocks_used
  • MyISAM键缓存中已使用块的数量,此值是一个高水位标记,表示使用过的最大块数量
2.20.19. Key_read_requests
  • 从MyISAM 键缓存中读取索引块的请求数
2.20.20. Key_reads
  • 从磁盘物理读取索引块并写入到MyISAM 键缓存中个的次数。 如果Key_reads很大,那么key_buffer_size系统变量的值可能太小了。使用公式:Key_reads/Key_read_requests 可以计算MyISAM 键缓存的命中率
2.20.21. Key_write_requests
  • 将索引块写入到MyISAM 键缓存中的请求数
2.20.22. Key_writes
  • 将索引块从MyISAM 键缓存中写入到磁盘的物理写的请求数
2.20.23. Last_query_cost
  • 查询优化器计算的查询的总开销成本。可用于比较同一查询在不同查询计划下的成本开销。默认值为0,表示当前会话未执行过任何查询(Last_query_cost为会话级别状态变量),注意:这里指的是查询表数据形式的查询,不是show语句
    • Last_query_cost值只能为简单查询提供成本开销的精确计算,不能对复杂的查询进行计算成本开销,例如:带有子查询或UNION子句的查询,对于复杂查询,该状态变量为0
2.20.24. Last_query_partial_plans
  • 查询优化器在查询语句真正执行之前,在执行计划构造中进行的迭代次数。 给状态变量为会话级别变量
2.20.25. Locked_connects
2.20.26. Max_execution_time_exceeded
  • 执行时间超时(超过max_execution_time系统变量设置的值--秒数)的select语句数量
2.20.27. Max_execution_time_set
  • 当设置了max_execution_time为非零值时,或者使用了MAX_EXECUTION_TIME(指定了非零值)优化器提示的语句的select语句中,执行时间超过了设定的时间的语句数量
2.20.28. Max_execution_time_set_failed
  • 尝试设置一个超时时间失败的语句数量
2.20.29. Max_used_connections
  • 自服务器启动以来的最大并发连接数
2.20.30. Max_used_connections_time
  • Max_used_connections 状态变量当前值的更新时间,即,Max_used_connections 状态变量是什么时候达到最高值的
2.20.31. Not_flushed_delayed_rows
  • 延迟插入相关的状态变量,已废弃,因为延迟插入功能已经废弃
2.20.32. Ongoing_anonymous_transaction_count
  • 显示已标记为匿名的正在进行的匿名事务的数量。 这可用于查看确保没有匿名事务等待处理(在MySQL 5.7 版本之后的GTID 在线切换时需要用于查看确保无匿名事务需要处理)
2.20.33. Open_files
  • MySQL Server层打开的文件数。包括MySQL Server层打开的常规文件,但不包括其他类型的文件(如套接字或管道)。另外,它也不包括存储引擎使用自己的内部功能打开的文件,这些文件由存储引擎自己进行统计
2.20.34. Open_streams
  • 打开的日志流的数量,主要用于日志记录
2.20.35. Open_table_definitions
  • 当前缓存的.frm 表定义文件数量
2.20.36. Open_tables
  • 当前打开的表数量
2.20.37. Opened_files
  • 自MySQL Server启动以来使用my_open()函数(mysys库函数)打开的文件数。如果不使用此函数打开的文件在MySQL Server中不会进行统计
2.20.38. Opened_table_definitions
  • 从MySQL Server 启动以来缓存的总的.frm文件数量
2.20.39. Opened_tables
  • 自MySQL Server启动起来总的已打开的表的数量。如果Opened_tables状态变量值很大,则table_open_cache系统变量值可能设置太小了
2.20.40. Prepared_stmt_count
  • 当前prepare语句的数量(prepare最大语句数由max_prepared_stmt_count系统变量设置)
2.20.41. Qcache_free_blocks
  • QC查询缓存中的空闲内存块数量,QC 功能不推荐使用,在8.0中已废除
2.20.42. Qcache_free_memory
  • QC 查询缓存中的空闲内存字节数,与Qcache_free_blocks状态变量一样,8.0中已废除
2.20.43. Qcache_hits
  • QC 查询缓存的命中次数,与Qcache_free_blocks状态变量一样,8.0中已废除
2.20.44. Qcache_inserts
  • 被添加到QC 查询缓存中的查询数量,与Qcache_free_blocks状态变量一样,8.0中已废除
2.20.45. Qcache_lowmem_prunes
  • 由于内存不足而从QC 查询缓存中删除的查询数,与Qcache_free_blocks状态变量一样,8.0中已废除
2.20.46. Qcache_not_cached
  • 未缓存的查询数(由于query_cache_type系统变量的设置导致无法缓存或其他愿意导致未缓存的查询数),与Qcache_free_blocks状态变量一样,8.0中已废除
2.20.47. Qcache_queries_in_cache
  • 在QC 查询缓存中注册的查询数,与Qcache_free_blocks状态变量一样,8.0中已废除
2.20.48. Qcache_total_blocks
  • QC 查询缓存中的总块数,与Qcache_free_blocks状态变量一样,8.0中已废除
2.20.49. Ssl_accept_renegotiates
  • 建立SSL 连接需要协商的次数
2.20.50. Ssl_accepts
  • 已接受的SSL 连接的次数
2.20.51. Ssl_callback_cache_hits
  • 回调命中缓存的次数
2.20.52. Ssl_cipher
  • 当前加密连接的加密密码(对于未加密的连接该状态变量显示为空)
2.20.53. Ssl_cipher_list
  • 可能的SSL加密密码列表(对于非SSL连接该状态变量为空)
2.20.54. Ssl_client_connects
  • 在启用了SSL的MySQL master中的SSL连接尝试的次数
2.20.55. Ssl_connect_renegotiates
  • 与一个启用SSL 的主库建立SSL连接所需要的协商次数
2.20.56. Ssl_ctx_verify_depth
  • SSL上下文验证深度(链中测试验证的证书数量)
2.20.57. Ssl_ctx_verify_mode
  • SSL 上下文验证模式
2.20.58. Ssl_default_timeout
  • 默认的SSL 超时时间
2.20.59. Ssl_finished_accepts
  • 成功以SSL方式连接到Server的数量
2.20.60. Ssl_finished_connects
  • 成功使用SSL方式与主库建立连接的从库数量
2.20.61. Ssl_server_not_after
  • SSL证书有效的结束日期。 要检查SSL证书过期信息,可以通过该状态变量查询
2.20.62. Ssl_server_not_before
  • SSL证书有效有效期的起始日期
2.20.63. Ssl_session_cache_hits
  • 缓存命中的SSL会话数量
2.20.64. Ssl_session_cache_misses
  • 缓存未命中的SSL会话数量
2.20.65. Ssl_session_cache_mode
  • SSL 会话缓存模式
2.20.66. Ssl_session_cache_overflows
  • SSL会话缓存溢出的数量
2.20.67. Ssl_session_cache_size
  • SSL 会话缓存大小
2.20.68. Ssl_session_cache_timeouts
  • SSL会话缓存超时的数量
2.20.69. Ssl_sessions_reused
  • 显示有多少个连接是从缓存中重用的连接
2.20.70. Ssl_used_session_cache_entries
  • 使用了多少SSL会话缓存记录
2.20.71. Ssl_verify_depth
  • 复制SSL连接的验证深度
2.20.72. Ssl_verify_mode
  • SSL_VERIFY_PEER表示MySQL Server要求提供客户端证书。 如果客户端提供了证书,则MySQL Server使用该证书进行验证,验证成功之后继续往下执行后续步骤。 SSL_VERIFY_CLIENT_ONCE表示仅在初始握手中完成对客户端证书的请求
2.20.73. Ssl_version
  • 连接使用的SSL协议版本:例如,TLSv1。 如果连接使用SSL未加密,则该状态变量值为空
2.20.74. Tc_log_max_pages_used
  • 当使用mysqld作为内部XA事务恢复的协调器时,需要使用到日志与内存的映射实现功能,此状态变量表示自MySQL Server启动以来日志使用的最大页数量,如果Tc_log_max_pages_used和Tc_log_page_size的乘积总是明显小于日志大小,则需要使用--log-tc-size启动选项增加tc log的大小,通常该功能不使用,除非在MySQL Server中存在两个以上的支持两阶段提交的且支持XA事务的存储引擎(当前在MySQL Server中InnoDB是唯一即支持两阶段提交又支持XA事务的引擎)
2.20.75. Tc_log_page_size
  • 用于XA恢复日志的内存映射功能的页面大小。默认大小 使用getpagesize()函数确定。 该状态变量当前并未使用,原因与Tc_log_max_pages_used状态变量相同
2.20.76. Tc_log_page_waits
  • 该状态变量也是基于tc log日志恢复的内存映射功能相关的状态变量,该状态变量表示每次MySQL Server因为必须等待日志中的空闲页的次数,如果该值较大,则说明需要使用--log-tc-size启动选项调整tc log的大小。对于基于二进制日志的恢复,每次因为正在执行两阶段提交而无法关闭二进制日志时,此状态变量也会递增(关闭二进制日志的操作将一直等到所有此类事务全部提交完成才能成功执行)
2.20.77. Uptime
  • 自MySQL Server启动以来运行的总时间(单位秒)
2.20.78. Uptime_since_flush_status
  • 自最近执行过FLUSH STATUS语句以来MySQL Server运行的总时间(单位秒)

2.21. group_replication

2.21.1. Com_group_replication_start
  • 执行start group_replication;语句的次数
2.21.2. Com_group_replication_stop
  • 执行stop group_replication;语句的次数
2.21.3. group_replication_primary_member
  • 单主模式运行时,在集群节点中查看该状态变量显示主要成员的UUID。如果多主模式运行,则该状态变量显示为空字符串

2.22. semisynchronous replication

2.22.1. Rpl_semi_sync_master_clients
  • 当前处于半同步复制状态的从库数量
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.2. Rpl_semi_sync_master_net_avg_wait_time
  • 主库等待从库回复(ACK确认消息)的平均时间(以微秒为单位)。此变量已弃用,始终为0,将在以后的版本中移除
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.3. Rpl_semi_sync_master_net_wait_time
  • 主库等待从库回复(ACK确认消息)的总时间(以微秒为单位)。此变量已弃用,始终为0,将在以后的版本中移除
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.4. Rpl_semi_sync_master_net_waits
  • 主库等待从库回复(ACK确认消息)的总次数
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.5. Rpl_semi_sync_master_no_times
  • 主库关闭半同步复制插件的次数
    • 仅当安装了主库端半同步复制插件时此变量才可用。
2.22.6. Rpl_semi_sync_master_no_tx
  • 从库未成功确认的提交次数(主库使用异步复制提交的次数)
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.7. Rpl_semi_sync_master_status
  • 半同步复制当前是否在主库上正常运行。如果正常运行,则该值为ON,否则为OFF
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.7. Rpl_semi_sync_master_timefunc_failures
  • 主库调用gettimeofday()等时间函数时发生失败的次数
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.8. Rpl_semi_sync_master_tx_avg_wait_time
  • 主库等待每笔交易(每个事务的ACK确认消息)的平均时间(以微秒为单位)
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.9. Rpl_semi_sync_master_tx_wait_time
  • 主库等待事务(所有事务的ACK消息)的总时间(以微秒为单位)
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.10. Rpl_semi_sync_master_tx_waits
  • 主库等待事务(所有事务的ACK消息)的总次数
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.11. Rpl_semi_sync_master_wait_pos_backtraverse
  • 主库等待的二进制坐标低于之前等待事件的事件总次数。当事务开始等待回复(ACK确认消息)的顺序与其二进制日志事件的写入顺序不同时,就会发生这种情况
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.12. Rpl_semi_sync_master_wait_sessions
  • 当前等待从库回复(ACK确认消息)的会话数量
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.13. Rpl_semi_sync_master_yes_tx
  • 从库成功确认的提交数量(主库使用半同步复制提交的次数)
    • 仅当安装了主库端半同步复制插件时此变量才可用
2.22.14. Rpl_semi_sync_slave_status
  • 半同步复制当前是否在从库上正常运行。如果插件已启用且从I/O线程正在运行,则此状态变量值为ON,否则为OFF
    • 仅当安装了从库端半同步复制插件时此变量才可用

上一篇:ROW OPERATIONS | 下一篇:transaction_isolation