当前位置: 首页 > news >正文

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即可

相关文章:

  • 热门面试题第13天|Leetcode 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数
  • 贪心:一道简单题的细节问题
  • 批量给 PPT 文档添加或删除保护,批量设置打开密码和只读密码
  • Elasticsearch 文档
  • 向量化地图重建
  • vue java 实现大地图切片上传
  • 高速开源镜像站网址列表2503
  • c++11 | 细说智能指针
  • Linux驱动开发--IIC子系统
  • windows与linux开发板之间设置nfs共享文件
  • 透析React Fiber架构
  • 【Cadence速成】半小时速成Cadence制图与PCB绘制(OrCAD+Allegro)
  • struts2框架漏洞攻略
  • Spring Boot3 配置文件
  • maven如何区分多环境配置
  • 尝试在软考62天前开始成为软件设计师-信息系统安全
  • 模糊数学 | 模型 / 集合 / 关系 / 矩阵
  • value-key 的作用
  • C语言为什么不考虑对齐规则?
  • Go常见问题与回答(上)
  • 多地警务新媒体整合:关停交警等系统账号,统一信息发布渠道
  • “降息潮”延续,多家民营银行下调存款利率
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判
  • 母亲节书单|关于生育自由的未来
  • 习近平圆满结束对俄罗斯国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 巴基斯坦外长:近期军事回应是自卫措施