MySQL主从复制详解(架构+原理+图解)

MySQL是大型架构的核心,下面我重点详解MySQL主从复制@mikechen

MySQL主从

MySQL 主从复制(Master-Slave Replication),也称主从同步。

MySQL主从复制详解(架构+原理+图解)-mikechen

MySQL主从复制是数据库高可用、读写分离与备份恢复的重要手段。

 

MySQL主从架构

MySQL主从复制架构,如下:

MySQL主从复制详解(架构+原理+图解)-mikechen

                  +-------------------+
                  |      Master       |
                  |  server-id = 1    |
                  |  binlog 开启      |
                  |  Binlog Dump Thread|
                  +-------------------+
                           |
                           |  (TCP 3306 端口传输 binlog events)
          +----------------+-----------------+
          |                                 |
          v                                 v
+---------------+                 +---------------+
|    Slave 1    |                 |    Slave 2    |
| server-id = 2 |                 | server-id = 3 |
| IO Thread     |                 | IO Thread     |
| SQL Thread    |                 | SQL Thread    |
| relay-log     |                 | relay-log     |
+---------------+                 +---------------+
          |                                 |
          v                                 v
     Slave 数据文件                    Slave 数据文件

主库(Master):负责处理写请求并将变更记录到二进制日志(binlog)。

从库(Slave):接收并应用来自主库的变更,通常负责读请求或备用切换。

IO 线程(Slave_IO):在从库上启动,与主库建立连接并读取主库的 binlog,写入从库本地的中继日志(relay log)。

SQL 线程(Slave_SQL):在从库上读取中继日志并将事件应用到从库数据文件。

复制拓扑可为一主多从、链式复制(主→从A→从B)或环形/多主(需额外冲突解决机制)等。

 

MySQL主从原理

主从复制,通常基于 MySQL 的 binlog。

MySQL主从复制详解(架构+原理+图解)-mikechen

首先,主库在执行 DDL 或 DML 时把变更写入 binlog;

然后,从库的 I/O 线程连接主库后拉取 binlog 内容,写入本地 relay log;

随后, SQL 线程读取 relay log 并在从库上顺序执行,从而达到同步效果。

简单来说,主库将所有数据变更记录在 binlog 中。

从库读取这些记录,并在自己身上重新执行一遍,从而保持数据同步。

 

 

评论交流
    说说你的看法