MySQL的主从复制是一项重要功能,可以利用其实现读写分离、高可用,及备份等目的。众所周知,MySQL是一个单进程、多线程的数据库,在各项工作中调用了不同的线程,本篇将介绍在主从复制中所使用的线程。
主从复制的工作原理
注意:SQL线程写入从库时,采取单线程模式,或多线程模式。多线程模式下,需要将中继日志分发到多个工作线程。
Binlog Dump线程
“binlog dump” 是一个主服务器线程,用于将主库的二进制日志传输到从库。在 MySQL 主从复制过程中,主服务器会为每一个连接成功的从服务器创建一个“binlog dump”线程。从服务器也会为每一个连接成功的主服务器创建自己的I/O线程和SQL线程,以实现主从之间的数据同步。下面是其详细工作过程:
单线程从服务器
从服务器默认使用单线程处理中继日志,其优点是在一个数据库内的数据可以通过单线程保证其一致性。由于使用单线程,从服务器上可能会产生延迟,数据同步落后于主服务器。产生的原因是由于当多个客户端连接主服务器进行数据更新时,主服务器并行处理这些更新,但会将其在二进制日志中进行序列化,从服务器采用单线程处理这些更新时按序处理,极容易造成瓶颈。
多线程从服务器
使用多线程的从服务器可以减少从库延迟。开启多线程的方法为将变量“replica_parallel_workers”设置为0以外的值,该值即为并行的工作线程数量。当开启多线程从服务器时,从服务器的SQL线程不再直接应用中继日志中的更新事件,而是由工作线程替代其进行应用。
通过配置变量“replica_parallel_type”的值,指定并行处理的策略。
控制从服务器的线程
启动或停止I/O和SQL线程
START REPLICA;
STOP REPLICA;
单独控制线程
START REPLICA IO_THREAD;
STOP REPLICA SQL_THREAD;
满足条件启动线程
START REPLICA UNTIL SQL_AFTER_MET_GAPS;
START REPLICA SQL_THREAD UNTIL SQL_BEFORE_GTIDS = '3E11FA47-71CA-11E1-9E33-C80AA9429562:23';
断开主从连接
RESET REPLICA;
重置从服务器
用户可以通过“RESET REPLICA”命令重置从服务器的连接,该命令可以清除复制元数据存储库,删除所有中继日志文件,并启动一个新的中继日志文件。对于正在使用GTID的服务器,该命令对GTID执行历史没有影响,不会改变“gtid_executed”或“gtid_purged”的值,也不会改变mysql. gtid_executed表。
以上内容是关于主从复制中线程的介绍,感谢关注“MySQL解决方案工程师”!
本文分享自 MySQL解决方案工程师 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有