MySQL-主从复制原

Posted shark_西瓜甜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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被称为一个多线程的复制品。通过此设置,可以重试失败的事务。

以上是关于MySQL-主从复制原的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 主从添加新从库

MySQL主从延时复制

MySQL主从复制与读写分离配置及实操

MySQL 主从复制与读写分离(原理深刻,过程详细,值得一看)

MySQL主从复制与读写分离

MySQL主从复制及读写分离实际部署与验证