情况说明
因为各种原因造成从库同步失败。从库与主库不同步。
为尽量少影响线上服务,选择在使用低谷进行操作。
主要步骤
首先从库 停止同步
登录进入:mysql -uroot -pxxxx
停止同步:stop slave;
主库
备份数据:mysqldump -uroot -pxxx --single-transaction --master-data=2 --databases db1> db1.sql
不停服两个主要参数说明
--single-transaction
--master-data=2
master-data参数主要用来记录主库的binlog_file和pos,它有两个值,分别是:
‘1’:在mysqldump过程中,将binlogfile和pos信息记录在sql中,并且不是以注释信息的方式记录,这样在执行导入的时候自动执行这部分信息
‘2’:在mysqldump过程中,将binlogfile和pos信息以注释的方式记录在sql中
single-transaction参数则是通过提交单一事务来确保数据一致性,通过在FLUSH TABLES WITH READ LOCK 后添加START TRANSACTION 语句,开启单一事务,此时加锁,仅仅是为了获取准确的master-data中的binlogfile和pos信息,在开启事务后,锁已经释放了,所以对业务影响很小
通过以上两个参数,可以在不长时间锁表的情况下获取准确的binlogfile和pos信息,从而完成主从配置
3.从库重置slave
重置同步:reset slave //会清楚原有的relaylog,重新生成新的relaylog 00001开始
4.删除从库对应db
drop database db1;
5.从库 导入数据 mysql -uroot -p < db1.sql
6.从库 修改同步位置:
获取位置-再db1.sql 的前几十行中存在
head -40 db1.sql 会找到对应的sql
CHANGE MASTER TO MASTER_LOG_FILE='MySQL-bin.000077', MASTER_LOG_POS=183240705;
7.从库开启同步
start slave;
8.查看同步状态
show slave status\G;
如上图
Seconds_Behind_Master:0 代表与主库最新记录时间差距,为0代表已经同步完成。
乐享:知识积累,快乐无限。