返回 导航

其他

hangge.com

MySQL - 实现主从复制、主从同步功能教程2(多线程复制)

作者:hangge | 2020-12-15 08:10
    多线程复制(并发复制)技术在 MySQL 5.6 中被引入,又在 MySQL 5.7 中得到了进一步的完善(MySQL 5.7 中是基于逻辑时钟的方式进行的多线程复制)。解决了当 master 同一个 schema 下的数据发生了变更,从库不能并发应用的问题,同时也真正将 binlog 组提交的优势充分发挥出来,保障了从库并发应用 Relay Log 的能力。
    MySQL 8.0 中,多线程复制又进行了技术更新,引入了 writeset 的概念,而在之前的版本中,如果主库的同一个会话顺序执行多个不同相关对象的事务,例如,先执行了 Update A 表的数据,又执行了 Update B 表的数据,那么 BINLOG 在复制到从库后,这两个事务是不能并行执行的,writeset 的到来,突破了这个限制。

三、多线程复制

注意:本文多线程复制教程只针对 MySQL 数据库,MariaDB 数据库不适用。

1,准备工作

要实现多线程复制首先我们开启主从库异步复制功能,具体操作可以参考我前一篇文章:

2,从服务器配置(Slave)

(1)要实现多线程复制,我们只需要在从服务器上配置即可。首先可以在从库上执行如下命令查看目前的复制线程数:
show processlist;

(2)接着执行如下命令编辑 my.cnf 文件:
vi /etc/my.cnf

(3)添加如下内容(之前添加的配置继续保留),然后保存退出:
参数说明:
  • slave-parallel-type=LOGICAL_CLOCK:基于组提交的并行复制方式,同一个数据库下可以有多个线程
  • slave-parallel-workers=16:即可有 16SQL Threadcoordinator 线程)来进行并行复制
  • master_info_repository=TABLErelay_log_info_repository=TABLE:两个参数是把主从复制信息存储到 innodb 表中,默认情况下主从复制信息是存储到文件系统中的,如果从服务器宕机,很容易出现文件记录和实际同步信息不同的情况,存储到表中则可以通过 innodb 的崩溃恢复机制来保证数据记录的一致性。并且性能可以有 50% ~ 80% 的提升。
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

(4)执行如下命令重启 MySQL
service mysqld restart

(5)再次登入 MySQL 后执行 show processlist; 命令即可看到结果增加了 16 条,说明并行复制开启成功。
评论

全部评论(0)

回到顶部