mysql 主从同步不一致_聊聊MySQL主从同步那些坑!

用过MySQL 主从的同学,肯定遇到过不同步问题,下面我们就此问题聊一下。

28558e155a55d9cfd95575675e3d6f55.png

一. 查看同步状态

从库:

show slave status G;

.....

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

.....

这两个参数必须都是yes为同步成功

如果这两项有NO ,同步出现了问题

cb6d64f772f77931363d3aa13357bd58.png

a. 如果Slave_IO_Running为NO ,

一般网络有问题,或是复制账号密码有问题,

可以通过log查看出现的问题;

b.如果Slave_SQL_Running为NO

可能sql出错,或是从库执行了写操作

例如:主库存在而从库不存在的表,在往里插入数据时,就会出错,从而同步异常

c. 如果都是NO

多为网络有问题

二. 问题修复

a.如果错误较少

在从库执行

stop slave;

set global sql_slave_skip_counter =1;// 这里是跳过的错误个数

start slave;

如果错误比较多,可以在my.cnf中添加slave-skip-errors=all

b.一旦同步出了问题,数据就可能不一致,如果不允许数据不一致,就要重新同步

三. 重新同步

方法一

主库

先锁表,禁止主库写入

FLUSH TABLES WITH READ LOCK;

记录同步文件和同步位置,下面要使用

show master status;

File: mysql-bin.000045

Position: 224954326

从主库导出数据文件

mysqldump -u root -ppassword --opt -R database > data.sql

将数据导入从库

将data.sql传到从库,在从库导入

mysql -uroot -p database < data.sql

主库恢复写入

UNLOCK TABLES;

从库重新设置:

slave stop;

reset slave;

change master to master_host='IP',master_user='rep_db_user',master_password='password',master_log_file='mysql-bin.000045',master_log_pos=224954326;

slave start;

方法二. 文件同步的方式

1. 停掉主和从server ,主 reset master ;

2. 把主datadir文件复制到从库

3. 重新配置同步信息

reset slave;

change master to master_host='IP',master_user='rep_db_user',master_password='password',master_log_file='mysql-bin.000045',master_log_pos=224954326;

slave start;

不同的版本命令略有不同,具体看到官方文档。

综上,MySQL这种主从同步虽然易配易用 ,但很容易出问题,给人不可靠的感觉,要想搭建稳定 可靠的系统,最好要配合其他的中间件和相应的监控措施。

你在使用中有什么好方法呢,遇到过哪些坑呢,欢迎留言讨论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值