这篇文章将为大家详细讲解有关Mysql5.7如何并行复制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

启用MySQL并行复制

MySQL 5.7的并行复制建立在组提交的基础上,所有在主库上能够完成Prepared的语句表示没有数据冲突,就可以在 Slave 节点并行复制。

关于 MySQL 5.7 的组提交,我们要看下以下的参数:

(test)>showglobalvariableslike'%group_commit%'->;+-----------------------------------------+-------+|Variable_name|Value|+-----------------------------------------+-------+|binlog_group_commit_sync_delay|0||binlog_group_commit_sync_no_delay_count|0|+-----------------------------------------+-------+

要开启 MySQL 5.7 并行复制需要以下二步,首先在主库设置binlog_group_commit_sync_delay的值大于0 。

>setglobalbinlog_group_commit_sync_no_delay_count=20;>setglobalbinlog_group_commit_sync_delay=10;

这里简要说明下binlog_group_commit_sync_delaybinlog_group_commit_sync_no_delay_count参数的作用。

binlog_group_commit_sync_delay

全局动态变量,单位微妙,默认0,范围:0~1000000(1秒)。

表示binlog提交后等待延迟多少时间再同步到磁盘,默认0 ,不延迟。当设置为 0 以上的时候,就允许多个事务的日志同时一起提交,也就是我们说的组提交。组提交是并行复制的基础,我们设置这个值的大于 0 就代表打开了组提交的功能。

binlog_group_commit_sync_no_delay_count

全局动态变量,单位个数,默认0,范围:0~1000000。

表示等待延迟提交的最大事务数,如果上面参数的时间没到,但事务数到了,则直接同步到磁盘。若binlog_group_commit_sync_delay没有开启,则该参数也不会开启。

其次要在 Slave 主机上设置如下几个参数:

#过多的线程会增加线程间同步的开销,建议4-8个Slave线程。slave-parallel-type=LOGICAL_CLOCKslave-parallel-workers=4

或者直接在线启用也是可以的:

mysql>stopslave;QueryOK,0rowsaffected(0.07sec)mysql>setglobalslave_parallel_type='LOGICAL_CLOCK';QueryOK,0rowsaffected(0.00sec)mysql>setglobalslave_parallel_workers=4;QueryOK,0rowsaffected(0.00sec)mysql>startslave;QueryOK,0rowsaffected(0.06sec)mysql>showvariableslike'slave_parallel_%';+------------------------+---------------+|Variable_name|Value|+------------------------+---------------+|slave_parallel_type|LOGICAL_CLOCK||slave_parallel_workers|4|+------------------------+---------------+2rowsinset(0.00sec)检查Worker线程的状态

当前的 Slave 的 SQL 线程为Coordinator(协调器),执行Relay log日志的线程为Worker(当前的 SQL 线程不仅起到协调器的作用,同时也可以重放Relay log中主库提交的事务)。

我们上面设置的线程数是 4 ,从库就能看到 4 个Coordinator(协调器)进程。

并行复制配置与调优

开启 MTS 功能后,务必将参数master-info-repository设置为 TABLE ,这样性能可以有 50%~80% 的提升。这是因为并行复制开启后对于master.info这个文件的更新将会大幅提升,资源的竞争也会变大。

在 MySQL 5.7 中,推荐将master-info-repositoryrelay-log-info-repository设置为 TABLE ,来减小这部分的开销。

master-info-repository=tablerelay-log-info-repository=tablerelay-log-recovery=ON并行复制监控

复制的监控依旧可以通过SHOW SLAVE STATUS\G,但是 MySQL 5.7 在performance_schema架构下多了以下这些元数据表,用户可以更细力度的进行监控:

mysql>useperformance_schema;mysql>showtableslike'replication%';+---------------------------------------------+|Tables_in_performance_schema(replication%)|+---------------------------------------------+|replication_applier_configuration||replication_applier_status||replication_applier_status_by_coordinator||replication_applier_status_by_worker||replication_connection_configuration||replication_connection_status||replication_group_member_stats||replication_group_members|+---------------------------------------------+8rowsinset(0.00sec)想办法统计出来每个同步线程使用的比率。统计方法如下:1、将线上从机相关统计打开(出于性能考虑默认是关闭的),打开方法可以如下如下SQL:UPDATEperformance_schema.setup_consumersSETENABLED='YES'WHERENAMELIKE'events_transactions%';UPDATEperformance_schema.setup_instrumentsSETENABLED='YES',TIMED='YES'WHERENAME='transaction';2、创建一个查看各个同步线程使用量的视图,代码如下:USEtest;CREATEVIEWrep_thread_countASSELECTa.THREAD_IDASTHREAD_ID,a.COUNT_STARASCOUNT_STARFROMperformance_schema.events_transactions_summary_by_thread_by_event_nameaWHEREa.THREAD_IDin(SELECTb.THREAD_IDFROMperformance_schema.replication_applier_status_by_workerb);3、一段时间后,统计各个同步线程的使用比率,SQL如下:SELECTSUM(COUNT_STAR)FROMrep_thread_countINTO@total;SELECT100*(COUNT_STAR/@total)ASthread_usageFROMrep_thread_count;

关于“Mysql5.7如何并行复制”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。