mysql 同步失败_线上MYSQL同步报错故障处理方法总结

2023-11-07

前言

在发生故障切换后,经常遇到的问题就是同步报错,下面是最近收集的报错信息。

记录删除失败

在master上删除一条记录,而slave上找不到

Last_SQL_Error: Could not execute Delete_rows event on table hcy.t1;

Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000006, end_log_pos 254

解决方法:master要删除一条记录,而slave上找不到报错,这种情况主都已经删除了,那么从机可以直接跳过。

stop slave;

set global sql_slave_skip_counter=1;

start slave;

如果这种情况很多,需要针对这种错误专门写相关脚本。

主键重复

在slave已经有该记录,又在master上插入了同一条记录。

Last_SQL_Error: Could not execute Write_rows event on table hcy.t1;

Duplicate entry '2' for key 'PRIMARY',

Error_code: 1062;

handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000006, end_log_pos 924

解决方法:

在slave上用desc hcy.t1; 先看下表结构:

mysql> desc hcy.t1;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id | int(11) | NO | PRI | 0 | |

| name | char(4) | YES | | NULL | |

+-------+---------+------+-----+---------+-------+

删除重复的主键

mysql> delete from t1 where id=2;

Query OK, 1 row affected (0.00 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

……

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

……

mysql> select * from t1 where id=2;

在master上和slave上再分别确认一下。

更新丢失

在master上更新一条记录,而slave上找不到,丢失了数据。

Last_SQL_Error: Could not execute Update_rows event on table hcy.t1;

Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000010, end_log_pos 794

解决方法:

在master上,用mysqlbinlog 分析下出错的binlog日志在干什么。

/usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000010 | grep -A '10' 794

#120302 12:08:36 server id 22 end_log_pos 794 Update_rows: table id 33 flags: STMT_END_F

### UPDATE hcy.t1

### WHERE

### @1=2 /* INT meta=0 nullable=0 is_null=0 */

### @2='bbc' /* STRING(4) meta=65028 nullable=1 is_null=0 */

### SET

### @1=2 /* INT meta=0 nullable=0 is_null=0 */

### @2='BTV' /* STRING(4) meta=65028 nullable=1 is_null=0 */

# at 794

#120302 12:08:36 server id 22 end_log_pos 821 Xid = 60

COMMIT/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

在slave上,查找下更新后的那条记录,应该是不存在的。

mysql> select * from t1 where id=2;

Empty set (0.00 sec)

然后再到master查看

mysql> select * from t1 where id=2;

+----+------+

| id | name |

+----+------+

| 2 | BTV |

+----+------+

1 row in set (0.00 sec)

把丢失的数据在slave上填补,然后跳过报错即可。

mysql> insert into t1 values (2,'BTV');

Query OK, 1 row affected (0.00 sec)

mysql> select * from t1 where id=2;

+----+------+

| id | name |

+----+------+

| 2 | BTV |

+----+------+

1 row in set (0.00 sec)

mysql> stop slave ;set global sql_slave_skip_counter=1;start slave;

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

……

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

……

1236错误, 二进制文件缺失

误删二进制文件等各种原因,导致主库mysql-bin.000012文件丢失,从库同步失败。

Master_Log_File: mysql-bin.000012

Slave_IO_Running: No

Slave_SQL_Running: Yes

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

首先停止从库同步

slave stop;

查看主库日志文件和位置

mysql> show master logs;

+------------------+-----------+

| Log_name | File_size |

+------------------+-----------+

| mysql-bin.000013 | 154 |

+------------------+-----------+

回从库,使日志文件和位置对应主库

CHANGE MASTER TO MASTER_LOG_FILE='log-bin.000013',MASTER_LOG_POS=154;

最后,启动从库:

```bash

slave start;

show slave status\G;

Master_Log_File: mysql-bin.000013

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_IO_Error:

```

中继日志损坏

slave的中继日志relay-bin损坏。

Last_SQL_Error: Error initializing relay log position: I/O error reading the header from the binary log

Last_SQL_Error: Error initializing relay log position: Binlog has bad magic number;

It's not a binary log file that can be used by this version of MySQL

1、手工修复

解决方法:找到同步的binlog和POS点,然后重新做同步,这样就可以有新的中继日值了。

例子:

mysql> show slave status\G;

*************************** 1. row ***************************

Master_Log_File: mysql-bin.000010

Read_Master_Log_Pos: 1191

Relay_Log_File: vm02-relay-bin.000005

Relay_Log_Pos: 253

Relay_Master_Log_File: mysql-bin.000010

Slave_IO_Running: Yes

Slave_SQL_Running: No

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 1593

Last_Error: Error initializing relay log position: I/O error reading the header from the binary log

Skip_Counter: 1

Exec_Master_Log_Pos: 821

Slave_IO_Running :接收master的binlog信息

Master_Log_File

Read_Master_Log_Pos

Slave_SQL_Running:执行写操作

Relay_Master_Log_File

Exec_Master_Log_Pos

以执行写的binlog和POS点为准。

Relay_Master_Log_File: mysql-bin.000010

Exec_Master_Log_Pos: 821

mysql> stop slave;

Query OK, 0 rows affected (0.01 sec)

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=821;

Query OK, 0 rows affected (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.8.22

Master_User: repl

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: mysql-bin.000010

Read_Master_Log_Pos: 1191

Relay_Log_File: vm02-relay-bin.000002

Relay_Log_Pos: 623

Relay_Master_Log_File: mysql-bin.000010

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1191

Relay_Log_Space: 778

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql 同步失败_线上MYSQL同步报错故障处理方法总结 的相关文章

  • jQuery插件开发全解析,jQuery.extend , (function($){ , $.fn.pluginName

    序 匿名函数 匿名函数没有实际名字 也没有指针 怎么执行滴 其实大家可以看看小括号的意义就应该可以理解 小括号有返回值 也就是小括号内的函数或者表达式的返回值 所以说小括号内的function返回值等于小括号的返回值 不难理解 functi
  • Python for循环的使用

    一 for循环的使用场景 1 如果我们想要某件事情重复执行具体次数的时候可以使用for循环 2 for循环主要用来遍历 循环 序列 集合 字典 文件 甚至是自定义类或函数 二 for循环操作列表实例演示 使用for循环对列表进行遍历元素 修
  • 使用策略模式+工厂模式对接口进行分配处理。远离if else

    使用策略模式 工厂模式对接口进行分配处理 远离if else 背景 在项目中我们会遇到不同时间或者不同条件下 调用不同的方法或处理方式 因此我们可以采用策略模式进行满足不同的对象执行不同的具体行为 再用工厂模式进行匹配对应的对象 首先我们做
  • PID稳压

    思路说明 我们设置一个目标值 这是我们要调节的目标 我们通过AD采样 PC3 采集到当前电压 通过减法运算我们得出当前电压与目标电压的差值 接下来我们只要发现当前电压与目标电压不同 我们就要想办法改变当前单片机的输出电压 PA8 也就是当前
  • C++学习之gcc编译四步

    C 学习之gcc编译四步 一 linux下编写Hello World 代码文件 二 gcc编译四步 1 预处理 Preprocessing 2 编译 Compilation 3 汇编 Assembly 4 链接 Linking 三 执行 四
  • 论文学习(一)——MWP-BERT: Numeracy-Augmented Pre-training for Math WordProblem Solving

    记录一下自己的第一篇论文学习 摘要 数学应用题 MWP 的求解面临着数字表示学习的困境 为了避免数字表示的问题 并且减少可行解的搜索空间 现有求解MWP的工作通常用符号占位符代替实数 以便专注于逻辑推理 然而 不同于常见的符号推理任务 如程
  • STM32——STM32F103系列学习笔记(纯干货版)

    一 RCC函数 关于RCC函数的使用配置如下 一 定时器资源分配 关于定时器资源分配如下
  • Timer源码分析

    java util Timer简介 Timer是用于管理在后台执行的延迟任务或周期性任务 其中的任务使用java util TimerTask表示 任务的执行方式有两种 按固定速率执行 即scheduleAtFixedRate的两个重载方法
  • Python入门学习01

    基础 输出 输出语句print print 输出语句 输出函数 1 在控制台输出一段文本信息 用一对英文双引号标记 print 文本信息 默认换行 2 print 文本信息 end 结尾 n 换行符 t 制表符 3 print 文本信息1
  • Thinkphp5.1开发钉钉应用:企业免登陆_PC端demo

    config gt base php
  • C语言数字炸弹

    define CRT SECURE NO WARNINGS 1 include
  • 三、Linux系统编程:进程间的通信(IPC)之消息队列

    3 IPC 进程间通信 消息队列 消息队列 Message queue 是一种进程间通信或同一进程的不同线程间的通信方式 软件的贮列用来处理一系列的输入 通常是来自用户 3 1 背景 管道和套接字比较适合两三个进程之间的通信 如果进程成倍增
  • 小米笔记本BIOS版本升级固件 小米笔记本Pro15.6【附下载地址】

    之前出厂买的bios版本太老了 个人强迫症就更新到了新版本的bios 找了三家小米官方售后部门 前两家啥技术都没 查最新的bios版本都查不到 还说我的bios就是最新的 最后一家售后才有把我升级bios 查询自己bios版本的方法 win
  • TCP报文段的首部

    TCP报文段的首部 TCP虽然是面向字节流的 但是TCP传送的数据单元是报文段 一个TCP报文段分为首部和数据两部分 TCP报文段首部的前20个字节是固定 后面有 4 n 4n 4n字节是根据需要而增加的选项 n n
  • 基于优先队列的Dijkstra算法

    前言 最短路径问题 即在给定的连接图中 求解节点之间的最短路径 Dijkstra算法是典型的单源最短路径算法 单源即只能求解某个节点到其他节点的最短路径 另外 此算法不能处理边权重为负的情况 一 最短路径问题 最短路径问题是图论的一个经典算
  • ubuntu安装ffmpeg,三行命令

    1 安装 添加ppa源 sudo add apt repository ppa djcj hybrid 更新刚才添加的源 sudo apt get update 下载ffmpeg sudo apt get install ffmpeg 遇到
  • 【React】搭建React项目

    最近自己在尝试搭建react项目 其实react项目搭建没有想象中的那么复杂 我们只需要使用一个命令把React架子搭建好 其他的依赖可以根据具体的需求去安装 比如AntDesignMobile的UI框架 执行npm install ant
  • 绿源:“老大哥”冲刺IPO,新的故事如何讲?

    又一家老牌电动两轮车企业 开 向了资本市场 11月22日 绿源集团控股 开曼 有限公司 以下简称 绿源集团 正式向港交所递交招股说明书 拟主板挂牌上市 中信建设国际担任独家保荐人 这标志着 一部车骑10年 电动车品牌绿源拉开了上市序幕 绿源
  • Android暴露组件——被忽略的组件安全

    Intent 简介 Intent 意图 负责完成Android应用 组件之间的交互与通信 常见的Activity的调用 Receiver的发送 Service的启动都需离不开Intent Intent通常包含的信息 Categpry 种类

随机推荐

  • springboot文件上传 MultipartFile file

    1 讲解springboot文件上传 MultipartFile file 源自SpringMVC 注意点 如果想要直接访问html页面 则需要把html放在springboot默认加载的文件夹下面 MultipartFile 对象的tra
  • Yii Framework 开发教程(28) Data Provider 简介

    这开始介绍Zii组件之前 先简要介绍一下Yii支持的数据源接口 IDataProvider IDataProvider主要功能是为UI组件如GridView ListView等提供数据源 同时也支持数据的分页和排序 下图为Yii内置的三种数
  • QQxml和json代码生成卡片的方法

    简介 最近看到qq群里总有人发一些奇怪的卡片 例如下面这个卡片 点击之后就会跳转到你自己的个人资料 是不是很神奇 其实这是依靠xml代码转成的卡片 通过一些软件对xml编译执行 可以编译xml的软件有很多 最常用的手机xml编译执行软件是华
  • Android Display架构分析

    Fence https www jianshu com p 3c61375cc15b android12 display分析 https www cnblogs com roger yu p 15641545 html hwcomper h
  • MIPS汇编语言实现选择排序算法

    MIPS汇编语言实现选择排序算法 1 流程图 2 C代码 3 MIPS代码 附注释 MIPS汇编语言实现选择排序算法 1 流程图 2 C代码 include
  • c++笔记(一)

    这里写的主要是一些c c 值得注意的地方和c primer笔记 方便以后回顾 复习c 当然会有一些错误 发现后再改正 当形参引用时 数组不能转化为指针 是连接符 当宏定义用多行时常用 1 c中不可以连续赋值 c 可以 如int a b c
  • 数据结构课程设计---------最少换车次数问题

    问题描述 设某城市有n个车站 并有m条公交线路连接这些车站 设这些公交车都是单向的 这n个车站被顺序编号为0 n 1 编号程序 输入该城市的公交线路数 车站个数 以及各公交线路上的各站编号 实现要求 求得从站0出发乘公交车至站n一1的最少换
  • ‘git‘不是内部或外部命令,也不是可运行的程序或批处理文件。

    一 出现问题 git 不是内部或外部命令 也不是可运行的程序或批处理文件 出现这个问题主要是git的环境变量没有设置 二 解决问题 首先右键我的电脑点击属性 在点击高级系统设置 点击环境变量 在下面这栏点击path设置环境变量 添加这三个环
  • mysql 获取倒数第二_如何从MySQL中的表中获取倒数第二条记录?

    要获得MySQL中最后一个记录 即倒数第二个 之前的记录 您需要使用子查询 语法如下SELECT FROM SELECT FROM yourTableName ORDER BY yourIdColumnName DESC LIMIT 2 a
  • python opencv 二值化 计算白色像素点

    贴部分代码 usr bin env python coding utf 8 import cv2 import numpy as np from PIL import Image area 0 def ostu img global are
  • Flutter audioplayers使用小结

    简介 audioplayers是一个可以支持同时播放多个音频文件的Flutter的库 用法也是相当的简单 AudioPlayer audioPlayer new AudioPlayer await audioPlayer play url
  • SqlServer的varchar最大长度

    SqlServer的varchar最大长度是8000 总会遇到这种字符串截断问题 但是在给表字段长度添加时最好还是不要添加为max 能用varchar n 的话就不必要去要求varchar max 性能问题 项目上确实出现过问题 这个博主的
  • 1115 裁判机

    1114 全素日 有一种数字游戏的规则如下 首先由裁判给定两个不同的正整数 然后参加游戏的几个人轮流给出正整数 要求给出的数字必须是前面已经出现的某两个正整数之差 且不能等于之前的任何一个数 游戏一直持续若干轮 中间有写重复或写错的人就出局
  • python数据分析:用户消费情况数据分析

    本次分析数据介绍 数据为某奶茶店2018年1月 2019年6月的销售数据 共计69 659项数据 用户共计23 570名 数据集共4个字段 user id 用户id order id 购买日期 order prodect 购买产品数 ord
  • 为什么java中类名要与文件名一致

    学习java程序过程中碰到了文件名与类名不一致问题 出现了报错 后面查了一下资料才知道为什么文件名与类名要一致 Java是被解释执行的 它在运行时并不是将所有的class文件全都放到内存中 而是在遇到import的时候才去相应的文件目录找相
  • 概率论与数理统计(3)--指数分布函数及其期望、方差

    1 什么是指数分布 设随机变量X具有如下形式的密度函数 那么则称X服从参数为 的指数分布 记为X EXP 指数分布的分布函数为 2 指数分布的期望和方差 数学期望 如果X 服从参数为 gt 0 的指数分布 那么指数分布X EXP 的数学期望
  • Conda 常用指令 (Mac)【下载 安装 环境配置 查看 创建 激活 配置cuda 拷贝环境】

    本文旨在介绍用conda配置一个新的深度学习环境的全过程 下载Anaconda 在 官网 中下载与python版本匹配的Anaconda Python与Anaconda版本匹配如下 图片源自 该博客 在本例中我下载的 Anaconda3 2
  • 12篇顶会论文,深度学习时间序列预测经典方案汇总

    早期的时间序列预测主要模型是诸如ARIMA这样的单序列线性模型 这种模型对每个序列分别进行拟合 在ARIMA的基础上 又提出了引入非线性 引入外部特征等的优化 然而 ARIMA类模型在处理大规模时间序列时效率较低 并且由于每个序列分别独立拟
  • aistudio提示找不到包,通过直接下载整个PaddleNLP的repo文件执行

    git clone https gitee com AI Mart PaddleNLP cd PaddleNLP python setup py install pip install regex nltk beautifulsoup4 当
  • mysql 同步失败_线上MYSQL同步报错故障处理方法总结

    前言 在发生故障切换后 经常遇到的问题就是同步报错 下面是最近收集的报错信息 记录删除失败 在master上删除一条记录 而slave上找不到 Last SQL Error Could not execute Delete rows eve