1
binlog_row_event_max_size
这个参数来自于8.014后续的版本,在mysql
逐步使用新架构后,一些值从不可调,变为可调,这个值就是其中之一,
这个值是负责在MYSQL BINLOG
中的一行最大的尺寸,实际上如果超过这个尺寸也是可以被接受的,默认这个值为8192BYTES
2 log_bin
在MySQL中是否开启binlog是通过log_bin来进行控制的,但在MySQL 8.0后,配置中我们还是通过 log_bin来进行控制但在变量里面变成了2个变量来进行控制
实际上,在配置中还是通过 log_bin = /data/mysql-bin
来设置系统的BINLOG的位置与路径和开启与否。但读取的时候,会通过log_bin_basename
来进行相关的未见位置和文件名的展示。但需要注意的是BINLOG 的开启不在通过log_bin来进行控制,也就是没有log_bin
的设置MYSQL8 依然会打开BINLOG
+----------------------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------------------+----------------------------------------+
| log_bin | ON |
| log_bin_basename | /data/mysql-bin |
| log_bin_index | /data/mysql-bin.index
3 binlog_checksum
BINLOG 在产生并传输,是需要进行源端与目的端的校验的,在这样的情况下binlog 默认通过CRC32的方式来进行相关数据元和目的端的校验方式,防止数据传输后不一致的情况出现
binlog_checksum = crc32
但需要注意在8.020之前的版本,如果使用组复制,则这个binlog_checksum必须调整为 NONE ,因为租复制不支持接受带有校验功能的BINLOG,在8.021版本后的组复制支持binlog_checksum = crc32
4
binlog_cache_size
这个参数一般在实际上很少被调整,主要应用的场景为使用MYSQL在处理大型事务的情况下,会修改这个部分的值,因为大型的事务在产生BINLOG
会使用缓存,每个线程都会有一个二进制的缓存,在8.017后的版本,
如果缓存无法承接BINLOG日志的缓冲,而写到磁盘是需要进行加密的,而在日志写入日志文件时这些是要进行清理的,所以如果经常发现需要清理磁盘的临时的BINLOG
缓存,
则需要加大这个部分的设置,默认是 4096, 这里可以通过 binlog_cache_use ,
binlog_cache_disk_user 来进行判断此部分调整的是否合理。
注意有些ACE 把这个归在全局共享, 其实这个是线程级,也就是每个链接都会. 当你的内存少的时候,要看下它.
另外这个参数可以限制大事务
5 binlog_direct_non_transactional_updates
基于目前BINLOG 基于ROW 的模式,此部分设置无序进行改变。
| Variable_name | Value |
+-----------------------------------------+-------+
| binlog_direct_non_transactional_updates | OFF |
+-----------------------------------------+-------+
6
binlog_error_action
这个参数主要是在处理BINLOG时遇到错误处理方式的问题,在进行BINLOG
记录时,如果系统在产生BINLOG 时遇到错误,则有两种处理方式,
1 关闭服务,2 忽略,默认值为当遇到BINLOG
产生错误时,关闭数据库服务器,保证数据库的数据一致性。
IGNORE_ERROR 如果想忽略,继续产生bINLOG 则可以将这部分改为
ginore_erorr
mysql> show global variables like 'binlog_error_action';
+---------------------+--------------+
| Variable_name | Value |
+---------------------+--------------+
| binlog_error_action | ABORT_SERVER |
+---------------------+--------------+
7
binlog_expire_logs_seconds
在MYSQL 8.0 之前的版本,这个部分是通过 expire_logs_days
来进行控制的,而在8.0 后,这个部分改为通过秒来进行控制,在8.029 版本可以禁止BINLOG
被自动清除,
通过binlog_expire_logs_auto_purge = OFF 来进行,但在之前的版本,只能通过将这个部分 设置为
0 。手动清理日志通过purge binary logs 来进行日志的清理。
mysql> show global variables like 'binlog_expire%';
+-------------------------------+---------+
| Variable_name | Value |
+-------------------------------+---------+
| binlog_expire_logs_auto_purge | ON |
| binlog_expire_logs_seconds | 2592000 |
+-------------------------------+---------+
2 rows in set (0.00 sec)
默认的情况下,这里设置的保留时间为30天,具体可以将这部分设计成适合自己的情况的保留天数,比如3 天 259,200
8 binlog_format
这个部分无需进行设置,默认ROW 即可
9
binlog_group_commit_sync_delay
这个参数是在MYSQL
出现组提交的情况下,产生的基于组提交的原理,MYSQL 在产生BINLOG 日志写入到磁盘时是可以一组一组的提交的,如果默认值为0
则提交时是不需要延迟等待的,
而如果设置了数值,则表明在数据写入时会有一定情况的延迟,将这段延迟的事务,可以一组进行提交。单位为微妙,这样的设置可以提高在从库上并行应用日志的可能性。
同时从库需要replica_parallel_type=LOGICAL_CLOCK(从
MySQL 8.0.26 开始)或 slave_parallel_type=LOGICAL_CLOCK
mysql> show global variables like 'binlog_group_commit%'
-> ;
+-----------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------+-------+
| binlog_group_commit_sync_delay | 0 |
| binlog_group_commit_sync_no_delay_count | 0 |
+-----------------------------------------+-------+
10 binlog_max_flush_queue_time
此参数不要设置,已经被官方标记在未来的版本中剔除
mysql> show global variables like 'binlog_max_flush_queue_time';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| binlog_max_flush_queue_time | 0 |
+-----------------------------+-------+
1 row in set (0.01 sec)
11
binlog_order_commits
在8.0上默认这个参数是启用的,在启用的情况下,存储引擎发出的事务提交的指令在单个线程上进行串行化,一遍事务使用按照写入二进制的顺序进行提交,如果禁用这个变量,将使用多线程的方式来提交指令,在应用日志的时候,可以进行组提交,从库应用日志的瓶颈会减少。
mysql> show global variables like 'binlog_order_commits';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| binlog_order_commits | ON |
+----------------------+-------+
1 row in set (0.00 sec)
12 binlog_row_metadata
在使用基于行的日志记录时,该变量配置在二进制日志中添加的表元数据的数量。当设置为MINIMAL时,默认值,只记录与SIGNED标志、列字符集和几何类型相关的元数据。当设置为FULL时,将记录表的完整元数据,例如列名、ENUM或SET字符串值、主键信息等。最好是设置FULL
mysql> show global variables like 'binlog_row_metadata';
+---------------------+---------+
| Variable_name | Value |
+---------------------+---------+
| binlog_row_metadata | MINIMAL |
+---------------------+---------+
1 row in set (0.00 sec)
13 binlog_stmt_cache_size
在服务器启用BINLOG
后,服务器是支持事务性存储引擎的,将为每个客户端分配单独的二进制日志,和语句的缓存,
如果事务中非事务语句中的数据超过内存缓冲,则会产生临时文件,这里如果事务中存在大量费事务性的语句,可以增加这个部分的大小默认32768bytes.
mysql> show global variables like 'binlog_stmt_cache_size';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| binlog_stmt_cache_size | 32768 |
+------------------------+-------+
14 log_bin_trust_function_creators
当启用了二进制日志,参数会控制在系统中创建的函数,存储过程以及trigger 对于数据复制是安全的,不安全的相关的程序将无法在数据库中被建立,默认是关闭的状态。
最好设置TRUE 否则函数建不起来
mysql> show global variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
1 row in set (0.01 sec)
15 log_replica_updates
从mysql8.026开始添加了此参数,log_slave_updates
在8.026 被废弃了,这个参数主要用于级联的情况下,
如果关闭则在从库下的从库将无法接受到BINLOG
日志对于数据的修改,无法进行级联,默认此参数是打开的状态可以进行级联库的支持。
主要是受黑人在美国黑命贵运动的影响
mysql> show global variables like 'log_replica_updates%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| log_replica_updates | ON |
+---------------------+-------+
1 row in set (0.00 sec)
16 master_verify_checksum source_verify_checksum
在8.026 版本,master_verify_checksum 被弃用,使用source_verify_checksum来进行替代,默认是关闭的状态,
开启将导致源服务器对日志进行校验和检查,如果发现错误将停止服务。这里建议为默认的设置不要进行变动。
主要是受黑人在美国黑命贵运动的影响
mysql> show global variables like 'master_verify_checksum%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| master_verify_checksum | OFF |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'source_verify_checksum%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| source_verify_checksum | OFF |
+------------------------+-------+
1 row in set (0.00 sec)
17 max_binlog_size
在mysql binlog 中二进制日志写入的大小是有限制的,默认BINLOG的大小为1G,一个事务会以一个块写入到日志中,不会因为BINLOG大小的限制而将事务进行拆分,所以在限制的情况下,有可能看到比限制更大的SIZE的BINLOG。
当max_relay_log_size =0 时则以max_binlog_size为准。
18 sync_binlog = 1 innodb_flush_log_trx_commit = 1 在mysql中默认以上两个参数均应为设置为1 在这样的情况下,保证数据的安全性,其他的设置均不应被考虑。
19 transaction_write_set_extraction此参数在8.026 版本后的MYSQL被放弃,默认值为 XXHASH64, 这为在事务期间提取写操作使用的哈希算法,XXHASH64 设置对于Group Replication是必需的,在Group Replication中,提取事务中的写操作用于在所有组成员上进行冲突检测和认证