缩容MySQL从库需先确认其是否承载真实读流量,再停复制并核对同步状态,接着从HA工具、代理层等上层配置中移除节点,最后归档关键信息并清理磁盘。

缩容从库 MySQL 节点不是简单删掉一台机器,关键在于确保主从数据一致性、避免复制中断、不影响线上读业务,并安全下线节点。
确认该从库是否被业务实际使用
先查清楚这个从库是不是真正在承担读流量。很多环境存在“僵尸从库”——配置在负载均衡或中间件里但长期无请求,或已被新节点替代。可通过以下方式验证:
- 检查代理层(如 ProxySQL、MyCat、ShardingSphere)的后端节点列表和当前活跃连接数
- 登录该从库执行 SHOW PROCESSLIST,观察是否有来自应用服务器的持续查询连接
- 查看监控系统(如 Prometheus + Grafana)中该实例的 QPS、InnoDB Rows Read 等指标最近 24 小时趋势
停止复制并核对数据同步状态
确认可下线后,需安全停掉复制链路,防止误操作导致主库压力突增或 GTID 位点混乱:
- 在从库上执行 STOP SLAVE;,再运行 SHOW SLAVE STATUS\G 确认 Slave_IO_Running 和 Slave_SQL_Running 均为 No
- 比对 Exec_Master_Log_Pos 和 Read_Master_Log_Pos 是否相等,确保 SQL 线程已追平(尤其在异步复制模式下)
- 若启用 GTID,检查 Retrieved_Gtid_Set 是否等于 Executed_Gtid_Set,表示已完全同步
从高可用与中间件配置中移除节点
数据库层停复制只是第一步,必须同步清理所有依赖它的上层配置,否则可能引发故障:
- 更新 MHA、Orchestrator 或自研 HA 工具的配置,剔除该节点,避免故障转移时误选
- 从 ProxySQL 的 mysql_servers 表中删除对应记录,并执行 LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;
- 若使用 DNS 轮询或 VIP,需更新 DNS 记录或调整 Keepalived/VIP 绑定策略
归档与清理(非强制但推荐)
下线前保留关键信息,便于后续审计或回溯:
- 导出该从库的 SHOW SLAVE STATUS\G、SELECT @@server_id, @@server_uuid; 结果存档
- 备份其 my.cnf 配置文件及启动参数,特别关注 read_only、super_read_only、relay_log 等设置
- 确认磁盘数据已清空或打上标记(如重命名 datadir),避免被误重启或混入新集群










