前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[MYSQL] mysql主从报错1032 (主库都回放不了的binlog就别为难从库了)

[MYSQL] mysql主从报错1032 (主库都回放不了的binlog就别为难从库了)

原创
作者头像
大大刺猬
发布2024-05-09 18:13:21
2350
发布2024-05-09 18:13:21
举报
文章被收录于专栏:大大刺猬大大刺猬

导读

最近遇到一个mysql主从报错1032的问题. 比较离谱.所以记录一下.

由于比较离谱, 这里没能复现出来(我是在5744上测试的, 后面有机会再测试下5741), 所以没法给出相关截图. 只能简单描述一下.

环境说明

mysql 5.7.41

GTID_MODE = ON

slave_parallel_workers = 4

slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN

slave_parallel_type = LOGICAL_CLOCK

binlog_rows_query_log_events = ON # 记录SQL方便问题排查.

问题表无主键, 但有普通索引.

问题

主从报错 sql线程 1032 使用如下SQL查询具体的报错位置和表

代码语言:SQL
复制
select * from performance_schema.replication_applier_status_by_worker\G

分析过程

这个报错很常见, 就是表示数据不存在. 要验证的话, 也比较简单, 直接把该位点的数据解析出来对比即可.

可以使用pymysqlbinlog, 但不一定都有这些工具, 这里还是使用mysqlbinlog来演示.

参考命令:

代码语言:shell
复制
mysqlbinlog -vvv mysql-bin.00xxxx --start-position=xx --stop-position=yy | grep -A 30 "TABLENAME" | grep '###   @' | awk 'ORS=NR%23?"\t":"\n"' > xxx.txt

mysql -NB -e "select * from xx" > yyy.txt  # 这里的23 表示这张表有23行

然后使用diff比较两个文件 是否一致. 由于double 精度问题, double字段会显示会不一致. 所以我们可以去掉该列

代码语言:shell
复制
awk '{$12=""; print $0}'  xxx.txt

本次环境测试校验 发现数据是一致的.

所以就把数据恢复到测试环境, 并滚binlog到该点位

代码语言:shell
复制
mysqlbinlog mysql-bin.000xxx --stop-position=xx | mysql

然后查询出该表的数据 和 从库做校验, 发现也是完全一致的(md5和行数都完全一样)....

这就开始离谱了. 主从数据完全一致, 主库产生的binlog 从库却执行不了. 于是就准备让主库自己去执行看下.

继续回放主库的binlog. 然后就报错了(1032) 240W行左右, 解析发现就是那个 delete_event... 也就是主库产生的binlog, 主库自己都回放不了, 也就不怪从库了.

解决办法

解决起来还是比较简单的, 就是加个主键就行. 所以有主键还是很重要.

其它

本次实验未能复现出来(感觉高版本也可能有这个问题), 后面有空了,再研究.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 环境说明
  • 问题
  • 分析过程
  • 解决办法
  • 其它
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档