开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共1900人左右 1 + 2 + 3 + 4 +5) 4群(400+)新人直接进5群,另欢迎 OpenGauss 的技术人员加入。
最近开始写文章都是带两个主题,技术主题与生活主题,生活热点,还是老传统,技术在前,生活话题在后。
最近比较忙,生病,参会,一堆的工作等着去处理,所以只能拿出存货来发。
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 来进行判断此部分调整的是否合理。
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 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 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 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 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 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字符串值、主键信息等。
mysql> show 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 variables like 'binlog_stmt_cache_size';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| binlog_stmt_cache_size | 32768 |
+------------------------+-------+
14 log_bin_trust_function_creators
当启用了二进制日志,参数会控制在系统中创建的函数,存储过程以及trigger 对于数据复制是安全的,不安全的相关的程序将无法在数据库中被建立,默认是关闭的状态。
mysql> show 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 variables like 'log_replica_updates%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| log_replica_updates | ON |
+---------------------+-------+
1 row in set (0.00 sec)
16 log_slave_updates 参数如上,8.026 被替换
17 master_verify_checksum source_verify_checksum
在8.026 版本,master_verify_checksum 被弃用,使用source_verify_checksum来进行替代,默认是关闭的状态,开启将导致源服务器对日志进行校验和检查,如果发现错误将停止服务。这里建议为默认的设置不要进行变动。
mysql> show variables like 'master_verify_checksum%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| master_verify_checksum | OFF |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'source_verify_checksum%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| source_verify_checksum | OFF |
+------------------------+-------+
1 row in set (0.00 sec)
18 max_binlog_size
在mysql binlog 中二进制日志写入的大小是有限制的,默认BINLOG的大小为1G,一个事务会以一个块写入到日志中,不会因为BINLOG大小的限制而将事务进行拆分,所以在限制的情况下,有可能看到比限制更大的SIZE的BINLOG。
当max_relay_log_size =0 时则以max_binlog_size为准。
19 sync_binlog = 1 innodb_flush_log_trx_commit = 1 在mysql中默认以上两个参数均应为设置为1 在这样的情况下,保证数据的安全性,其他的设置均不应被考虑。
20 transaction_write_set_extraction此参数在8.026 版本后的MYSQL被放弃,默认值为 XXHASH64, 这为在事务期间提取写操作使用的哈希算法,XXHASH64 设置对于Group Replication是必需的,在Group Replication中,提取事务中的写操作用于在所有组成员上进行冲突检测和认证
这次的话题说说最近经常有人反映的,写技术文章没有人看,写一些生活话题浓郁的看的人多。这里引用一位名人的名言"人类的本性是追求幸福和满足。" - 亚里士多德
名人名言都太装,用大白话来翻译一下,人的本性就是好逸恶劳,只要让自己能省事,绝对不会费劲,在大白话一下,一个二选一,500万和985 211 你选择那个,大部分人会拿500万走人。
那么技术文章就相当于 985 211 而 500万就是食色性也的文章是让大家消费,这就是现实和人性,所以不用为技术类的东西阅读量少而困惑,我写我的,至于阅读量不用作为关心的指标。