MySQL 读写分离:主从复制,提升并发处理能力
前言
单库所有读写都压在一台服务器,读请求量大时 CPU、IO 打满。读写分离架构:主库 Master 负责写操作,从库 Slave 负责查询读操作,分摊数据库压力,横向扩容读能力。底层依靠 MySQL 主从复制同步数据。
一、主从复制原理
- Master 执行增删改,记录操作到 binlog 二进制日志;
- Slave IO 线程拉取 Master binlog 日志;
- Slave SQL 线程重放日志,同步数据,保证主从数据一致。
二、主库 Master 配置 my.cnf
server-id = 1 log_bin = mysql-bin binlog_format = row expire_logs_days = 7创建同步账号:
CREATE USER 'repl'@'从库IP' IDENTIFIED 'Repl@123'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP'; FLUSH PRIVILEGES; -- 查看binlog位置 SHOW MASTER STATUS;三、从库 Slave 配置
server-id = 2 relay_log = relay-bin read_only = 1绑定主库同步:
CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='Repl@123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=156; START SLAVE; -- 查看同步状态 SHOW SLAVE STATUS\G关键指标:Slave_IO_Running、Slave_SQL_Running都为 Yes 代表同步正常。
四、业务读写分离落地
- 写操作(INSERT/UPDATE/DELETE)全部路由至主库;
- 查询、分页、报表、列表走从库;
- 中间件方案:MyCat、Sharding-JDBC 自动路由读写;
- 短期数据延迟方案:新增数据实时查询走主库,列表查询走从库。
五、主从避坑
- 主从存在毫秒级数据延迟,强一致性场景不能读从库;
- 避免大事务导致同步延迟堆积;
- 定期监控 Slave 同步状态,断线及时修复。
