热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MYSQL数据库复制时跳过错误的方法

MYSQL数据库复制时跳过错误的方法在MYSQL进行Replication的时候,有时候会由于主从端的POS点不同,导致复制的SQL进程出现错误,从而导致主从复制失败。比如在主端复制一个ID是100的到从端,而此时由于某种原因从...SyntaxHighlighter.all()

MYSQL数据库复制时跳过错误的方法
 
在MYSQL进行Replication的时候,有时候会由于主从端的POS点不同,导致复制的SQL进程出现错误,从而导致主从复制失败。比如在主端复制一个ID是100的到从端,而此时由于某种原因从端已经有了ID=100的记录,这时进行INSERT操作的时候,就会主键重复,插入失败。这时候需要跳过这条错误。方法如下
 
1:停止SLAVE 服务
mysql> STOP SLAVE;
 
2:设置跳过的EVENT个数
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
  www.2cto.com  
3:启动SLAVE服务
mysql> START SLAVE;
 
下面阐述下N的意思,转帖
大家都知道,当slave出现错误时,可以通过SET GLOBAL sql_slave_skip_counter = N来跳过错误,但是这个N,又真正代表什么呢,开始时,
理解错了,以为对于事务型,N代表N个事务,而非事务型,代表一条sql 语句。后经过linuxtone曹哥指导发现,其实并不是这么回事
 
文档中有介绍说(http://dev.mysql.com/doc/refman/ ... e-skip-counter.html):
This statement skips the next N events from the master
 
即他是跳过N个events,这里最重要的是理解event的含义
mysql中,对于sql的 binary log 他实际上是由一连串的event组成的一个组,即事务组。
我们在master上可以通过
 
SHOW BINLOG EVENTS 来查看一个sql里有多少个event。
通过例子来说明下,真正的event的含义:
在slave上
show slave status 
Last_Errno: 1062
  Last_Error: Error 'Duplicate entry '193' for key 'PRIMARY'' on query. Default database: 'ssldb'. Query: 'insert slave_no_skip1  values (193,'y10')'
Skip_Counter: 0  www.2cto.com  
在 master 上,执行
mysql> SHOW BINLOG EVENTS in 'mysql-bin.000010' from 46755013;
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| Log_name         | Pos      | Event_type | Server_id | End_log_pos | Info                                                   |
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| mysql-bin.000010 | 46755013 | Query      |         1 |    46755082 | BEGIN                                                  | 
1| mysql-bin.000010 | 46755082 | Query      |         1 |    46755187 | use `ssldb`; insert slave_no_skip1  values (193,'y10') | 
2| mysql-bin.000010 | 46755187 | Xid        |         1 |    46755214 | COMMIT /* xid=4529451 */                               | 
3| mysql-bin.000010 | 46755214 | Query      |         1 |    46755283 | BEGIN                                                  | 
4| mysql-bin.000010 | 46755283 | Query      |         1 |    46755387 | use `ssldb`; insert slave_no_skip1 values (194,'y11')  | 
5| mysql-bin.000010 | 46755387 | Xid        |         1 |    46755414 | COMMIT /* xid=4529452 */                               | 
6| mysql-bin.000010 | 46755414 | Query      |         1 |    46755483 | BEGIN                                                  | 
7| mysql-bin.000010 | 46755483 | Query      |         1 |    46755587 | use `ssldb`; insert slave_no_skip1 values (195,'y12')  | 
8| mysql-bin.000010 | 46755587 | Xid        |         1 |    46755614 | COMMIT /* xid=4529453 */                               | 
9| mysql-bin.000010 | 46755614 | Query      |         1 |    46755683 | BEGIN                                                  | 
10| mysql-bin.000010 | 46755683 | Query      |         1 |    46755788 | use `ssldb`; insert slave_no_skip1  values (196,'y13') | 
11| mysql-bin.000010 | 46755788 | Xid        |         1 |    46755815 | COMMIT /* xid=4529454 */                               | 
12| mysql-bin.000010 | 46755815 | Query      |         1 |    46755884 | BEGIN                                                  | 
13| mysql-bin.000010 | 46755884 | Query      |         1 |    46755989 | use `ssldb`; insert slave_no_skip1  values (197,'y14') | 
14| mysql-bin.000010 | 46755989 | Xid        |         1 |    46756016 | COMMIT /* xid=4529455 */                               | 
15| mysql-bin.000010 | 46756016 | Query      |         1 |    46756085 | BEGIN                                                  | 
16| mysql-bin.000010 | 46756085 | Query      |         1 |    46756190 | use `ssldb`; insert slave_no_skip1  values (198,'y15') | 
17| mysql-bin.000010 | 46756190 | Xid        |         1 |    46756217 | COMMIT /* xid=4529456 */                               | 
18| mysql-bin.000010 | 46756217 | Query      |         1 |    46756286 | BEGIN                                                  | 
19| mysql-bin.000010 | 46756286 | Query      |         1 |    46756391 | use `ssldb`; insert slave_no_skip1  values (199,'y16') | 
20| mysql-bin.000010 | 46756391 | Xid        |         1 |    46756418 | COMMIT /* xid=4529457 */                               | 
21| mysql-bin.000010 | 46756418 | Query      |         1 |    46756487 | BEGIN                                                  | 
| mysql-bin.000010 | 46756487 | Query      |         1 |    46756592 | use `ssldb`; insert slave_no_skip1  values (190,'y17') | 
| mysql-bin.000010 | 46756592 | Xid        |         1 |    46756619 | COMMIT /* xid=4529458 */                               | 
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
24 rows in set (0.00 sec)          
     www.2cto.com  
通过错误可知,他是use `ssldb`; insert slave_no_skip1  values (193,'y10') 这条语句导致错误了
如果我们想跳到最后一条语句“use `ssldb`; insert slave_no_skip1  values (190,'y17')“的话 ,我们必须简单计算下中间有多少个event
 
很明显,是21,那么我们可以执行SET GLOBAL sql_slave_skip_counter =21(这里你SET GLOBAL sql_slave_skip_counter =19或者20都可以)
 
在slave 在次执行show slave status查看 
Last_Errno: 1062
   Last_Error: Error 'Duplicate entry '190' for key 'PRIMARY'' on query. Default database: 'ssldb'. Query: 'insert slave_no_skip1  values (190,'y17')'
Skip_Counter: 0
 
可见 他已经如我所愿,跳到use `ssldb`; insert slave_no_skip1  values (190,'y17')这里了。

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
我想飞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有