MySQL 主从复制+读写分离
·
MySQL 主从复制 + 读写分离
一、主从复制
1. 核心作用
- 数据冗余备份、故障恢复
- 实现读写分离、分摊主库压力
- 提升并发能力、避免锁冲突
2. 三核心组件
- binlog 二进制日志(主库):记录所有写操作
- IO 线程(从库):拉取主库 binlog → 写入 relay-log
- SQL 线程(从库):重放中继日志 → 保持数据一致
3. 完整流程

- 主库执行写操作,写入 binlog
- 从库 IO 线程连接主库请求日志
- 主库 dump 线程发送 binlog
- 从库写入 relay-log(中继日志)
- 从库 SQL 线程重放 SQL
- 主从数据保持一致
4. 实验拓扑
- mysql-master:192.168.108.101(主)
- mysql-slave01:192.168.108.102(从 1)
- mysql-slave02:192.168.108.103(从 2)
- amoeba:192.168.108.110(代理)
- mysql-client:192.168.108.111(客户端)
5. 主库配置要点
server-id = 11(唯一)log-bin = master-bin(开启 binlog)- 授权复制账号:
myslave/123456 - 记录
File和Position
6. 从库配置要点
-
server-id唯一(22、23) -
relay-log = relay-log-bin -
克隆机必须删除
auto.cnf避免 UUID 冲突 -
change master to指定主库信息 -
验证:
show slave status\G必须两个 YES
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
二、读写分离(基于 Amoeba 代理)
1. 核心规则
- 写操作(INSERT/UPDATE/DELETE)→ 主库
- 读操作(SELECT)→ 从库(轮询负载均衡)
2. 实现方式
基于中间代理层 Amoeba
- 架构:客户端 → Amoeba → MySQL 主从
- Amoeba 自动路由 SQL,对应用透明

3. 账号体系
- 主从复制账号:
myslave/123456 - Amoeba 连接 MySQL:
test/123.com - 客户端连接 Amoeba:
amoeba/123456
4. Amoeba 核心配置
-
dbServers.xml
- 定义 master、slave1、slave2
- 定义 readPool 负载均衡(轮询)
-
amoeba.xml
- 代理端口:8066
writePool = masterreadPool = readPool
5. 整体流程
- 客户端连接 Amoeba:8066
- 写 SQL → 转发 Master
- 读 SQL → 轮询转发 Slave1/Slave2
- 主从复制保证数据一致
三、总结
- 主从复制:主库写 binlog,从库 IO 拉日志、SQL 重放,实现数据实时同步。
- 读写分离:写走主库,读走从库,由 Amoeba 自动路由,提升性能与高可用。
更多推荐




所有评论(0)