背景:
线上宕机,导致数据不一致,当时为了快速恢复业务,仅使用主库,现在需要恢复,因为主从数据相差比较大,所以对从库重新进行同步。(如果是很少的同步不一致,比如一条,可以直接跳过本次同步,不需要重新同步,可自行查找跳过命令)
1、首先重置从库的同步设置、并清除从库不一致数据
(1)#停止slave
stop slave;
#重置slave,会重置从库相关设置。
reset slave all;
(2)#清除已同步数据库
drop database `***`;
2、重置主库同步设置,锁定主库,备份主库
(1)多次查看主库状态
发现每次position位置都不同,说明主库数据一直在变,现在不能备份,需要在晚上人少的时候锁库备份。
(2)#重置主库同步设置
RESET MASTER;
(3)#锁定主库,只能读
FLUSH TABLES WITH READ LOCK;
(4)#查看锁定状态下主库的binlog和位置
重置后和锁库后的binlog的位置可能有变化,取锁库后的就行。
(5)备份数据,在linux命令行执行,不要在数据库内执行。
mysqldump –h(ip***) –P(port***) –u(user***) –p(pwd***) --all-databases > /master-dump.sql
(6)查看备份文件,解锁主库
#解锁主库
UNLOCK TABLES;
3、从库数据恢复,修改从库同步设置,启动从库
从库可选数据恢复方式
(1)因为直接对线上库操作,所以用的保守方法:先把备份sql传到从库,进入从库mysql,再使用 source / master-dump.sql ,如果数据量较大,执行需要一段时间
下边是执行完毕后可以查看同步过来的数据库信息
(2)修改从库同步设置,因为重置设置,所以用户名端口要再设置,赋值后查看:
(3)打开从库同步,两个yes,代表成功,可以自己验证了
- 参考
如何重置(重新同步)MySQL主从复制
MySql数据库备份与恢复——使用mysqldump 导入与导出方法总结