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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一、问题描述

 

 

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

 

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

 

20160511043441858.png

 

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

 

20160511043449878.png

 

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

 

20160511043457204.png

 

二、原因分析

 

 

【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:

 

20160511043618940.png

 

普通主从复制环境

 

从库:

20160511043633140.png

 

主库:

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

20160511043641688.png

 

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

20160511043648232.png

 

从库:

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

20160511043655551.png

 

基于GTID复制环境

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

 

【ERROR】1032:

 

20160511043720622.png

 

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

 

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

 

普通主从复制环境

 

从库:

20160511043738945.png

 

基于GTID复制环境

 

从库:

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

20160511043745271.png

 

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

 

普通主从复制环境

 

从库:

20160511043753499.png

 

主库:

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

20160511043800404.png

 

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

20160511043807494.png

 

从库:

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

20160511043814393.png

 

基于GTID复制环境

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

 

【ERROR】1062:

 

20160511043821775.png

 

普通主从复制环境

 

从库:

20160511043828432.png

 

主库:

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

20160511043835732.png

 

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

20160511043842793.png

 

从库:

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

20160511043849420.png

 

基于GTID复制环境

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

 

2.彻底解决方案

 

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

 

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

 

(1)   从库停止复制

 

20160511043858622.png

 

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

 

20160511043908973.png

 

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

 

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

 

20160511044017488.png

 

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

 

20160511044026395.png

 

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

 

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

 

20160511044036626.png

 

四、优化建议

 

 

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

 

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

 

20160511044044778.png

 

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


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-05-11

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 存储 关系型数据库
MySQL的主从复制&主从同步
MySQL的主从复制&主从同步
30 0
|
3月前
|
Oracle 关系型数据库 MySQL
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
38 0
|
2月前
|
SQL 存储 关系型数据库
MySQL索引(二)索引优化方案有哪些
MySQL索引(二)索引优化方案有哪些
48 0
|
16天前
|
负载均衡 容灾 关系型数据库
mysql主从复制
mysql主从复制
31 1
|
1月前
|
SQL 存储 运维
MySQL高可用性:主从复制和集群
MySQL高可用性:主从复制和集群
36 0
|
15天前
|
SQL 关系型数据库 MySQL
mysql主从复制
mysql主从复制
|
26天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
74 0
|
26天前
|
SQL 关系型数据库 MySQL
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
39 1
|
1月前
|
SQL 网络协议 关系型数据库
【怒怼大厂面试官】听说你精通MySQL?来说说MySQL主从复制
面试官:MySQL主从复制了解吧?嗯嗯了解的。主要是利用了MySQL的Binary Log二进制文件。那我把二进制文件丢给从库,从库复制整个文件吗。噢噢不是的。
48 1
【怒怼大厂面试官】听说你精通MySQL?来说说MySQL主从复制
|
1月前
|
缓存 关系型数据库 MySQL
史上最全MySQL 大表优化方案(长文)
史上最全MySQL 大表优化方案(长文)
413 0