鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

配置从库

  1. 设置并启动并行复制。
    1. 登录从库。
      1
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock
      
    2. 停止从库,设置并行复制。
      1
      2
      3
      4
      5
      6
      stop slave;
      set global binlog_transaction_dependency_tracking=COMMIT_ORDER;
      set global transaction_write_set_extraction=XXHASH64;
      set global binlog_transaction_dependency_tracking=WRITESET;
      set global slave_parallel_type='LOGICAL_CLOCK';
      set global slave_parallel_workers=96;
      
      表1 并行复制参数

      参数项

      说明

      备注

      transaction_write_set_extraction

      如果使用WriteSet进行并行复制,需设置该参数,该参数用于控制检测事务依赖关系时采用的hash算法。

      有三个取值OFF|XXHASH64|MURMUR32

      MySQL 5.7版本需要设置,MySQL 8.0版本默认是XXHASH64可以不用设置,而且设置该参数之前需要先设置binlog_transaction_dependency_tracking= COMMIT_ORDER

      binlog_transaction_dependency_tracking

      用于控制如何决定事务的依赖关系。

      有三个取值:

      • 默认的COMMIT_ORDER表示继续使用5.7中的基于组提交的方式决定事务的依赖关系;
      • WRITESET表示使用写集合来决定事务的依赖关系;
      • WRITESET_SESSION表示使用WriteSet来决定事务的依赖关系,但是同一个Session内的事务不会有相同的last_committed值。

      slave_parallel_type

      该参数控制是否开启并行复制。

      默认值DATABASE将会采用MySQL 5.6版本中SCHEMA级别的并行回放(基于库的并行复制),设置为LOGICAL_LOCK则会采用基于GroupCommit的并行回放(基于组提交的并行复制),同一个Group内的事务将会在Slave上并行回放。

      slave_parallel_workers

      用于控制SQL线程的并行度。

      • 如果从库不承担任何业务压力,建议该参数设置成CPU核数(本文服务器有2个鲲鹏920 5250处理器,共计96个核)。
      • 如果从库承担业务压力,建议在不影响业务压力的前提下进行调整,可以通过执行SELECT GTID_SUBSET(LAST_SEEN_TRANSACTION,@@GLOBAL.GTID_EXECUTED) from performance_schema.replication_applier_status_by_worker;的结果调整该值。
        • 如果等于0,说明当前还有事务未处理完成,可以增加slave_parallel_workers的数值。
        • 如果不等于0,说明所有事务已经回放完毕。
    3. 启动并行复制。
      启动从库,使slave_parallel_workers参数生效。
      1
      start slave;
      

    关闭并行复制,先关闭主库的并行复制,然后关闭从库的并行复制。

    1. 关闭主库的并行复制。
      1. 关闭主库的并行复制。
        1
        2
        3
        4
        set global binlog_transaction_dependency_tracking=COMMIT_ORDER;
        set global transaction_write_set_extraction=XXHASH64;
        set global slave_parallel_type='DATABASE';
        set global slave_parallel_workers=0;
        
      2. 确认并行复制关闭成功。
        1
        2
        3
        4
        show variables like '%transaction_write_set_extraction%';
        show variables like '%binlog_transaction_dependency_tracking%';
        show variables like '%slave_parallel_type%';
        show variables like '%slave_parallel_workers%';
        

      以上命令查询数值依次为XXHASH64、COMMIT_ORDER、DATABASE和0即成功关闭并行复制。

    2. 关闭从库的并行复制。
      1. 执行如下命令,关闭从库的并行复制。
        1
        2
        3
        4
        5
        6
        stop slave;
        set global binlog_transaction_dependency_tracking=COMMIT_ORDER;
        set global transaction_write_set_extraction=XXHASH64;
        set global slave_parallel_type='DATABASE';
        set global slave_parallel_workers=0;
        start slave;
        

        或者

        1
        2
        3
        stop slave;
        set global slave_parallel_type='DATABASE';
        start slave;
        
      2. 确认并行复制关闭成功。
        1
        2
        3
        4
        show variables like '%transaction_write_set_extraction%';
        show variables like '%binlog_transaction_dependency_tracking%';
        show variables like '%slave_parallel_type%';
        show variables like '%slave_parallel_workers%';
        

        以上命令查询数值依次为XXHASH64、COMMIT_ORDER、DATABASE和0,即成功关闭并行复制。

        查看所有线程(IO线程和SQL线程),

        1
        show processlist;
        

        只有1个IO线程和1个SQL线程,Id35的是IO线程(接收主库的binlog日志),Id36是SQL线程(解析二进制日志并执行SQL语句)。

  2. 确认并行复制启动成功。
    1. 确认并行复制是否生效。
      1
      2
      3
      4
      show variables like '%transaction_write_set_extraction%';
      show variables like '%binlog_transaction_dependency_tracking%';
      show variables like '%slave_parallel_type%';
      show variables like '%slave_parallel_workers%';
      

      以上命令查询数值依次为XXHASH64、WRITESET、LOGICAL_CLOCK和96则说明生效。

      如果发现某些值不生效,需要退出重新登录数据库,再次查看才会生效。

    2. 查看线程。
      查看所有线程(IO线程和SQL线程)。
      1
      show processlist;
      

      SQL协调线程:把二进制日志解析后分发给SQL线程执行。

  3. 查看从库状态。
    1. 执行以下命令。
      1
      show slave status\G;
      

      下面两项值均为Yes,表示从库启动成功。

      Slave_IO_Running: Yes

      Slave_SQL_Running: Yes

      如果Last_IO_Error报错“The slave I/O thread stops because master and slave have equal MySQL server UUIDs......”,参考查看MySQL主从复制状态时提示The slave IO thread stops的解决方法解决后,重新查看从库状态。

    2. 退出从库。
      1
      exit