文档章节

sql_slave_skip_counter

藏劍丶
 藏劍丶
发布于 2016/06/28 10:58
字数 808
阅读 2
收藏 0
点赞 0
评论 0

背景知识1

    在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=N以跳过命令。常用的且不易用错的是N=1的情况,但N>1时,则不那么顾名思义,本文详细介绍N的意义,及使用注意事项。

 

    背景知识2

    MySQL从库从主库上复制binlog文件内容到本地执行。在binlog上命令以event的形式存在,并非一个命令对应一个event。以一个insert语句为例(引擎InnoDB、binglog_format=statement), 在binlog中实际上有三个event,分别为begin\insert\commit 。 命令类型都是Query_log_event.

 

    而set global sql_slave_skip_counter=N的意思,即为在start slave时,从当前位置起,跳过N个event。每跳过一个event,则N--.

 

    与实际情况不符?

    看到这里有同学就会问,这是有问题的。如果当前的执行位置是某个insert语句开头,那使用 N=1实际上是从begin\insert\commit的第二个开始执行,这个insert语句还是不能被跳过?

    实际上这里还有两个策略:

    1、若N=1且当前event为BEGIN, 则N不变,跳过当前event继续。

    2、若N=1且当前event处于一个事务之内(BEGIN之后,COMMIT之前),则N不变,跳过当前event继续。

 

     说明:其实上面两个策略合起来就是一句话,当N=1时,会连续跳过若干个event,直到当前所在的事务结束。

    当然如果N>1,则每跳过一个event都要N--.

 

    命令举例:

    所以我们平时最常用的N=1的情况,都是下一个事务

    假设某个Pos之后执行如下命令( 引擎InnoDB、binglog_format=statement),

    insert into t values(x1);

    begin;

    insert into t values(x2);

    insert into t values(x3);

    commit;

   insert into t values(x4);

你的从库stop在Pos上,假设你要跳过前面几个命令直接执行插入x4的操作,则你的N设置为 4或5或6或7均可。(X1语句为3个event)

 

   其他说明:

   上面举例中都特别说明了在innodb引擎和statement模式下。其他情况区别如下:

   1、若引擎为myisam(等不支持事务的引擎),且在statement下,则binlog中不会有begin和commit,每个命令都是一个event;

   2、row模式的binlog里,一个insert语句实际上是两个event(Table_map_event和 Row_log_event), 计算时应与statement不同。

  3、在row模式下,不论引擎是否支持事务,一个insert语句都会加上BEGIN和commit,也即变成4个event。

  4、基于InnoDB引擎表的insert/delete/update操作都有显式样的BEGIN /COMMIT.

 

  上面举的这个例子中,若为row模式,则要直接执行X4语句需要设置的N为 5~10均可。

 

   小结:

   1、set global sql_slave_skip_counter=N中的N是指跳过N个event

   2、最好记的是N被设置为1时,效果跳过下一个事务

   3、跳过第N个event后,位置若刚好落在一个事务内部,则会跳过这整个事务

   4、一个insert/update/delete不一定只对应一个event,由引擎和日志格式决定

本文转载自:http://dinglin.iteye.com/blog/1236330

共有 人打赏支持
藏劍丶
粉丝 1
博文 68
码字总数 15764
作品 0
朝阳
程序员
slave复制中断 ,别滥用SQL_SLAVE_SKIP_COUNTER

slave复制中断 ,别滥用SQLSLAVESKIP_COUNTER 来源:http://blog.chinaunix.net/uid-26364035-id-3588217.html 【问题背景】 1、从库的复制出现中断,如主键冲突;对应的表或者库不存在;基于...

xudongt
06/19
0
0
repair mysql replication

master : my.cnf [mysqld] log-bin = mysql-bin server-id=1 binlog-ignore-db=mysql start_master.sh mysql -u root -e "grant all on . to slave@'slave_ip' identified by'123';flush pri......

企图穿越
2010/12/06
0
0
MySQL主从同步故障-Slave_SQL_Running: No

故障现象: 进入slave服务器,运行: mysql> show slave statusG ....... RelayLogFile: localhost-relay-bin.000535 RelayLogPos: 21795072 RelayMasterLogFile: localhost-bin.000094 Slav......

文弱书生_罗剑
2015/09/29
443
0
zabbix从库报警ERROR-1062

LastSQLErrno: 1062 LastSQLError: Error 'Duplicate entry '54755' for key 'PRIMARY'' on query. Default database: 'zabbix'. Query: 'INSERT INTO auditlog (userid,clock,ip,action,res......

莎吧啦
2017/11/17
0
0
MySQL5.6 GTID模式 同步复制跳过报错解决方法

MySQL5.6 GTID模式 同步复制跳过报错解决方法 2016年08月25日 18:38:55 阅读数:2029 1.mysql slave 报错 mysql> show slave statusG * 1. row * Slave_IO_State: Master_Host: 172.17.0.7 M......

xiaocao13140
05/30
0
0
mysql主从复制跳过错误

mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续 跳过错误有两种方式: 1.跳过指定数量的事务: mysql>slave stop; mysql>SET GLOBAL S...

武当剑客
2016/02/27
58
0
mysql数据同步1062错误:Error 'Duplicate

发现数据同步出错,提示一下内容: LastSQLErrno: 1062 LastSQLError: Error 'Duplicate entry 'test' for key 'username'' on query. Default database: 'data'. Query: 'INSERT INTO (,,,,......

SANSOM
2013/05/03
0
0
MySQL(Replication-MS)

mysql cluster master: .binmysqld --defaults-file=.my.ini create directory: D:/Server/mysql/mysql-master/tmp and D:/Server/mysql/mysql-master/data master-client: .binmysql -h loc......

赵-猛
2016/07/03
11
0
mysql主从同步出现异常语句跳过错误处理

1.跳过操作: mysql>slave stop; mysql>SET GLOBAL SQLSLAVESKIP_COUNTER = 1 跳过一个事务 mysql>slave start 2.SET GLOBAL SQLSLAVESKIP_COUNTER = 1,跳过一个事务的概念。 在mysql中,对......

鼠标泪
2012/11/08
0
0
mysql5.5主从同步排错

SlaveSQLRunning: No mysql同步故障解决方法 SlaveSQLRunning: No mysql同步故障解决 今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态: mysql> show slave statusG SlaveIOR...

tianxiamall
2014/08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部