FAQ系列 | 不同复制模式下,如何忽略某些binlog事件

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

导读

在MySQL复制中,如何忽略slave节点上发生的主键冲突、数据不存在等错误。

在MySQL复制中,如果slave节点上遇到错误,比如数据不存在或者主键冲突等错误时,想要忽略这些错误,可以采用以下几种方法:

1、未启用GTID模式时

只需通过设定 SQL_SLAVE_SKIP_COUNTER 的值,即可忽略一些复制事件。例如:

#需要先关闭SLAVE服务
root@imysql.com [test]> STOP SLAVE;

#忽略N个事件(event),通常一个SQL是一个事件
root@imysql.com [test]> SET SQL_SLAVE_SKIP_COUNTER=N;

#再次启动SLAVE服务
root@imysql.com [test]> START SLAVE;

2、启用GTID模式时

启用GTID,想要忽略某些错误事件就稍微麻烦一点点了。
首先,我们需要先查看当前SLAVE复制的进度:

mysql> SHOW SLAVE STATUS\G

从中看到,当前SLAVE复制的GTID进展是:

  Slave_IO_Running: Yes
 Slave_SQL_Running: No
        Last_Errno: 1062
        Last_Error: ...Duplicate...key 'PRIMARY', Error_code: 1062;...
       Master_UUID: f2b6c829
Retrieved_Gtid_Set: 3a16ef7a:1-283,f2b6c829:1-33
 Executed_Gtid_Set: 3a16ef7a:1-283,f2b6c829:1-31
     Auto_Position: 1

备注: 为了排版样式,我把下面两个UUID进行了简写(下同)

  • f2b6c829-9c87-11e4-84e8-deadeb54b599 => f2b6c829
  • 3a16ef7a-75f5-11e4-8960-deadeb54b599 => 3a16ef7a

从上面的信息可以看到,当前从MASTER取到了1-33的事务列表,并且已执行(看Executed_Gtid_Set)到了31这个事务GTID位置,在这下一个位置(32)上发生错误。

这时候,我们需要手工调整SLAVE已清除的GTID列表 GTID_PURGED,人为通知SLAVE哪些事务已经被清除了,后续可以忽略:

root@imysql.com [test]> STOP SLAVE;
root@imysql.com [test]> RESET MASTER;
root@imysql.com [test]> SET @@GLOBAL.GTID_PURGED = "3a16ef7a:1-283,f2b6c829:1-32";
root@imysql.com [test]> START SLAVE;

上面这些命令的用意是,忽略 f2b6c829:32 这个GTID事务,下一次事务接着从 33 这个GTID开始,即可跳过上述错误。

3、无论是否启用GTID,使用pt-slave-restart工具

首先不得不说,percona toolkit工具集对DBA而言实在太方便了。pt-slave-restart工具的作用是监视某些特定的复制错误,然后忽略,并且再次启动SLAVE进程(Watch and restart MySQL replication after errors)。
简单用法示例:

#忽略所有1062错误,并再次启动SLAVE进程
[yejr@imysql.com ]# pt-slave-resetart -S./mysql.sock --error-numbers=1062

#检查到错误信息只要包含 test.yejr,就一概忽略,并再次启动 SLAVE 进程
[yejr@imysql.com ]# pt-slave-resetart -S./mysql.sock --error-text="test.yejr"

综上,我们虽然可以利用工具来快速忽略复制错误,但还是要掌握如何人为忽略复制错误的方法,在没有工具的时候也能了然于胸。


文章转自老叶茶馆公众号,原文链接:https://mp.weixin.qq.com/s/06Js1yY_YN6DfTNUEc6SuA

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
弹性计算 网络协议 容灾
PostgreSQL 时间点恢复(PITR)在异步流复制主从模式下,如何避免主备切换后PITR恢复(备库、容灾节点、只读节点)走错时间线(timeline , history , partial , restore_command , recovery.conf)
标签 PostgreSQL , 恢复 , 时间点恢复 , PITR , restore_command , recovery.conf , partial , history , 任意时间点恢复 , timeline , 时间线 背景 政治正确非常重要,对于数据库来说亦如此,一个基于流复制的HA架构的集群,如果还有一堆只读节点,当HA集群发生了主备切换后,这些只读节点能否与新的主节点保持
1653 0
|
关系型数据库 流计算 PostgreSQL
关于PostgreSQL逻辑订阅中的复制状态
关于PostgreSQL逻辑订阅中的复制状态
2405 0
|
关系型数据库 MySQL 数据库管理
FAQ系列 | 不同复制模式下,如何忽略某些binlog事件
FAQ系列 | 不同复制模式下,如何忽略某些binlog事件
|
消息中间件 监控 关系型数据库
PostgreSQL 逻辑复制、增量复制、逻辑订阅、增量订阅中间件 amazonriver - HelloBike开源
标签 PostgreSQL , 逻辑复制 , 流复制 , testdecoding , amazonriver , hellobike 背景 amazonriver 是一个将postgresql的实时数据同步到es或kafka的服务。由hellobike开源。 版本支持 Postgresql 9.4 or later Kafka 0.8 or later Elas
1353 1
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 流复制的主备切换
概述 流复制的主库和备库的角色不是静态存在的,在维护过程中可以对二者进行角色切换。例如当主库硬件故障或主库需要调整参数需要重启系统时,通常要进行流复制的主备切换。 如何判断主备角色 在通常的主备架构下(一主多备,级联除外)有以下五种方法判断主备角色 操作系统上查看wal发送进程或wal接收线程 ...
10261 0
|
关系型数据库 Perl
判断GTID复制中主从是否同步脚本
判断GTID复制中从库有没有与主库同步 show slave stautus\G中: 当Retrieved_Gtid_Set = Executed_Gtid_Set 表示从库已经和主库完成同步 #!/bin/bash Exec_num=$(mysql -uroot -p14...
849 0
|
SQL MySQL 关系型数据库
手动注册binlog文件造成主从异常
一、问题来源 有一个朋友@水米田 问我,基于POSITION的主从。他做了如下的操作 将备份的一些binlog文件加入到了目录中 修改index文件,加入了这些binlog文件 flush binary logs 然后整个主从环境大量延迟。
1141 0
|
存储 SQL Go
SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步
原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名字段,怎么使这发布和订阅的两个字段建立同步关系呢? 下面就测试更改:此次发布类型为事务复制的可更新订阅,其他类型的发布没有测试。
1078 0
|
关系型数据库 流计算