mysql主从复制是常用的数据库高可用和读写分离方案,当业务架构调整或者需要下线从库节点时,就需要删除已经配置好的主从复制。删除操作需要同时在主库和从库执行对应命令,确保复制关系完全解除,避免残留配置引发后续问题。

操作前的准备工作
在删除主从复制之前,需要先确认当前主从复制的运行状态,同时做好数据备份,避免操作过程中出现数据丢失。首先登录从库执行以下命令查看复制状态:
-- 查看从库复制状态 SHOW SLAVE STATUSG;
如果Slave_IO_Running和Slave_SQL_Running两个字段的值都是Yes,说明当前复制正在正常运行,需要先停止复制线程再执行后续操作。如果已经处于停止状态,可以直接进行重置操作。
从库端删除主从复制配置
从库是主从复制的接收端,首先需要停止从库的复制线程,然后重置复制相关的配置,清除之前保存的主库连接信息、复制位点等数据。
停止从库复制线程
执行以下命令停止从库的IO线程和SQL线程:
-- 停止从库复制 STOP SLAVE;
执行完成后再次查看SHOW SLAVE STATUSG,确认Slave_IO_Running和Slave_SQL_Running都变为No,说明复制线程已经成功停止。
重置从库复制配置
停止复制线程后,执行重置命令清除从库的复制配置:
-- 重置从库复制配置,清除主库连接信息、中继日志等 RESET SLAVE ALL;
这里要注意RESET SLAVE和RESET SLAVE ALL的区别,前者只会清除中继日志和复制位点,不会删除主库的连接配置,后续执行START SLAVE还会重新连接主库;后者会完全清除所有复制相关的配置信息,是彻底删除主从复制的正确命令。
主库端清理复制相关信息
从库删除配置后,主库侧还可能存在之前创建的复制用户、复制相关的二进制日志等残留信息,也需要根据情况清理。
删除复制专用用户
如果主从复制使用的是专用的数据库用户,不再需要该用户时可以将其删除:
-- 查看当前用户 SELECT user,host FROM mysql.user; -- 删除复制用户,假设用户是repl,允许从192.168.0.%的地址连接 DROP USER 'repl'@'192.168.0.%';
如果后续还可能搭建新的主从复制,可以保留该用户,不需要执行删除操作。
清理二进制日志(可选)
如果主库的二进制日志占用空间过大,且没有备份需求,可以清理不需要的二进制日志:
-- 查看当前二进制日志列表 SHOW BINARY LOGS; -- 删除指定时间之前的二进制日志,比如删除3天前的日志 PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 3 DAY); -- 也可以直接重置所有二进制日志,会生成新的日志文件,原有日志全部删除 RESET MASTER;
注意RESET MASTER会清空所有二进制日志,如果主库还有其他从库在运行,或者有基于二进制日志的备份需求,不要执行这个命令,避免影响其他业务。
操作验证
完成上述操作后,需要验证主从复制是否已经完全删除。可以再次登录从库执行SHOW SLAVE STATUSG,如果返回的结果中没有任何主库连接信息,说明从库的复制配置已经完全清除。同时可以在主库执行SHOW PROCESSLIST;,查看是否还有从库连接的复制线程,如果没有相关线程,说明主从复制已经彻底删除。
注意事项
- 删除主从复制前一定要确认业务已经不再依赖该从库提供服务,避免影响线上业务。
- 操作前做好数据备份,尤其是从库如果存储了独立业务数据,防止误操作导致数据丢失。
- 如果主库有多个从库,删除其中一个从库的复制配置时,不要操作其他从库,也不要随意清理主库的二进制日志。
- 执行
RESET SLAVE ALL前确认复制线程已经停止,否则可能会报错。