mysql传统主从模式下,主从中断接续

现象描述

传统模式的mysql主从。

Slave因为大事务延迟巨大。从库重启前的记录位点在binlog:552,pos:471157766

Relaylog:629,pos:496188584

从库重启后binlog倒退到221

Relaylog反而到了1653

故障判断

IO thread 为no,而SQL thread为yes。

通过relog index也确认1633是最新的relaylog。

判断:从库在重启时relay自动应用到了最新,但是在获取主库的binlog位置时失败。

因为是传统模式的m-s主从,需要手工找出接续的位点。

解决办法

分析relaylog 1653发现其是空事务

遂分析relaylog1652最后部分

可以看到end_log_pos是488269909

在主库上488269909的binlog file我们通过大概的分析获得。这里分析得到是binlog000552

CHANGE MASTER TO

  MASTER_HOST='master_host_name',  -- 主服务器的地址

  MASTER_USER='replication_user',   -- 用于复制的用户

  MASTER_PASSWORD='replication_password',  -- 复制用户的密码

  MASTER_LOG_FILE='mysql-bin.000552',  -- 二进制日志文件名

  MASTER_LOG_POS=488269909;                -- 二进制日志中的位置

重启slave

START SLAVE;

IO thread继续成功,但是有数据不一致问题。从库还是重建了。

试错附录

Error 1236 * log event entry exceed max_allocated_packet

主库master侧的max_allocated_packet太小。估计和解析binlog位置的sql太大有关

Error 1236  * bogus data in log event

在指定master log的pos的时候尝试使用过488269909+1,会导致以下报错

然后再去使用以上的最后位置的488269948就会得到上一张截图的错误。

分析这里是指定接续位点。这里不需要想当然的+1计算。这个pos不是scn这种逻辑值,是直接的物理bytes位置。直接使用最后relaylog中的最后的end_pos:488269948即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值