MySQL主从复制中常见的3个错误及填坑方案

一、问题描述

 
 

主从复制错误一直是MySQL DBA一直填不完的坑,如鲠在喉,也有人说mysql主从复制不稳定云云,其实MySQL复制比我们想象中要坚强得多,而绝大部分DBA却认为只要跳过错误继续复制就好啦,接下来不发生错误就好了,其实跳过错误就会有数据不一致的风险,数据不一致可能还会越来越严重,而我就复制错误中反复出现的1045、1032和1062错误引起的数据库主从不一致的的现象进行深入分析及给出一套完善的解决方案。

 

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

 

 

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

 

 

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

 

 

二、原因分析

 
 

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

 

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

 

【ERROR】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检查数据一致性。

 

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

 

 

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

时间: 2024-10-06 15:49:32

MySQL主从复制中常见的3个错误及填坑方案的相关文章

phpExcel导入excel文件数据到mysql数据库中老是出现页面访问错误是怎么回事

问题描述 phpExcel导入excel文件数据到mysql数据库中老是出现页面访问错误是怎么回事 在$sheet=$phpExcel->getSheet(0);如果不打印这个$sheet信息就会出现页面访问的错误信息 解决方案 要有一个sheet变量来获得getSheet(0)的sheet 解决方案二: $phpExcel->getSheet(0)那是取出第一张Sheet.如果不写,到底读写哪张Sheet? 解决方案三: http://www.jb51.net/article/59844.h

营销活动中常见的十大错误现象

在芝加哥举行的SES大会上,我有幸在http://www.aliyun.com/zixun/aggregation/18519.html">小组讨论会上发言,表达自己对当前搜索市场现状的看法.在讨论期间,有许多问题围绕搜索重新定向问题.搜索广告新模式以及搜索和社交媒体之间的互动关系等. 我谈到了一个普通的主题,这也是我们许多营销商在进行营销活动是所忽视的一个基本问题,从而导致了机会的错失.在小组讨论会上的同行David Pann,也是雅虎公司搜索业务副总裁,对此也有相同的看法.他指出,广告

Linux中MySQL主从复制中出现1593错误码的低级错误

今天测试shell脚本自动配置MySQL主从集群的时候发现从机一直1593错误,排查了半天发现是从的配置文件中的server-id没改导致,此低级错误记录下警醒自己. [root@DS-CentOS70 ~]# mysql -uroot -pYWFlMDAyZmFjOWJi Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor.  Commands

mysql中主从复制中出现ERROR 1598 (HY000)错误

在做主从复制下,插入数据的时候出现下面的错误提示:  代码如下 复制代码 mysql> insert into test values (",'lzh'); ERROR 1598 (HY000): Binary logging not possible. Message: Transaction level 'READ-COMMITTED' in InnoDB is not safe for binlog mode 'STATEMENT' 查看一下,是否是:  代码如下 复制代码 mysq

实例分析URL结构规划中常见的三种错误

我们的站点结构是有一系列的URL地址组成的.站点的URL结构关系到整个站点的优化命脉.或许很多seoer都会遇到内容质量已经够高,外链也不输人,但是偏偏就是页面不收录,或者收录得很少.其实很多的原因还是出在站点的URL结果上,本文中笔者将根据自身遇到的情况,分析三种常见的URL结构错误. 一:URL地址长度问题 我们的URL地址是否对搜索引擎优化,会直接影响到站点的收录量.URL地址可以分为动态.静态以及伪静态地址.除去动态页面,我们可以说静态和伪静态页面还是对搜索引擎相对友好的.而在这三种地址

浅谈新手优化中常见的几个错误

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 大家都知道SEO这个词了,我相信每个站长都不会对它陌生.每个站长可能每天都在忙着给自己的网站SEO,但是在进行这个过程的时候,不少站长朋友也可能会犯些常见的错误,下面就由站长百科(zzbaike)来给你介绍. 一.网站标题 网站标题对于网站优化的影响是不容忽视的,如果在网站标题中适当的出现关键字,那么对于网站权重的提升是有益而无害.但是新手站

Oracle数据库服务中常见的6个错误

1.ORA-12541:TNS:没有监听器 原因:没有启动监听器或者监听器损坏.若是前者,使用命令net start OracleOraHome81TNShttp://www.aliyun.com/zixun/aggregation/16742.html">Listener(名字可能有出入)即可;如果是后者,则使用"Net8 Configuration Assistant"工具向导之"监听程序配置"增加一个监听器即可(基本不用写任何信息,一路OK.在

虚机服务中常见Asp.Net低级错误一览_XML/RSS

"/"应用程序中的服务器错误. -------------------------------------------------------------------------------- 运行时错误 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因).但可以通过在本地服务器计算机上运行的浏览器查看. 详细信息: 若要使他人能够在远程计算机上查看此特定错误信息的详细信息,请在位于当前 Web 应用程序根目录下的&quo

网页标准:CSS编写过程中常见的10个错误

css|标准|错误|过程|网页 对于初学CSS布局的人也许会有很大的帮助.有经验的开发者在调试CSS布局时也能得到些启发. 1. 检查HTML元素是否有拼写错误.是否忘记结束标记 即使是老手也经常会弄错div的嵌套关系.可以用dreamweaver的验证功能检查一下有无错误. 2. 检查CSS是否正确 检查一下有无拼写错误.是否忘记结尾的 } 等.可以利用CleanCSS来检查 CSS的拼写错误.CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误. 3. 确定错误发生的位置 如果错误影