MySQL My.cnf参数梳理与延伸 (MYSQL 8 replica 类) 与 技术文章与食色性也

2024年 1月 19日 36.3k 0

开头还是介绍一下群,如果感兴趣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万就是食色性也的文章是让大家消费,这就是现实和人性,所以不用为技术类的东西阅读量少而困惑,我写我的,至于阅读量不用作为关心的指标。

相关文章

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

发布评论