暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql5.7组复制最佳实践

MySQL数据库运维技术栈 2021-05-07
740

mysql5.7的版本是真正意义上实现了组提交和组复制的,在mysql5.6版本虽然也有并行复制,但其实现的是不同模式下的表才能并行复制,而在5.7的版本,只要是一组没有冲突的事物(没有模式的限制),就可以并行在从库中进行回放,大大的提高复制效率。

在mysql5.7版本在现有的主从复制环境,可以在线去配置并行复制,基本对业务无影响,下面就来看看怎么在线配置并行复制
首先在master端配置2个并行复制参数

    binlog_group_commit_sync_delay=10
    binlog_group_commit_sync_no_delay_count=20

    binlog_group_commit_sync_delay最好配置成10的倍数,因为在mysql5.7的某些版本存在bug,会导致事物提交变的非常慢。
    下面来解释一下上面2个参数的含义

    • binlog_group_commit_sync_delay

    全局动态变量,单位微妙,默认0,范围:0~1000000(1秒)。
    表示 binlog 提交后等待延迟多少时间再同步到磁盘,默认0 ,不延迟。当设置为 0 以上的时候,就允许多个事务的日志同时一起提交,也就是我们说的组提交。组提交是并行复制的基础,设置这个值的大于 0 就代表打开了组提交的功能。

    • binlog_group_commit_sync_no_delay_count

    全局动态变量,单位个数,默认0,范围:0~1000000。
    表示等待延迟提交的最大事务数,如果上面参数的时间没到,但事务数到了,则直接同步到磁盘。若 binlog_group_commit_sync_delay 没有开启,则该参数也不会开启。

    在slave端设置以下4个参数,可以在线设置,不过需要先停slave,设置完参数,在启动slave

      master_info_repository='TABLE';
      relay_log_info_repository='TABLE';
      slave_parallel_workers=4;
      slave_parallel_type='LOGICAL_CLOCK';

      如果想要实例重启之后,并行复制也生效,则需要在my.cnf配置文件添加如下配置

        slave-parallel-type=LOGICAL_CLOCK
        slave-parallel-workers=4
        master_info_repository=TABLE
        relay_log_info_repository=TABLE
        relay_log_recovery=ON

        为了使用crash-safe replication功能,需要开启relay_log_recovery参数

        至此并行复制已经开启完毕,下面检查一下并行复制的效果,可以看到在slave节点已经有4个并行的worker线程了。

          mysql> show full processlist;
          +----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+
          | Id | User | Host | db | Command | Time | State | Info |
          +----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+
          | 1 | system user | | NULL | Connect | 216 | Waiting for master to send event | NULL |
          | 3 | system user | | NULL | Connect | 216 | Slave has read all relay log; waiting for more updates | NULL |
          | 6 | system user | | NULL | Connect | 216 | Waiting for an event from Coordinator | NULL |
          | 8 | system user | | NULL | Connect | 216 | Waiting for an event from Coordinator | NULL |
          | 11 | system user | | NULL | Connect | 216 | Waiting for an event from Coordinator | NULL |
          | 12 | system user | | NULL | Connect | 216 | Waiting for an event from Coordinator | NULL |
          | 14 | root | localhost | NULL | Query | 0 | starting | show full processlist |
          +----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+
          7 rows in set (0.00 sec)

          给大家留个问题
          1.在master节点启用了binlog_group_commit_sync_delay参数,应用提交的事物响应时间会有什么影响呢?


          文章转载自MySQL数据库运维技术栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论