栏目头部广告

MySQL多线程复制配置

一、MySQL主从复制原理

master 节点上的binlogdump 线程,在slave 与其正常连接的情况下,将binlog 发送到slave 上。slave 节点的I/O Thread ,通过读取master 节点binlog 日志名称以及偏移量信息将其拷贝到本地relay log 日志文件。slave 节点的SQL Thread,该线程读取relay log 日志信息,将在master 节点上提交的事务在本地回放,达到与主库数据保持一致的目的。

MySQL多线程复制配置(图1)

MySQL5.7 的MTS(Enhanced Muti‐threadedslaves)MySQL 5.7 引入了新的机制来实现并行复制,不再有基于库的并行复制限制,主要思想就是slave 服务器的回放与主机是一致的,即master 服务器上是怎么并行执行,slave 上就怎样进行并行回放。

【注】MySQL5.7之前,主从复制中从库都是单线程复制。

二、MySQL多线程复制

2.1 slave_parallel_type参数介绍

mysql v5.7.2 进行了优化,增加了参数slave_parallel_type参数有两个选项:

LOGICAL_CLOCK:基于逻辑时钟(即基于组提交的并行复制方式),可以在一个DATABASE 中并发执行relay log 事务。(建议使用)

DATABASE: 默认值,基于库的并行复制方式,v5.6 默认是这个参数,修改参数后每个库只能有一个复制线程。

show variables like "slave_parallel_type";  #默认为database,不建议使用。建议配置成LOGICAL_CLOCK

MySQL多线程复制配置(图2)

2.2 master_info_repository和relay_log_info_repository参数

(1)多线程从服务器可以将事务分发到不同的线程中,通过slave_parallel_workers变量调整使用的线程数量。

show variables like "slave_parallel_workers";  #建议配置为8线程,即理论主从复制速度是之前的8倍

MySQL多线程复制配置(图3)

(2)master_info_repository=TABLE     # 开启MTS 功能后,会频繁更新master.info,建议设置为TABLE 减小开销,默认为FILE

show variables like "master_info_repository";

MySQL多线程复制配置(图4)

(3)relay_log_info_repository=TABLE  # 建议修改为TABLE,默认为FILE

show variables like "relay_log_info_repository";

MySQL多线程复制配置(图5)

【注】slave_master_info 记录了首次同步master 的位置relay_log_recovery=ON (slave IO 线程crash,如果relay‐log损坏,则自动放弃所有未执行的relay‐log,重新从master 上获取日志,保证relay‐log 的完整性)

2.3 设置slave_parallel_workers多线程数量

(1)修改配置文件【持久化,需要重启】

[mysqld]
slave-parallel-type = LOGICAL_CLOCK
slave_parallel_workers = 8

注:CPU核心数可作为参考标准,即8C CPU数据库从库,可以slave_parallel_workers设置为8!!!

(2)临时修改【重启失效】

set global slave_parallel_workers = 8;

【注】set临时修改不会立即生效,需要重启复制线程start slave。

官网介绍:https://dev.mysql.com/doc/refman/5.7/en/replication-options-replica.html

MySQL多线程复制配置(图6)

2.4 保证提交的顺序性

slave_preserve_commit_order=ON 在slave 上应用事务的顺序是无序的,和relay log 中记录的事务顺序不一样,这样数据一致性是无法保证的,为了保证事务是按照relay log 中记录的顺序来回放,就需要开启参数slave_preserve_commit_order。

show variables like "slave_preserve_commit_order";

MySQL多线程复制配置(图7)

【注】虽然mysql5.7 添加MTS 后,虽然slave 可以并行应用relay log,但commit 部分仍然是顺序提交,其中可能会有等待的情况。

MySQL多线程复制配置(图7)

mysql> select * from mysql.slave_master_info;
mysql> select * from mysql.slave_relay_log_info;

作者:UStarGao
链接:https://www.starcto.com/mysql/71.html

来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面


文章页广告

随便看看

栏目底部广告
`