欢迎光临,赤鹿小组
记录过程,分享经验

MySQL 主从复制不一致,不停库不锁表恢复主从同步

之前,搭建了 MySQL 主从同步。但是最近 MySQL 数据库出现异常,Slave_IO_RunningSlave_SQL_Running 其中一个不为 yes,导致主从数据不一致。但是由于该数据库是提供给大数据使用,时刻都有数据写入,而且在备份的时候不能锁表。所以,在查找了资料之后,得知可以利用主库的 偏移量 进行从库的恢复,从而实现 不停主库 不锁表不影响业务的情况下恢复主从架构。

注意: 进行此操作时,确认在之前已经开启了 MySQL 的 bin-log 日志,如果没有则无法实现

为了安全考虑,我们授权一个用户进行数据备份:

[[email protected] ] mysql -uroot -p
mysql> grant all on *.* to 'skon'@'192.168.1.1' identified by 'user_passwd';

备份主库上的数据库数据,注意添加以下选项

[[email protected] ] mysqldump -uskon -p  --single-transaction --master-data=2 --no-autocommit  -A > alldatas.sql

参数含义请参考官方文档:
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_events

如果想要备份指定库,需要添加 replicate_wild_do_table 选项,为了保持数据的完全一致性,个人不建议只备份指定库。

1、将从库上的数据库清空,并还原为普通的数据库,(删除 master.info relay-log.info relay-bin.index )
2、重置 MySQL 数据库的 master 和 slave ,重置 slave 时,先停止 slave(stop slave;)

[[email protected] ] mysql -uroot -p
mysql> reset master;
mysql> show master status\G
mysql> stop slave;
mysql> reset slave;
mysql> show slave status\G
# 这里可以看到,master和slave已经被重置

接下来就是 导入数据库信息,导入之后 重新指向主库
注意:重新指向主库的 master_log_filemaster_log_pos,不是主库 show master status; 显示的信息,而是从主库上备份的文件里的信息,如下图:
Mysql master-slave

接下来在 从库 上进行操作:

[[email protected] ] mysql -uroot -p < alldatas.sql
[[email protected] ] mysql -uroot -p
mysql > change master to
-> master_host='192.168.1.1',
-> master_user='Skon',
-> master_password='Skon123',
-> master_log_file='binlog.000204',
-> master_log_pos=547507087;
mysql > start slave;
mysql > show slave status\G

最终的结果如下图:
Mysql master-slave

可以看到 Slave_IO_RunningSlave_SQL_Running 均为 yes,说明主从同步已经恢复;
Seconds_Behind_Master 刚开始的数值会很大,最后会逐渐的减至为 0,说明从库正在从主库上写入之前没有同步的数据,直至同步完成。

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址