文章目录
一、MySQL 主从复制的本质原理
数据同步流程:
主从复制三大线程:
二、主从复制的三种模式
三、一主多从架构设计与应用
应用场景:
优势:
四、单机模拟主从复制(实战配置)
环境准备:
示例配置片段(my.cnf):
设置主从关系:
五、主主复制(双主复制)配置
原理:
关键注意事项:
示例配置(主 A):
使用场景:
六、项目中常见主从实践方案
七、故障应对与运维建议
结语
主从原理 + 多种复制场景 + 实战配置,一次讲清!
一、MySQL 主从复制的本质原理
MySQL 主从复制是通过 二进制日志(binlog)+ 中继日志(relay log) 机制实现的。
数据同步流程:
1. 主库开启 binlog,记录所有写操作
2. 从库的 I/O 线程向主库请求 binlog
3. 主库的 dump 线程将 binlog 发送给从库
4. 从库的 I/O 线程写入 relay log
5. 从库的 SQL 线程读取 relay log 并执行
主从复制三大线程:
名称 | 角色 | 功能 |
---|---|---|
Dump 线程 | 主库 | 向从库推送 binlog 内容 |
I/O 线程 | 从库 | 拉取 binlog 并写入中继日志 |
SQL 线程 | 从库 | 读取中继日志并执行 SQL |
二、主从复制的三种模式
模式 | 特点 | 延迟 | 一致性 |
---|---|---|---|
异步复制(默认) | 主库执行完即返回 | 低 | 可能丢数据 |
半同步复制 | 至少一个从库确认才返回 | 中 | 提高可靠性 |
GTID复制(基于事务ID) | 支持 failover 自动切换 | 更强一致性 | 更好容灾支持 |
三、一主多从架构设计与应用
一主多从是 MySQL 构建读写分离的常见架构:
+-----------+| || Master || |+-----------+/ | \/ | \+--------+ +--------+ +--------+| Slave1 | | Slave2 | | Slave3 |+--------+ +--------+ +--------+
应用场景:
-
主库处理写操作(INSERT/UPDATE/DELETE)
-
从库处理读请求(SELECT)
-
配合中间件(如 MyCAT、ShardingSphere、ProxySQL)实现自动读写分离
优势:
-
提升系统并发能力(读写分离)
-
降低主库压力
-
增加容灾能力,主挂后可快速切换为从
四、单机模拟主从复制(实战配置)
环境准备:
-
同一台主机运行多个 MySQL 实例(如 3306、3307)
-
修改配置文件以区分实例
示例配置片段(my.cnf):
[mysqld]
server-id=1 # 主从必须唯一
log-bin=mysql-bin # 主库需开启binlog
port=3306[mysqld2]
server-id=2
relay-log=mysql-relay
port=3307
设置主从关系:
-- 从库配置
CHANGE MASTER TOMASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl_pass',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS= 154;START SLAVE;
SHOW SLAVE STATUS\G;
五、主主复制(双主复制)配置
原理:
两台 MySQL 互为主从,都开启 binlog 与 relay log。
+-----------+ +-----------+| Master A | <-----> | Master B |+-----------+ +-----------+
关键注意事项:
-
两边写入不能写相同主键或数据 → 否则数据冲突
-
通常搭配 auto_increment_offset 和 auto_increment_increment 避免主键冲突
示例配置(主 A):
server-id=1
log-bin=mysql-bin
auto_increment_offset=1
auto_increment_increment=2
主 B:
server-id=2
log-bin=mysql-bin
auto_increment_offset=2
auto_increment_increment=2
使用场景:
-
多活读写(慎用,建议仅读活)
-
高可用自动切换(结合 MHA、Orchestrator 使用)
六、项目中常见主从实践方案
项目场景 | 推荐方案 | 说明 |
---|---|---|
中小型系统 | 一主两从 | 读写分离 + 冗余 |
高并发大读量 | 一主多从(>3) | 配合 ProxySQL 或 LVS 负载 |
容灾架构 | 主主复制 + keepalived | 主库故障时自动切换 |
单机模拟开发 | 3306 + 3307 模拟主从 | 便于学习测试复制流程 |
七、故障应对与运维建议
-
定期监控 Slave_IO_Running/Slave_SQL_Running
-
配置 slave_skip_errors 时慎重使用
-
使用 pt-table-checksum 保证主从一致
-
设置从库只读:
read_only=ON
结语
MySQL 的主从复制为分布式架构提供了坚实的基础。不论是一主多从、主主复制,还是读写分离,在不同规模和业务需求下都能灵活组合构建高可用、高性能的数据库架构。