一、错误日志解析:

(1) 【ERROR】1452:无法在外键的表插入参考主键没有的数据

1452:无法在外键的表插入或更新参考主键没有的数据。由于item_discovery.itemid字段(外键)参考了items.itemid字段(主键),当要在item_discovery表插数据时,如果items表的主键没有对应的数据,则无法插入,报1452错误。此时可以检查参考的表的主键是否有主库对应的数据,如果有,则插入参考的表相应的数据,再开启复制恢复SQL线程。

(2) 【ERROR】1032:删除或更新数据,从库找不到记录

1032:删除或更新从库的数据,从库找不到记录。此时,主库的数据是比从库新的,可以采取从库添加相同的数据在开启复制恢复SQL线程。

(3) 【ERROR】1062:从库插入数据,发生唯一性冲突

1062:从库插入数据,发生唯一性冲突。此时从库已经有相同主键的数据,如果再插入相同主键值的数据则会报错。可以查看主库的改行数据与从库的要插入数据是否一致,如一致则跳过错误,恢复SQL线程,如不一致,则以主库为准,将从库的该行记录删除,再开启复制。

如果当前高可用架构为Master-Master,则以下均在从库的操作都必须set sql_log_bin=0,避免从库执行的语句同步到主库(恢复时以主库的数据为准)。

二、怎么解决问题:

1.临时解决方案(业务运行期间不适宜使用数据对比和修复工具)

【ERROR】1452:

普通主从复制环境

从库:

主库:

查看主库在出错的相应位置的执行语句,可通过SQL得出当时insert或者update的对应的主键值。

查询item_discovery的外键约束c_item_discovery_1参考的表items对应主键值的数据行。

从库:

在items表插入主库查询出来的数据。

基于GTID复制环境

与普通主从复制环境处理方式相同。

【ERROR】1032:

发生1032可能是delete或者update时从库没有对应数据行,可以分两种情况处理:

(1)如果是Could not execute Delete_rows,则可以直接跳过错误

普通主从复制环境

从库:

基于GTID复制环境

从库:

找出复制出错时的executed_Gtid_Set,若出现多个,则选择跟Master_uuid相同的那一条。

(2)如果是Could not execute Update_rows,则需要在二进制日志找出出错位置的SQL,再找出该表在主库的对应的数据行,然后直接在从库插入这条数据,开启SQL线程恢复。

普通主从复制环境

从库:

主库:

查看主库在出错的相应位置的执行语句,可通过SQL得出当时update的对应的主键值。

查询item_discovery的对应主键值的数据行。

从库:

在items表插入主库查询出来的数据。

基于GTID复制环境

与普通主从复制环境处理方式相同。

【ERROR】1062:

普通主从复制环境

从库:

主库:

查看主库在出错的相应位置的执行语句,可通过SQL得出当时insert的对应的主键值。

查询trends_uint表对应主键值的数据行。

从库:

在trends_uint表删除主库查询出来的数据。

基于GTID复制环境

与普通主从复制环境处理方式相同。

2.彻底解决方案

使用pt-table-checksum和pt-table-sync彻底修复数据不一致。

注意:使用pt工具包首先要安装pt工具包和安装perl模块。

(1)   从库停止复制

(2) 在主库创建校验信息表

(3) 在主库用pt-table-checksum校验主从数据一致性

在从库执行以下语句,查看Last_Error,发现数据不一致的表:

然后返回操作系统执行以下命令:

该命令可以查看该表是否发生数据不一致情况,若有,则使用pt-table-sync修复。

(4) 在主库用pt-table-sync打印出修复不一致数据的SQL(如果有外键约束,修复数据应先从外键参考的字段所属表开始修复),后将修复语句在从库执行。

三、优化建议

在复制由于1045、1032、1062的原因中断后,应使用三.1的临时解决方案,恢复复制后再在业务低谷使用pt-check-sum检查数据一致性。

检查完后可以在从库执行这条语句查看有无数据不一致表:

针对核心表,可以定制自动数据校验脚本,每周进行数据校验,但必须要在业务低谷进行校验哦!

————————————————————

推荐阅读:

【干货】Linux监控 sar命令解析

【干货】Linux Shell常用经典脚本收藏

教你分分钟搞定Python之Flask框架

网页加载性能调优

MySQL主从 常见的错误及解决方案的更多相关文章

  1. Navicat 连接MySQL时出现1251错误的解决方案

    我用的MySQL版本是8.0.11,比较新的MySQL版本中采用的加密方式与旧的不同,从而导致1251错误. 解决方案:打开终端连接上数据库,执行以下语句,问题解决.(自己遇到过的坑,亲测有效) US ...

  2. MySQL主从失败报错误: Got fatal error 1236

    一.问题原因及报错误信息 由于MySQL主库意外重启,导致从库无法同步报错如下: 登录从库查看主从同步的错误信息 [root@--- mysql]# vim mysqld-error.log -- : ...

  3. MySQL 那些常见的错误设计规范

    依托于互联网的发达,我们可以随时随地利用一些等车或坐地铁的碎片时间学习以及了解资讯.同时发达的互联网也方便人们能够快速分享自己的知识,与相同爱好和需求的朋友们一起共同讨论. 但是过于方便的分享也让知识 ...

  4. 谈谈Mysql主从同步延迟分析及解决方案

    一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...

  5. 深入解析Mysql 主从同步延迟原理及解决方案

    MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以 ...

  6. java项目中初期常见的错误及解决方案

    在做项目的初期,想必总会有各种奇奇葩葩的错误出现,本博文主要整理了博主在项目初期遇到的错误,希望能为大家减少犯这些错误 1.Env 名字写错了,图片中错误类型是名字没有发现的异常,因此需要检查后面报错 ...

  7. mysql主从跳过错误

    mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续 跳过错误有两种方式: 1.跳过指定数量的事务 mysql>stop slave;  m ...

  8. 升级react 15.4,常见的错误及解决方案

    最近项目由react0.14.X升级到react 15版本,因为react15还是做了一些相对大一点的更新的(详情可以参考一下我的另一篇文章关于react15的一点总结),相对:来说react升级之后 ...

  9. MYSQL中'TYPE=MyISAM'错误的解决方案

    create 语句后面的TYPE=MyISAM TYPE=MyISAM 和 ENGINE=MyISAM 都是设置数据库存储引擎的语句 ,(老版本的MySQL使用TYPE而不是ENGINE(例如,TYP ...

随机推荐

  1. VSCode插件开发全攻略(四)命令、菜单、快捷键

    更多文章请戳VSCode插件开发全攻略系列目录导航. 命令 我们在前面HelloWord章节中已经提到了命令写法,这里再重温一下. context.subscriptions.push(vscode. ...

  2. Open-Source Cybersecurity Infrastructure

    https://www.linkedin.com/pulse/open-source-cybersecurity-infrastructure-adrian/ The increased maturi ...

  3. 51nod OJ P1000 A+B

    P1000 A+B OJ:51Nod 链接:"http://www.51nod.com/Challenge/Problem.html#!#problemId=1000" 题目描述: ...

  4. Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围

    操作范围中的内容 在创建范围时,内部会为这个范围创建一个文档片段 范围所属的全部节点都会被添加到这个片段中 虽然选取范围可以不是完整的.良好的DOM结构 但是在这个为范围创建的文档片段中,会自己完缺少 ...

  5. Javascript高级编程学习笔记(33)—— 客户端检测(2)怪癖检测

    怪癖检测 和能力检测类似,但其目标不同 能力检测的目的是判断浏览器支不支持某种能力 而怪癖检测的目的是判断浏览器是否存在某些缺陷 这种时候需要我们执行一段代码来判断浏览器是否有这样的缺陷 或者说是怪癖 ...

  6. Ubuntu18.04或者Deepin15.8 部署Django项目

    一.首先先安装nginx静态服务 1.安装gcc g++的依赖库sudo apt-get install build-essential && sudo apt-get install ...

  7. exec 命令简单用法 和 find 搭配用法示例

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. 看例子: find ./ -name "*.tx ...

  8. Spring面试底层原理的那些问题,你是不是真的懂Spring?

    1.什么是 Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为 Java 应用程序的开发提供了综合.广泛的基础性支持的 Java 平台.Spring帮助开发者解决了开发中 ...

  9. sql server 性能调优之 资源等待之网络I/O

    一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果集填充到输出缓存里(ouput cache),同时网络层会开 ...

  10. sql server 索引阐述系列八 统计信息

    一.概述 sql server在快速查询值时只有索引还不够,还需要知道操作要处理的数据量有多少,从而估算出复杂度,选择一个代价小的执行计划,这样sql server就知道了数据的分布情况.索引的统计值 ...