MySQL-主从复制原

MySQL 复制功能使用三个主线程实现,一个在 master 服务器上,两个在 slave上:

  • Binary log 转储线程。 当 slave 连接时到 master,master 创建一个线程将二进制日志内容发送到 slave 。该线程可以在 master 的 MySQL命令行中执行SHOW PROCESSLIST命令,输出中标识为Binlog Dump线程。

    二进制日志转储线程获取 master 二进制日志的锁,用于读取要发送到 slave 的每个事件。一旦事件被读取,锁就会被释放,甚至在事件被发送到 slave 之前。

  • Replication I/O 线程。 当在 slave 服务器上发出一条START SLAVE语句时, slave 会创建一个 I/O 线程,该线程连接到 master 并要求它发送记录在其二进制日志中的更新。

    slave 的复制 I/O 线程读取 master Binlog Dump线程发送的更新 (请参阅上一项)并将它们复制到包含中继日志的本地文件。

    在 slave 上执行 SHOW SLAVE STATUS语句的输出中,该线程的状态显示为: Slave_IO_running

  • Replication SQL 线程。 slave 创建一个 SQL 线程来读取由 Replication I/O 线程写入的中继日志并执行其中包含的事务。

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

slave 使用两个线程将读取更新与 master 分开,并将它们执行到独立的任务中。因此,如果应用它们的过程很慢,读取事务的任务不会减慢。例如,如果 slave 服务器有一段时间没有运行,它的 I/O 线程可以在 slave 启动时快速从 master 中获取所有二进制日志内容,即使 SQL 线程远远落后。如果 slave 在 SQL 线程执行完所有获取的语句之前停止,则 I/O 线程至少获取了所有内容,以便将事务的安全 slave 本地存储在 slave 的中继日志中,以备下次执行 slave 开始。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值