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

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


http://www.kler.cn/a/599741.html

相关文章:

  • 探究Three.js中模型移动与旋转的交互逻辑
  • venv 和 conda 哪个更适合管理python虚拟环境
  • 内网穿透的应用-本地部署ChatTTS教程:Windows搭建AI语音合成服务的全流程配置
  • LeetCode讲解篇之456. 132 模式
  • 鸿蒙生态开发
  • OSI 模型详解及详细知识总结
  • C# CancellationTokenSource CancellationToken Task.Run传入token 取消令牌
  • 使用 Nginx 实现镜像流量:提升系统可用性与负载均衡
  • 深入剖析ReLU激活函数:特性、优势与梯度消失问题的解决之道,以及Leaky ReLU 和 Parametric ReLU
  • WordPress分类目录绑定二级域名插件
  • 【Vitis AI】FPGA设备使用PyTorch 运行 ResNet18获得10000fps
  • 制作PaddleOCR/PaddleHub的Docker镜像
  • L2-052 吉利矩阵
  • 从双指针到单调栈,深挖“接雨水”的算法奥秘
  • 价值流映射(Value Stream Mapping):从流程可视化到敏捷效能革命
  • Haption力反馈遥操作机器人:6自由度高精度技术,定义远程操作新标准
  • 【Tauri2】001——安装及运行
  • 算法关键知识汇总
  • 人工智能笔记
  • 浅谈:《嵌入式软件中的那些数据结构》