【MySQL】【复制】利用slave_exec_mode处理复制过程中出现的1062与1032错误

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

【MySQL】【复制】利用slave_exec_mode参数处理复制过程中出现的1062与1032错误

背景:

​ 今天张师兄在群里问了主从之间出现1032错误后,使用pt-slave-restart跳过后又出现了1062错误,该如何快速处理。

问题解析:

​ 1032错误:主库传递过来的binlog中包含了删除某些数据的语句,但在从库中部分数据或者全部这些数据被提前手工删除了,或者根本就不存在。

​ 1062错误:主库传递过来的binlog中包含了更新(或插入)某些数据的语句,但在从库中部分数据已经存在,或者被其他的数据占据了唯一性索引的入口。

​ 问题出在binlog重放时是以一个事务作为一个原子单位进行重放。正如原子中是由三个夸克组成一样,一个事务一般也会由若干个event组成。一个event视为一条语句。

​ 若主库传过来一个包含删除三行数据(r1,r2,r3)的事务,但在从库中只有两个个对应的行(r1,r2)。

begin;
delete from t1 where row=r3; #假设row列为唯一性索引
delete from t1 where row=r2;
delete from t1 where row=r1;
commit;

​ 那么当执行第一条的时候,从库就会报1032 delete a not exist row错误。使用Pt-slave-restart --error-numbers=1032 就会把这整个事务都跳过去,导致该。下一次若从主库传来

begin;
insert into t1(row) values(r1,r2)
commit;

​ 那么从库执行插入的时候肯定会报1062 duplicate entry错误。

问题处理:

方法一:

​ 使用Pt-table-sync进行主从数据同步,但是在双主条件或者主库相关表不停的更新的状况下,这种数据同步会导致比较致命的数据混乱。

方法二:

​ 使用slave_exec_mode参数。

​ 先看下官方手册描述:

参数名称: slave_exec_mode
变量范围: 全局
动态修改:
默认值: NDB集群默认IDEMPOTENT,其他模式STRICT
有效值: STRICT/IDEMPOTENT
设置方式: SET GLOBAL slave_exec_mode = 'IDEMPOTENT'

​ Controls how a slave thread resolves conflicts and errors during replication. IDEMPOTENT mode
causes suppression of duplicate-key and no-key-found errors; STRICT means no such suppression
takes place.
IDEMPOTENT mode is intended for use in multi-master replication, circular replication, and some
other special replication scenarios for NDB Cluster Replication

​ 此参数最初作为在NDB模式中被引进,后来在多主和环形复制都有用武之地。主要的作用就是在slave_exec_mode=‘IDEMPOTENT时,slave会忽略在插入时的遇到重复的唯一性索引节点和删除时的未发现对应记录的复制错误即1062和1032。但是,当从库从 主库接收到了一条尝试update一条自己不存在的记录时还是会报错1032。

​ 问题到此就很简单了,应进行如下步骤:

stop slave;
SET GLOBAL  slave_exec_mode = 'IDEMPOTENT'
start slave;

​ 再次show slave status\G 应该可以看到从库的复制SQL线程已经恢复正常。

​ 但是这毕竟是非常规手段,在执行完后且主从一致后,应抽空进行数据校验。且不推荐作为默认参数直接打开。

附:

5.7.0以后可以将idempotent作为mysqld启动参数调用,即:mysqld --defaults-file =my.cnf --indempotent& 当然,也可以将其写入my.cnf中。

• --idempotent
Tell the MySQL Server to use idempotent mode while processing updates; this causes suppression
of any duplicate-key or key-not-found errors that the server encounters in the current session while
processing updates. This option may prove useful whenever it is desirable or necessary to replay
one or more binary logs to a MySQL Server which may not contain all of the data to which the logs
refer.
The scope of effect for this option includes the current mysqlbinlog client and session only.
The --idempotent option was introduced in MySQL 5.7.0.

5.7.1以后可以引入了此参数的会话级别版 rbr_exec_mode,只对当前会话生效,且限制行复制模式。

• rbr_exec_mode
This variable switches the server between IDEMPOTENT mode and STRICT mode. IDEMPOTENT
mode causes suppression of duplicate-key and no-key-found errors. This mode is useful when
replaying a row-based binary log on a server that causes conflicts with existing data. mysqlbinlog
uses this mode when you set the --idempotent option by writing the following to the output:
SET SESSION RBR_EXEC_MODE=IDEMPOTENT;

pt_slave_restart和skip_slave_errors跳过的结果不一样
skip_slave_errors跳过时只跳过有问题的语句
而pt_slave_restart跳过整个事务


 本文转自 angry_frog 51CTO博客,原文链接:http://blog.51cto.com/l0vesql/2067914


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
面试官:说一下MySQL主从复制的原理?
面试官:说一下MySQL主从复制的原理?
180 0
面试官:说一下MySQL主从复制的原理?
|
SQL 存储 关系型数据库
MySQL主从复制之原理&一主一从部署流程—2023.04
MySQL主从复制之原理&一主一从部署流程—2023.04
512 0
|
7月前
|
SQL 关系型数据库 MySQL
MySQL中主从复制的原理和配置命令
要原因包括提高性能、实现高可用性、数据备份和灾难恢复。了解两大线程( I/O 和 SQL)I/O线程:目的:I/O线程主要负责与MySQL服务器之外的其他MySQL服务器进行通信,以便复制(replication)数据。 功能: 当一个MySQL服务器作为主服务器(master)时,I/O线程会将变更日志(binary log)中的事件传输给从服务器(slave)。从服务器上的I/O线程负责接收主服务器的二进制日志,并将这些事件写入本地的中继日志(relay log)。 配置: 在MySQL配置文件中,你可以通过配置参数如和来启用二进制日志和指定服务器ID。log-bin server
141 1
MySQL中主从复制的原理和配置命令
|
2月前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
MySQL主从复制原理和使用
|
2月前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
4月前
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
65 0
|
4月前
|
SQL canal 关系型数据库
(二十四)全解MySQL之主从篇:死磕主从复制中数据同步原理与优化
兜兜转转,经过《全解MySQL专栏》前面二十多篇的内容讲解后,基本对MySQL单机模式下的各方面进阶知识做了详细阐述,同时在前面的《分库分表概念篇》、《分库分表隐患篇》两章中也首次提到了数据库的一些高可用方案,但前两章大多属于方法论,并未涵盖真正的实操过程。接下来的内容,会以目前这章作为分割点,开启MySQL高可用方案的落地实践分享的新章程!
2052 1
|
7月前
|
关系型数据库 MySQL Linux
【mysql】MySql主从复制,从原理到实践!
【mysql】MySql主从复制,从原理到实践!
243 0
|
7月前
|
SQL 容灾 关系型数据库
MySQL 主从复制原理
MySQL 主从复制原理
78 1
MySQL 主从复制原理
|
SQL 关系型数据库 MySQL
MySql主从复制原理及其搭建
MySql主从复制原理及其搭建