slave复制中断 ,别滥用SQL_SLAVE_SKIP_COUNTER

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDSClaw,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。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
7月前
|
人工智能 API 开发者
Dify x AiOnly平台:手把手教你调用GPT-5从零构建AI工作流!
本文介绍如何通过Dify与AiOnly平台,快速构建基于GPT-5等顶尖大模型的AI应用。涵盖环境部署、模型接入、工作流编排及实战案例,助力开发者低门槛打造专属聊天机器人,轻松实现AI应用落地。(238字)
|
机器学习/深度学习 数据采集 数据可视化
R语言 一种功能强大的数据分析、统计建模 可视化 免费、开源且跨平台 的编程语言
R语言 一种功能强大的数据分析、统计建模 可视化 免费、开源且跨平台 的编程语言
1120 1
|
11月前
|
人工智能 Rust 自然语言处理
通义灵码2.5:四大升级亮点
通义灵码2.5不仅是一款工具,更是开发者思维的延伸。通过体验官计划,我们见证了AI如何将重复性工作转化为创意性探索。无论是新手还是资深工程师,都能借此释放生产力,聚焦于架构设计与创新。
232 16
|
机器学习/深度学习 自然语言处理 监控
命名实体识别(Named Entity Recognition, NER)
命名实体识别(NER)是自然语言处理的重要任务,旨在从文本中识别并分类特定实体,如人名、地点、组织等。通过BIO等标注模式,利用HMM、CRF及深度学习模型如RNN、LSTM、Transformer等进行实体识别。预训练模型如BERT显著提升了NER的性能。NER广泛应用于新闻分析、生物医学等领域,是信息提取、知识图谱构建等任务的基础。
1919 3
正则表达式高级用法
正则表达式是强大的文本匹配工具,常用于搜索、匹配和验证字符串。高级用法包括:捕获组(区分需要提取的内容)、非捕获组(减少开销)、零宽断言(定位匹配位置)、反向引用(匹配相同内容)、嵌入代码(实现复杂逻辑)、贪婪与非贪婪匹配(控制匹配范围)和递归匹配(处理嵌套结构)。了解这些高级技巧能提升字符串操作效率。示例展示了验证Email、电话号码、提取URL和清理多余空格的正则表达式应用。
|
自然语言处理 安全 测试技术
基于大模型的应用的测试的一些注意事项
大模型应用测试需注意三大冲突:时间敏感性冲突,即模型数据可能随时间变得过时;数据真实性冲突,指训练数据中可能存在虚假信息,影响模型准确性;数据一致性冲突,表现为模型对语义相同但句法不同的输入反应不一。测试时应针对这些问题设计用例,确保模型性能。
684 4
|
JSON Kubernetes Go
IDEA使用Kubernetes插件编写YAML
IDEA使用Kubernetes插件编写YAML
781 0
IDEA使用Kubernetes插件编写YAML
|
编译器 程序员 C++
头文件
头文件。
238 2
|
JavaScript
js_操作dom(委托和冒泡事件)
js_操作dom(委托和冒泡事件)
133 0
|
关系型数据库 MySQL Java
mysql连接池的设计与实现
mysql连接池的设计与实现
515 0

热门文章

最新文章