Last_SQL_Errno: 1062
Last_SQL_Errno: 1062:
Last_Error: Error 'Duplicate entry '212' for key 'PRIMARY'' on query. Default database: 'iuc'. Query: '/* insert com.gionee.iuc.entity.main.Module */ insert into security_module (description, dtype, name, parent_id, priority, sn, sysid, type, url) values ('',
'MENU', '评论管理', 198, 99, 'commentMng', 198, 'o', '/')'
在show slave status\G时,提示了如上的错误,并且:Slave_SQL_Running: No 、Seconds_Behind_Master: NULL(这个参数表示与主库的同步还有多少,如果与主库是同步的应该是0),这是因为主库那边有error,从库这边就application不了,有一个参数可以设置从库跳过这些错误:sql_slave_skip_counter,这个参数正常情况下设置为1不会出问题,表示跳过1个事务,如果在运行中的主从复制,sql_slave_skip_counter参数值是默认的0,这时候主库又有大量的报错,这个时候可以,先stop
slave , 再
set global sql_slave_skip_counter=1;然后重新change master,不过master_log_pos要为主库的最新值,不能跟初始设置主从那样设为0,再启动slave,在show salve satatus就正常了,下次再遇到主库有大量错误的情况下是不是会一一跳过,就要看后续观察。以下是网上关于sql_slave_skip_counter的解释。
之前一直以为我们设置sql_slave_skip_counter=1时我们是跳过当前事务复制出错的日志,看完淘宝丁奇大师的blog后 顿时明白了其真正含义,以下为转载丁奇blog: http://dinglin.iteye.com/blog/1236330
背景知识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,由引擎和日志格式决定
Last_SQL_Errno: 1062的更多相关文章
- Mysql主从库同步错误:1062 Error 'Duplicate entry '1438019'
mysql主从库同步错误:1062 Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query mysql主从库在同步时会发生1062 L ...
- 【转】如何使用slave_exec_mode优雅的跳过1032 1062的复制错误
今天线上的主从复制发生1062的错误,使用sql_slave_skip_counter跳过之后,由于后面的事务需要对刚刚的数据进行update,后续造成了新的1032的错误. 后来,无意中发现还有更好 ...
- Last_IO_Errno: 1062
主键冲突的错误 1062 模拟错误: 在主库上操作: create table test100(id int not null,name varchar(20),primary key(id) ...
- 从show slave status 中1062错误提示信息找到binlog的SQL
mysql> show slave status\G *************************** 1. row *************************** Slave_I ...
- MySQL Last_SQL_Errno: 1062----经典错误,主键冲突
一.基础信息 1. Centos7.4 2.MySQL 5.7.21 3.基于gtid的复制 二.异常描述 误把从节点当成主节点插入一条数据,同一条数据在主.从节点插入都进行了一次插入操作,导致主键冲 ...
- 1062 Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query
mysql主从库同步错误:1062 Error 'Duplicate entry '1438019' for key 'PRIMARY'' on querymysql主从库在同步时会发生1062 La ...
- mysql8.0.17复制搭建及其gtid的1062和1032异常
mysql8.0.17复制搭建及其gtid的1062和1032异常 参考资料: https://blog.csdn.net/wzy0623/article/details/91982743https: ...
- MySQL 5.7 Replication 相关新功能说明
背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...
- zabbix3.0.4监控mysql主从同步
zabbix3.0.4监控mysql主从同步 1.监控mysql主从同步原理: 执行一个命令 mysql -u zabbix -pzabbix -e 'show slave status\G' 我们在 ...
随机推荐
- hdu6206 Apple
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6206 题目: Apple Time Limit: 1000/1000 MS (Java/Oth ...
- nmon监控及简要分析
性能测试中,各个服务器资源占用统计分析是一个很重要的组成部分,通常我们使用nmon这个工具来进行监控以及监控结果输出. 一. 在监控阶段使用类似下面的命令 ./nmon -f write_3s_20v ...
- 一只代码小白git托管路上的二三事
[经验]一只代码小白git托管路上的二三事 写在前面的话 寒假的时候,娄老师给我们布置了代码托管的作业,并要求把托管地址发给学委.因假期的时候没有带电脑回家,所以只是在手机上草草注册了,也稀里糊涂就将 ...
- a=b=c 连等赋值的分析
首先 先抛出两个例子,大家想想结果是什么? eg1: var a = 1; var b = a; a.x = a = 3; 问 a = ? | b = ? | a.x = ? eg2: var ...
- OpenStack之Nova模块
Nova简介 nova和swift是openstack最早的两个组件,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,no ...
- linux把软件安装到指定目录
1.安装包带configure文件的: ./configure --prefix=安装目录 2.安装包不带configure文件,只带MakeFile 2.1 make install PREFIX= ...
- 百度console输出
try{ if(window.console&&window.console.log) { console.log("一张网页,要经历怎样的过程,才能抵达用户面前?\n一位新 ...
- 强大的jQuery选择器 平时用的太少了 下次要先来看看
- 解读:Hadoop序列化类
序列化(serialization)是指将结构化的对象转化字节流,以便在进程间通信或写入硬盘永久存储. 反序列化(deserialization)是指将字节流转回到结构化对象的过程. 需要注意的是,能 ...
- du df 磁盘命令
du命令是检查硬盘使用情况,统计文件或目录及子目录使用硬盘的空间大小.参数的不同组合,可以更快的提高工作效率,以下仅列出了经常使用到的参数,如需更详细的信息,请用man du命令来获得. 说明 - ...