
主从复制概述
MySQL 主从复制就是将一个 MySQL 实例(Master)中的数据实时复制到另一个 MySQL
实例(slave)中,而且这个复制是一个异步复制的过程。
实现整个复制操作主要由三个进程完成的,其中两个进程在 Slave(SQL_thread 和
IO_thread),另外一个进程在 Master(binlog dump 线程)上。
1. binlog dump 线程:负责将主服务器上的数据更改写入二进制日志中。
2. IO 线程:负责从主服务器上读取二进制日志,并写入从服务器的中继日志中。
3. SQL 线程:负责读取中继日志并重放其中的 SQL 语句。
主从复制原理
要实施复制,首先必须打开 Master 端的 binary log(bin-log)功能,否则无法实现。因为整
个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志
中所记录的各种操作。
主从复制原理图
复制的基本过程如下:
1. Slave 上面的 IO_thread 连接上 Master,并请求指定日志文件(bin-log file)的指定位
置(bin-log pos)之后的日志内容;
2. Master 接收到来自 Slave 的 IO_thread 的请求后,将指定日志指定位置之后的日志
信息,返回给 Slave 的 IO_thread。
3. Slave 的 IO_thread 接收到信息后,将接收到的日志内容依次添加到 Slave 端的
relaylog 文件的最末端,并将读取到的 Master 端的 bin-log 的文件名和位置记录到
master-info 文件中,以便在下一次读取的时候能够清楚的告诉 Master 需要某个
binlog 的哪个位置开始往后的日志内容;
4. Slave 的 SQL_thread 检测到 relaylog 中新增加了内容后,会马上解析 relaylog 的内
容,并在本数据库中执行。
整体上来说,复制有 3 个步骤:
1. master 将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,
评论