难点描述: 在高并发写入场景下,从库(Slave)的数据经常落后于主库(Master)。导致用户刚修改完数据,刷新页面看到的还是旧数据(幻读现象)。
原理: MySQL 传统的主从复制是基于 Binlog 的。主库也是多线程并发写入,但早期的从库 SQL 线程是单线程回放 Binlog 的。当主库 TPS 很高或有大事务(如大表 DDL、大批量 Delete)时,从库处理速度跟不上主库产生日志的速度。
解决方案:
- 架构层面: 开启 MTS (Multi-Threaded Slave) 并行复制(MySQL 5.7+ 默认支持基于组提交的并行复制)。
- 业务层面: 对于必须强一致性的读请求(如支付成功后的查单),强制路由到主库查询。
- 排查层面: 避免大事务,将大批量的 DELETE/UPDATE 拆分为小批次执行。


评论