MySQL 数据库复制(Replication)的核心原理是 基于二进制日志(Binary Log,简称 binlog)的异步复制机制,主库将变更记录到 binlog,从库读取并重放这些变更,从而实现数据同步。下面从整体架构、关键流程、工作细节和常见模式来说明。
MySQL 复制是一种 主从(Master–Slave)架构:
从 MySQL 5.7 开始,也支持多主、级联复制等复杂拓扑。
前提条件:
log_bin过程:
INSERT / UPDATE / DELETEbinlog 格式有三种:
STATEMENT:记录 SQL 语句(可能主从不一致)ROW(推荐):记录每一行数据的变化MIXED:混合模式✅ 生产环境强烈推荐使用 ROW 模式
从库上有两个核心线程:
类似“下载 + 缓存”
⚠️ 早期版本中,SQL 线程是单线程,容易成为瓶颈
✅ MySQL 5.7+ 支持 并行复制(MTS)
主库
├─ 执行事务
├─ 写 binlog
│
从库
├─ I/O 线程 → 拉取 binlog → 写入 relay log
├─ SQL 线程 → 读取 relay log → 执行 SQL
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
server-id = 2
relay_log = relay-bin
read_only = 1
SHOW SLAVE STATUS\G
重点关注:
Slave_IO_RunningSlave_SQL_RunningSeconds_Behind_MasterMySQL 默认复制是 异步复制:
✅ 优点:性能高
❌ 缺点:
| 复制模式 | 说明 |
|---|---|
| 异步复制 | 默认,性能最好 |
| 半同步复制 | 主库至少等一个从库 ACK |
| 组复制(MGR) | 基于 Paxos,强一致 |
| 级联复制 | 从库作为其他从库的主库 |
相关参数:
slave_parallel_workers = 4
slave_parallel_type = LOGICAL_CLOCK
MySQL 复制的本质是:主库把数据变更记录到 binlog,从库通过 I/O 线程拉取并在本地重放,从而实现数据同步。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。