---
title: 配置从库
description: "1. 设置并启动并行复制。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0023.html
sourcePath: /source/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0023.html
indexId: 8abb19762d6b56962cba1017fec32e7c9dffb8e8c8aa9458a70ae9f6810d4ade80
---
# 配置从库

1. 设置并启动并行复制。

  a. 登录从库。
    1 /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock

  b. 停止从库，设置并行复制。
    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，说明所有事务已经回放完毕。 |


  c. 启动并行复制。
    启动从库，使slave_parallel_workers参数生效。 1 start slave;

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

a. 关闭主库的并行复制。

  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即成功关闭并行复制。
b. 关闭从库的并行复制。

  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. 确认并行复制启动成功。

  a. 确认并行复制是否生效。
    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则说明生效。

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

  b. 查看线程。
    查看所有线程（IO线程和SQL线程）。 1 show processlist;

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

3. 查看从库状态。

  a. 执行以下命令。
    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 I/O thread stops的解决方法解决后，重新查看从库状态。

  b. 退出从库。
    1 exit
