0. 背景
三台MySQL服务器,一主两从,Ubuntu操作系统。由于没有设置binlog的过期时间,导致/var/lib/mysql挂载的磁盘被撑爆。幸好主库还有点磁盘空间,主库MySQL服务还正常。两个从库已经无法通过MySQL命令进入MySQL服务,查看systemctl status mysql已经显示MySQL不正常,执行systemctl start mysql已经无法启动MySQL服务
1. 先备份主库数据
肯定第一时间备份主库数据
- 停掉所有连接MySQL的进程,保证MySQL没有数据写入。如果做不到,就登录MySQL,执行
FLUSH TABLES WITH READ LOCK;锁定主库,停止数据写入。然后执行SHOW MASTER STATUS;查看主库状态,记录File和Position的值。注意:这个MySQL窗口不能关闭,也不同通过exit退出这个MySQL窗口,否则就无法持续锁定主库了 - 执行
mysqldump --all-databases --set-gtid-purged=OFF > /xxx/xxx.sql备份主库,有备份心里就不慌。
2. 解决从库MySQL起不来的问题
如果能给/var/lib/mysql进行扩容那最好了。如果没办法给/var/lib/mysql进行扩容,可按日期删除最旧的binlog或relaylog,腾出部分空间后尝试systemctl start mysql启动MySQL
3. 重建主从复制关系
-
登录从库MySQL,执行
STOP SLAVE;RESET SLAVE;RESET MASTER;彻底清空主从复制关系 -
将之前主库上通过
mysqldump命令备份的SQL文件拷贝到从库,然后到从库上执行mysql < /xxx/xxx.sql重建从库 -
登录从库MySQL,执行
CHANGE REPLICATION SOURCE TO SOURCE_HOST='主库IP', SOURCE_USER='主库用户名', SOURCE_PASSWORD='主库密码', SOURCE_AUTO_POSITION=0, SOURCE_LOG_FILE='之前记录的主库File', SOURCE_LOG_POS=之前记录的主库Position;。然后执行START SLAVE;重启主从复制。执行SHOW SLAVE STATUS;查看主从复制状态是否正常
4. 解锁主库
退出之前执行了 FLUSH TABLES WITH READ LOCK;的MySQL窗口,解锁主库。