MySQL复制线程

复制线程

MySQL复制功能是通过以下三个主要线程实现的,其中一个在源服务器上,另两个在副本服务器上:

  1. 二进制日志转储线程(Binary log dump thread)。
    源创建一个线程,以便在副本连接时将二进制日志内容发送到副本。可以SHOW PROCESSLIST在源的输出中将该线程标识为Binlog
    Dump线程。

    二进制日志转储线程会获取源二进制日志上的一个锁,以便读取要发送到副本的每个事件。一旦读取了事件,锁就会被释放,甚至在事件被发送到副本之前。

  2. 复制I / O线程(Replication I/O thread)。当在副本服务器上发出START SLAVE语句时,副本创建一个I/O线程,该线程连接到源,并要求它发送其二进制日志中记录的更新。
    复制I / O线程读取源Binlog Dump线程发送的更新 (请参见上一项),并将其复制到副本的中继日志文件中。
    在SHOW SLAVE STATUS的输出中,该线程的状态显示为Slave_IO_running。

  3. 复制SQL线程(Replication SQL thread)。副本创建一个SQL线程来读取复制I/O线程写入的中继日志,并执行其中包含的事务。

总结

每个源/副本连接都有这三个主线程。具有多个副本的源会为每个当前连接的副本创建一个二进制日志转储线程,而每个副本有自己的复制I/O和SQL线程。

副本使用两个线程从源文件中分离读取更新,并将它们执行到独立的任务中。因此,即使应用事务的过程较慢,读取事务的任务也不会变慢。例如,如果复制服务器一段时间没有运行,那么当复制启动时,它的I/O线程可以快速地从源获取所有二进制日志内容,即使SQL线程远远落后于它。如果复制在SQL线程执行所有获取的语句之前停止,那么I/O线程至少已经获取了所有内容,以便事务的安全副本存储在本地的副本的中继日志中,以便在下次复制启动时执行。

通过将slave_parallel_workers系统变量设置为大于0(默认值)的值,可以为副本上的任务启用进一步的并行化。设置此系统变量后,副本将创建指定数量的工作线程来应用事务,以及一个协调线程来管理事务。如果您正在使用多个复制通道,那么每个通道都有这个数量的线程。将slave_parallel_workers设置为大于0的值的副本称为多线程副本。通过这种设置,可以重试失败的事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值