MySQL复制-并行复制

1、介绍(Multi-Threaded Slave)在官方文档中,并行复制的叫法为 Multi-Threaded Slave (MTS) MySQL的并行复制基于组提交: 一个组提交中的事务都是可以并行执行的 ,因为既然处于组提交中,这意味着事务之间没有冲突(不会去更新同一行数据),否则不可能在同一个组里面。Slave上开启并行复制,需要在配置文件中增加以下参数:[mysqld] # DATABASE -- 基于库级别的并行复制,如果只有一个库,就还是串行(为了兼容5.6)。 # LOGICAL_CLOCK -- 逻辑时钟,主上怎么并行执行的, # 从上也是怎么并行回放的。 slave-parallel-type=LOGICAL_CLOCK # 并行复制的线程数,一般设置为一个组内提交的事物数,线上设置为32足够了 slave-parallel-workers=4 # Slave上commit的顺序保持一致,必须为1,否则可能会有GAP锁产生 slave_preserve_commit_order=12、动态调整复制线程数配置并行复制后,Slave节点上的效果如下,可以看到4个 Coordinator 线程"root@localhost:mysql.sock  [(none)]> show processlist; 动态调整方式如下:mysql> set global slave_parallel_workers=8; #一定要重启一下slave才能有效mysql> stop slave;  mysql> start slave;mysql> show processlist;特别注意:这里的并行复制指的是 SQL Thread (回放线程),而非IO Thread (IO线程) Waiting for master to send event 这个 State在 show processlist 中只有一个,即只有一个 IO Thread