MYSQL BINLOG参数

2024年 1月 24日 112.8k 0

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中,提取事务中的写操作用于在所有组成员上进行冲突检测和认证

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论