mysql 主主同步 问题_【MySQL】关于恢复MySQL主主数据的同步问题

一、实验背景和环境

MySQL + keepalived主主(互为主从)架构

c773ee4366e4

操作系统:CentOS7.5 Minimal

mysql01  192.168.1.104    数据库目录/opt/data/mysql

mysql02  192.168.1.105    数据库目录/opt/data/mysql

vip          192.168.1.110

现在mysql02去同步mysql01失败,  数据相差几十上百G,vip一旦漂移到mysql02上,会导致整个业务不可用。

怎样可以快速恢复两个数据库的数据同步,使得vip漂移到任何一台数据库,业务都正常运行?

二、实验预期

现在需要实现:

1.在mysql01 mysql02数据库上执行 show slave status\G

Slave_ IO_ Running: Ye

Slave_ SQL_ Running: Yes

c773ee4366e4

2.数据文件大小同步

三、实验操作

从实验背景可知,mysql01和mysql02两个数据刚安装完成时,互为主从,数据同步正常,运行过程中某些原因导致mysql02去同步mysql01故障,而对外提供服务的vip一直在mysql上,数据一直写入在mysql01上,最终导致发现时,mysql02数据跟mysql01上的数据相差巨大,需要手工同步,同时也警示我们要重视数据同步监控报警的重要性!

从上可知,对mysql02而言,其数据已经没有意义了,可以直接删除,现在需要的直接将mysql01的数据拷贝给mysql02,实现主从同步。

大方向没有问题,关键在于细节处理,mysql01 mysql02 都开启了 二进制binlog  中继日志 relaylog  和 慢日志slowlog ,我们拷贝mysql01的系统数据和业务数据到mysql02,而不需要mysql01的二进制binlog  中继日志 relaylog  和 慢日志slowlog。

1. 暂停业务,找一台空闲服务器,将mysql01、 mysql02的所有数据备份

2. 分别在mysql01  mysql02 停止mysql服务

# systemctl  stop mysqld

3. 在mysql02 ,删除mysql所有其他数据,只备份/opt/data/mysql/auto.cnf 文件

#  cp  /opt/data/mysql/auto.cnf  /home/auto.cnf.bak

# rm  -rf  /opt/data/mysql/*

4. 删除mysql01的二进制binlog  中继日志 relaylog  和 慢日志slowlog

# cd  /opt/data/mysql

#  rm  -rf    主机名-bin.*  主机名-relay-bin.*  主机名-slow*

c773ee4366e4

5. 拷贝mysql01的数据文件到mysql02数据目录

#  scp  -r  /opt/data/mysql/*    root@192.168.1.105:/opt/data/mysql/

6. 在mysql02上还原auto.cnf文件,更改拷贝过来的文件属主属组

#  cp /home/auto.cnf.bak      /opt/data/mysql/auto.cnf

# chown  -R  mysql:mysql    /opt/data/mysql/

7. 在mysql01 mysql02 上启动 mysql和keepalived

# systemctl start  mysqld

# systemctl restart keepalived

# systemctl status  mysqld keepalived

c773ee4366e4

四、数据同步和验证

登录mysql01

# mysql -u root -p"MySQL@123"

> stop slave;

> reset slave;

> reset master;

>  change master to master_host='192.168.1.105',master_port=3306,master_user='repl',master_password='MySQL@123',master_auto_position = 1;

> start slave;

> show slave status\G

c773ee4366e4

可以看出,mysql01 同步mysql02正常!

登录mysql02

# mysql -u root -p"MySQL@123"

> stop slave;

> reset slave;

> reset master;

>  change master to master_host='192.168.1.104',master_port=3306,master_user='repl',master_password='MySQL@123',master_auto_position = 1;

> start slave;

> show slave status\G

c773ee4366e4

可以看出,mysql02 同步mysql01正常!

现在,实现了 mysql01 mysql02 的主主同步,剩下的事就是启动服务,看对业务是否有影响。

五、回退方案

如果同步失败,我们至少保留了同步前,mysql01 的全部数据,停服务器和数据库,回填数据,启动数据库和服务。

六、参考

数据库之架构:主备+分库 or 主从+读写分离

https://www.cnblogs.com/littlecharacter/p/9084291.html

用shell脚本批量生成测试用SQL语句

https://my.oschina.net/zhuguowei/blog/474572

Tools for Generating Mock Data?

https://stackoverflow.com/questions/591892/tools-for-generating-mock-data

MySQL Sharding 批量执行工具

https://github.com/shilion/mysqlbatch

解决mysql开启GTID主从同步出现1236错误问题

https://blog.51cto.com/hnr520/1883282

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值