本文将进行并行复制的实操。

  MySQL并行复制通过修改配置可以实现,不用另外添加plugin。修改配置如下(实操环境同):

要开启enhanced multi-threaded slave其实很简单,只需根据如下设置:

    slave-parallel-type=LOGICAL_CLOCK
    slave-parallel-workers=16
    slave_pending_jobs_size_max = 2147483648
    slave_preserve_commit_order=1
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    relay_log_recovery=ON

  1、设置并发同步类型为基于组方式

    查看默认的并行复制方式:show variables like 'slave_parallel_type';

      

mysql5.7并行复制 mysql并行复制配置_配置文件

     可见默认是datebase,每个线程只能处理一个数据库。确保设置为组模式:set global slave_parallel_type='logical_clock';

      

mysql5.7并行复制 mysql并行复制配置_MySQL_02

  2、设置复制线程的数量: set global slave_parallel_workers=6;

      

mysql5.7并行复制 mysql并行复制配置_MySQL_03

   3、配置从库回放顺序:set global slave_preserve_commit_order=ON;

      

mysql5.7并行复制 mysql并行复制配置_MySQL_04

    slave_preserve_commit_order 参数在多线程复制环境下,能够保证从库回放relay log事务的顺序与这些事务在relay log中的顺序完全一致,也就是与主库提交的顺序完全一致。怎么理解呢?举个例子,开启并行复制后,如果relay log中有3个事务A,B,C,他们在relay log中的顺序是A->B->C,而它们的last_commited相同,也就是说他们可以并行回放,那么在从库上,这3个事务,提交的顺序可能就不再是A->B->C,设置slave_preserve_commit_order=ON,能够保证这3个事务,在从库回放时,仍然按照它们在relay log中的顺序来回放,保证从库回放relay log事务的顺序与主库完全相同。

      

mysql5.7并行复制 mysql并行复制配置_mysql5.7并行复制_05

  4、设置事件所需的内存大小:set global slave_pending_jobs_size_max= 536970912;

      

mysql5.7并行复制 mysql并行复制配置_数据库_06

    从库回放线程的时间内存大小默认为16M,这个参数不一定非要修改,但是一定要大于主库设置的max_allowed_packet。

   5、统一配置文件:以上参数,全部可以在从库的配置文件中添加上,然后重启数据库

  以上配置都是在登录mysql后的命令行操作,也可在配置文件中进行设置,这些配置参数都是global的。

  测试

    Master:

      

mysql5.7并行复制 mysql并行复制配置_mysql5.7并行复制_07

     Slave:

      

mysql5.7并行复制 mysql并行复制配置_数据库_08

     具体并行复制对异步复制延时的解决有多高效,需要通过压力测试验证。

  监控

    在使用了MTS后,复制的监控依旧通过SHOW SLAVE STATUS\G,同时performance_schema库中提供了很多元数据表,可以更详细的监控并行复制过程。

show tables like 'replication%';

      

mysql5.7并行复制 mysql并行复制配置_配置文件_09

    2)select * from replication_group_member_actions;
      

mysql5.7并行复制 mysql并行复制配置_数据库_10