记一次mysql主从不同步的经历

记一次mysql主从不同步的经历

近期进行机房迁移,很重要的一步就是迁移数据库。

问题描述:

几个月前搭建好了数据库的双主结构,使用vip漂移的形式。近期发现数据没有同步。

可能的原因:

可能是中间关过机导致的?

 

问题说明:

方便叙述,假设两台主机的ip分别为A和B

双主结构采用binlog互相复制的形式,可以在A主机上使用命令

show master status

命令查看自己的binlog文件和postion。

这里的postion指的是binlog当前的写入位置。比如binlog是mysql-bin.000005, postion是1234

则B主机必须使用命令

change master to master_host='A',master_user='repl',master_password='xxxxx',master_log_file='mysql-bin.000005',master_log_pos=1234;start slave;

进行配置,表示B主机监视A主机的mysql-bin.000005文件,从该文件的1234位置开始监控。

这个postion表示的是当前的binlog位置,因为数据库写入操作都会记录binlog,所以每次写入操作该值都会变化。

同样的,A主机也要做相同的配置,监视B主机的binlog的当前位置。

 

另外,mysql重启实例的时候,会重新创建一个binlog文件。

 

问题解决:

因为中间重启过实例,之前的修改无法通过binlog来同步了。但是因为服务并没有启动,可以停机操作。

方法:

1. 先关掉双方的数据同步:

slave stop;

 

2. 导出A主机的全量数据,并且记录导出A主机数据那一刻的A主机position(这一步用脚本做),假设是2000。

 

3. 在B主机导入A主机的全量数据,并修改追踪的postion位置

change master to master_host='A',master_user='repl',master_password='xxxxx',master_log_file='mysql-bin.000005',master_log_pos=2000;start slave;

 

3. 查看B主机当前的postion

show master status;

假设是3000

 

4. 在A主机上设置追踪B主机的postion

change master to master_host='A',master_user='repl',master_password='xxxxx',master_log_file='mysql-bin.000005',master_log_pos=3000;start slave;

 

问题解决。

中间还用到了一个工具,pt,可以操作数据库,比如可以导出创建用户的语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值