MySQL sql_slave_skip_counter
因为mysql的主从复制是逻辑复制,所以slave在apply relay log的过程中,经常会遇到错误,
而参数sql_slave_skip_counter可以设置跳过多少个event,让slave sql继续。
因为mysql的binlog是由event组成的。一个transaction是一个group,其中包括多个event,
所以sql_slave_skip_counter参数设置的时候需要达到两个效果:
- 既可以跳过多少个event。
- 又保证了group的原子性,即如果一个group中的一个event跳过,那么整个group也skip。
下面就来看下MySQL中的源码是如何处理的:
1. 相关数据结构:
enum enum_skip_reason {
/**Don't skip event.*/
EVENT_SKIP_NOT,
/**
Skip event by ignoring it.
This means that the slave skip counter will not be changed.
*/
EVENT_SKIP_IGNORE,
/**
Skip event and decrease skip counter.
*/
EVENT_SKIP_COUNT
};
apply_event的过程中,是否需要skip,以及是否递减sql_slave_skip_counter都是依据这个枚举变量。
2. 测试case:
master: insert into test(2, 'xxx'); commit
2.1. binlog格式
根据row格式,上面的sql产生如下的binlog,一个包括4个event。
begin:
table_map:
write_row:
xid:
2.2. 设置slave
因为主键冲突,slave停止恢复
case 1: set global sql_slave_skip_counter=1; start slave
case 2: set global sql_slave_skip_counter=10; start slave
2.3. 关键函数:
下面四个函数对应着4个event是否skip,以及如何skip。
1. query_log::do_shall_skip()
2. table_map::do_shall_skip()
3. write_row::do_shall_skip()
4. xid::do_shall_skip()
但这里有一个非常关键的处理判断:
Log_event::continue_group(Relay_log_info *rli)
{
if (rli->slave_skip_counter == )
return Log_event::EVENT_SKIP_IGNORE;
return Log_event::do_shall_skip(rli);
} Log_event::do_shall_skip(Relay_log_info *rli)
rli->slave_skip_counter == && rli->is_in_group())
return EVENT_SKIP_IGNORE;
else if (rli->slave_skip_counter > )
return EVENT_SKIP_COUNT;
else
return EVENT_SKIP_NOT;
其整体的逻辑如下:
1. 如果slave_skip_counter =1 ,那么一直skip,直到遇到xid,然后递减成0.
2. 如果slave_skip_counter =10, 每一个event都skip,并且递减counter,直到xid结束,递减成6.
3. 结论:
所以, slave_skip_counter包含了两层意思:
1. 跳过多少个event
2. 保证一个group的完整性
MySQL sql_slave_skip_counter的更多相关文章
- mysql主从之slave-skip-errors和sql_slave_skip_counter
一般来说,为了保险起见,在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=1以跳过命令.但 ...
- mysql小误区关于set global sql_slave_skip_counter=N命令
背景知识1: 在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=N以跳过命令. ...
- Another reason why SQL_SLAVE_SKIP_COUNTER is bad in MySQL
It is everywhere in the world of MySQL that if your replication is broken because an event caused a ...
- MySQL小误区:关于set global sql_slave_skip_counter=N 命令的一些点
背景知识1: 在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=N以跳过命令.常用 ...
- (转)使用参数SQL_SLAVE_SKIP_COUNTER处理mysql slave同步错误讨论
使用参数SQL_SLAVE_SKIP_COUNTER处理mysql slave同步错误讨论 本文链接地址:http://blog.chinaunix.net/uid-31396856-id-57532 ...
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- [MySQL Reference Manual] 18 复制
18 复制 18 复制 18.1 复制配置 18.1.1 基于Binary Log的数据库复制配置 18.1.2 配置基于Binary log的复制 18.1.2.1 设置复制master的配置 18 ...
- mysql 主从单库单表同步 binlog-do-db replicate-do-db
方案一:两边做主从. SELECT SUM(DATA_LENGTH)+SUM(INDEX_LENGTH) FROM information_schema.tables WHERE TABLE_SCHE ...
- MySQL主从同步
脚本 [root@test scripts]# cat ss.sh #!/bin/bash . /etc/init.d/functions MYUSER=root MYPASS=c565f972 SO ...
随机推荐
- C#微信开发之旅--准备阶段
最近才开始学微信开发的相关内容,记录下,慢慢的养成习惯! 1.申请公众号: 公众号分为 订阅号 和 服务号.他们之前的区别可以点击这里查看 因为我们是测试的,所以可以直接申请测试帐号,就把所有的功能都 ...
- HDU 3943 K-th Nya Number(数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3943 题目大意:求出区间 (P,Q] 中找到第K个满足条件的数,条件是该数包含X个4和Y个7 Samp ...
- 2017 google Round C APAC Test 题解
题解参考网上的答案,以及我自己的想法. 主要参考网站:http://codeforces.com/blog/entry/47181,http://codeforces.com/blog/entry/4 ...
- [Guava官方文档翻译] 2.使用和避免使用null (Using And Avoiding Null Explained)
本文地址:http://www.cnblogs.com/hamhog/p/3536647.html "null很恶心." -Doug Lea "这是一个令我追悔莫及的错误 ...
- 【HeadFirst设计模式】7.适配器模式与外观模式
今晚学习完第七章,顺便做一下知识备忘. 适配器模模式: 定义:将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 对象适配器: 类适配器: 外观模式: 提供了一个统一 ...
- Newtonsoft.Json.dll反序列化JSON字符串的方法
1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...
- php socket connect permission denied
Linux在php socket连接时报错:permission denied 解决办法: # setsebool httpd_can_network_connect=1 参考来源: http://w ...
- python 脚本
mag3.py 1,import import sys from org.eclipse.jface.dialogs import MessageDialogfrom org.eclipse.core ...
- uvision4 ide已停止工作
情景描述: 笔者安装了新系统WIN8.1,装上了MDKV4.72.MDK编译程序可以正常工作,可是只要当我“下载程序”或者“调试程序”的时候就提示“uvision4 ide已停止工作”,迫不得已只能关 ...
- 17款code review工具
本文是码农网原创翻译,转载请看清文末的转载要求,谢谢合作! 好的代码审查器可以大大地帮助程序员提高代码质量,减少错误几率. 虽然现在市场上有许多可用的代码审查工具,但如何挑选也是一个艰巨的任务.在咨询 ...