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

导读

在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

时间: 2024-11-05 21:48:07

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

pgpool 主从流复制模式下的安装使用

pgpool-II 是一个位于 PostgreSQL 服务器和 PostgreSQL 数据库客户端之间的中间件,它提供以下功能:  连接池 pgpool-II 保持已经连接到 PostgreSQL 服务器的连接,并在使用相同参数(例如:用户名,数据库,协议版本)连接进来时重用它们.它减少了连接开销,并增加了系统的总体吞吐量.  复制 pgpool-II 可以管理多个 PostgreSQL 服务器.激活复制功能并使在2台或者更多 PostgreSQL 节点中建立一个实时备份成为可能,这样,如果

ThinkPad 8外接显示器复制模式下无法实现最大分辨率

ThinkPad 8自带的micro-HDMI接口外接显示器,复制模式的时候,仅能在纵向(竖屏)模式下显示,且不能实现最大的分辨率.   仅能显示在纵向(竖屏)模式:本机显示     外接显示器显示:       最大分辨率仅能是1152*864(下图外接显示器的最大分辨率为1920*1200或1920*1080)     适用范围:   -  机型:ThinkPad 8   -  操作系统:Win8.1 32位   解决方案:   1.更新显卡驱动至10.18.10.3383或更高版本,可以通

FAQ系列 | 列类型被自动修改导致复制失败

0.导读 在复制环境中,有个表的列类型总是被修改,导致复制进程报错停止 1.问题描述 问题发生在朋友的数据库上,做了主从复制,其中某表有一列类型是INT,但是该表上的INSERT事件在BINLOG中却总被记录为MEDIUMINT类型,导致这个事件在SLAVE上执行失败. 相关现场信息见下: MySQL版本:官方5.5.版本. 表DDL定义: CREATE TABLE `t` (   `userid` int(10) unsigned NOT NULL DEFAULT 0, 这个表上的INSERT

core模式下部署域控制器[为企业部署Windows Server 2008系列六]

在上一回 <一步步开始集中管理[为企业部署Windows Server 2008系列五]> 一文中我们在完 全安装模式的server 2008 中安装了域控制器,我们知道windows server 2008 还支持core模式(核心 安装模式).对于负载比较大的域控制器,为了增加他的性能,我们也可以在core模式下部署域控制器 .这样我们的域控制器性能和稳定性都会大大增强.很多朋友害怕core模式下的命令,或者担心不好管 理(毕竟core模式安装的系统是没有图形管理界面的).那么,在这里给大

Silverlight 5 RC新特性探索系列:12.Silverlight 5 RC 窗口模式下访问自定义DLL和WIN32 API

  在Silverlight 5 RC版本中针对访问权限进行了相应的提升,它的项目属性中新增了一个复选框"在浏览器内运行时需要提升的信任",如下图:          它将为在浏览器模式下运行的应用程序提升一些访问权限,例如我的上篇SaveFileDialog保存文件指定默认名称---OpenFileDialog打开文件指定默认路径就需要提升权限.另外在其OOB模式下也进行了相应的提升,比如访问WIN 32 API,或者访问在C:\Windows\System32目录下的自己编写的DL

2008R2core模式下安装PowerShell[为企业部署Windows Server 2008系列十一]

windows server 2008 R2版本发布一段时间了,再三斟酌后还是决定将2008R2的应用也写进本次2008 主题中来. 很多朋友喜欢core模式,甚至喜欢命令行,那么安装了core模式的你,再给core模式 的2008R2安装上PowerShell 那真是将命令行发挥到极致了(帅呆了!!). 对,我也是这样想 的! 那么下面我们一起来看看如何在core模式下安装PowerShell: 第一步:用下面的命 令列出当前服务器的功能和状态: DISM /Online /Get-Featu

Silverlight 5 beta新特性探索系列:1.安装Silverlight 5 beta环境以及OOB模式下Silverlight 5 多窗口支持

Silverlight 5 beta版本总算于昨日放出,怀着激动的心情今天将开发环境更新为Silverlight 5 beta版本,并且接触Silverlight 5 beta的第一个新特性:OOB模式下的多窗口的弹出显示. 现在我们开始Silverlight 5 Beta版本的安装,首先需要为VS2010打一个VS2010 SP1补丁,然后我们再下载Silverlight 5 Beta Tools for Visual Studio SP1,一步一步安装完毕,最后我们下载Silverlight

详解 UEFI 模式下安装 Linux

引言 几年来,一种新的固件技术悄然出现,而大多数普通用户对此并无所知.该技术被称为 可扩展固件接口Extensible Firmware Interface(EFI), 或更新一些的统一可扩展固件接口(Unified EFI,UEFI,本质上是 EFI 2.x),它已经开始替代古老的 基本输入/输出系统Basic Input/Output System(BIOS)固件技术,有经验的计算机用户或多或少都有些熟悉 BIOS. 本页面是给 Linux 用户使用 EFI 技术的一个快速介绍,其中包括有关

如何在UEFI模式下安装Linux

此页面是免费浏览的,没有烦人的外部广告;然而,我的确花了时间准备,网站托管也花了钱.如果您发现此页面帮到了您,请考虑进行小额捐款,以帮助保持网站的运行.谢谢! 原著于 2013/10/19;最后修改于 2015/3/16 引言 几年来,一种新的固件技术悄然出现,而大多数普通用户对此并无所知.该技术被称为 可扩展固件接口(Extensible Firmware Interface)(EFI), 或更新一些的统一可扩展固件接口(Unified EFI,UEFI,本质上是 EFI 2.x),它已经开始