slave复制中断 ,别滥用SQL_SLAVE_SKIP_COUNTER

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: slave复制中断 ,别滥用SQL_SLAVE_SKIP_COUNTER 来源:http://blog.chinaunix.net/uid-26364035-id-3588217.html 【问题背景】  1、从库的复制出现中断,如主键冲突;对应的表或者库不存在;基于row复制时,操作的行不存在; 常常大家会通过使用set global SQL_SLAVE_SKIP_COUNTER=n 来跳过导致复制错误的SQL.  2、 使用sql_slave_skip_counter跳过,每一次跳过为一个Binlog event group, 也就相当于一个事务。

slave复制中断 ,别滥用SQL_SLAVE_SKIP_COUNTER

来源:http://blog.chinaunix.net/uid-26364035-id-3588217.html


【问题背景】

 1、从库的复制出现中断,如主键冲突;对应的表或者库不存在;基于row复制时,操作的行不存在;
常常大家会通过使用set global SQL_SLAVE_SKIP_COUNTER=n 来跳过导致复制错误的SQL.

 2、 使用sql_slave_skip_counter跳过,每一次跳过为一个Binlog event group, 也就相当于一个事务。
所以当一个事务中有两个SQL, 第一个SQL导致主从复制中断,然后我们直接使用SQL_SLAVE_SKIP_COUNTER=1跳过错了
其实第二个SQL也不会在slave中执行了,如果第二个SQL影响100行,那么主从就有100行数据不一致了。
所以 我们在跳过之前,一定要看一下,当前binlog event group到底是什么?

下列是延迟从库,因为表不存在,导到主从复制中断的例 
1、查看show slave status的状态
mysql> Show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.4.12.33
          --------------------省略-----------------------------
              Master_Log_File: mysql-bin.000123
          Read_Master_Log_Pos: 334510571
                Relay_Log_File: mysql-relay-bin.000184
                  Relay_Log_Pos: 534584783
        Relay_Master_Log_File: mysql-bin.000112
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
                   Last_Errno: 1146
                    Last_Error: Error 'Table 'dbxxx .table_ general' doesn't exist' on query. Default database: 'dbxxx '. Query: 'truncate table  table_ general '
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 534584637

2、根据slave status中的 Relay_Log_FileRelay_Log_Pos两个值 ,先查看当前被中断的binlog event group操作是什么?
查看的命令:
   show relaylog events in "Relay_Log_File" from Relay_Log_Pos limit n;
  eg.
    mysql> relaylog events in 'mysql-relay-bin.ooo1o4' from 23484738 limit 10;

就可以明显看到,是由于truncate table db58_user_credit_general时, 表db58_user_credit_general不存在, 所以整个binlog group就这一个语句。
处理的方式以下两种都可以:
    1)可以直接使用set global SQL_SLAVE_SKIP_COUNTER=1跳过此binlog event group
    2) set sql_log_bin=OFF;  create table db58_user_credit_general(id int); set sql_log_bin=ON;






相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
1232 1
|
存储 前端开发 Java
四步解决!OSS对象存储文件上传功能(服务端签名后直传,建议收藏)
普通上传方式通过InputStream作为OSS文件的数据源。用户(浏览器)把文件交给我们自已的服务器,再由服务器携带相关验证信息上传文件至阿里云,这种方式每上传一次,文件就会经过一次我们自已的服务器(占用大量带宽),我们的服务器也会在大量的用户下带来瓶颈。影响服务器处理别的请求,大大降低了效率。
3890 0
四步解决!OSS对象存储文件上传功能(服务端签名后直传,建议收藏)
|
消息中间件 Java 大数据
【真实生产案例】SpringBoot 整合 Kafka 实现数据高吞吐
在上篇文章中,我们详细的介绍了 kafka 的架构模型,在集群环境中,kafka 可以通过设置分区数来加快数据的消费速度。 光知道理论还不行,我们得真真切切的实践起来才行! 下面,我将结合生产环境的真实案例,以SpringBoot技术框架为基础,向大家介绍 kafka 的使用以及如何实现数据高吞吐!
3294 1
|
1月前
|
存储 Java API
|
7月前
|
关系型数据库 MySQL
navicate远程mysql时报错: connection isbeing used
如果以上方法都无法解决问题,可能需要进一步查看错误日志或考虑联系 Navicat 官方支持获取更详细的帮助。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
832 0
|
5月前
|
监控 测试技术 持续交付
代码质量评估与改进策略:打造高效、可维护的软件基石
【7月更文挑战第26天】代码质量是软件开发中不可忽视的重要环节。通过有效的评估方法和改进策略,我们可以不断提升代码质量,打造高效、可维护的软件系统。作为开发者,我们应该始终关注代码质量,将其视为自己专业能力的体现和团队成功的保障。只有这样,我们才能在激烈的市场竞争中立于不败之地,为用户提供更加优质的产品和服务。
|
4月前
|
存储 Java API
SpringBoot + MinIO 实现文件切片极速上传技术
【8月更文挑战第19天】在现代互联网应用中,文件上传是一个常见且重要的功能。然而,随着文件体积的增大,传统的文件上传方式往往面临效率低下、耗时过长等问题。为了提升大文件上传的速度和效率,我们可以采用文件切片上传技术,并结合SpringBoot和MinIO来实现这一功能。
258 0
|
5月前
|
缓存 监控 Java
Java中的内存泄漏及其排查方法
Java中的内存泄漏及其排查方法
|
SQL 缓存 关系型数据库
slave开启MTS时执行mysqldump引发死锁案例(1)
slave开启MTS时执行mysqldump引发死锁案例
slave开启MTS时执行mysqldump引发死锁案例(1)
|
SQL 关系型数据库 MySQL
slave开启MTS时执行mysqldump引发死锁案例(2)
slave开启MTS时执行mysqldump引发死锁案例
296 0