`
zhangxiong0301
  • 浏览: 359672 次
社区版块
存档分类
最新评论

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;

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
在 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)         
  
通过错误可知,他是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')这里了。
分享到:
评论

相关推荐

    linux运维学习笔记:MySQL主从复制原理和实战.pdf

    MySQL主从复制的基本原理涉及到二进制日志(binlog)和中继日志(relay log)。二进制日志记录了数据库的所有更改,包括表的创建、更改和删除等。当数据库发生变化时,主服务器会将这些更改记录到二进制日志中。从...

    Mysql 主从1062问题修复

    - **冲突解决策略**:在配置主从复制时,可以设定错误处理策略,如使用`SLAVE_SQL_SKIP_COUNTER`来跳过错误记录,或者配置`max_allowed_packet`参数以适应大记录的传输。 6. **优化主从复制**: - **异步复制**:...

    mysql-replication mysql数据库主从复制步骤

    - **跳过从服务启动**:`skip-slave-start`配置项避免了从服务器在启动时自动开始复制操作,这通常在初始化配置时使用。 - **二进制日志**:虽然从服务器不需要生成二进制日志,但这里也配置了相关的参数,如`log-...

    MySQL主从复制配置

    MySQL主从复制是一种数据库高可用性和负载均衡的解决方案,它允许数据从一个主数据库(Master)实时同步到一个或多个从数据库(Slave)。在主从配置中,所有的写操作都在主数据库上执行,而从数据库则接收并应用主...

    docker配置mysql主从复制.docx

    - 编辑从服务器的配置文件,设置 `server-id=2`,开启日志,并根据需要配置中继日志、跳过某些错误等。 5. **启动从服务器**: - 使用与启动主服务器相似的Docker命令,但映射不同的端口,并挂载从服务器的配置和...

    MySQLDBA主从复制出错怎么办.docx

    MySQL数据库主从复制是...前者能帮助你在不影响数据一致性的情况下跳过特定错误,而后者则允许你彻底重置从库的复制状态,以应对更复杂的问题。在实施这些解决方案之前,务必评估其对数据完整性和业务连续性的影响。

    Mysql主从复制注意事项的讲解

    如果遇到从服务器出现冲突无法复制的情况,可以尝试执行stop slave命令停止复制进程,然后通过set global sql_slave_skip_counter来跳过出现错误的事件。之后再执行start slave重新启动复制进程。如果多次操作仍无法...

    基于数据库中间件Mycat的MySQL主从与读写分离配置详解与示例

    1. 安装与配置MySQL主从:设置主库和从库的复制关系,配置主库的日志文件和位置,然后在从库上启动复制进程。 2. 配置Mycat:修改Mycat的schema.xml和server.xml文件,定义数据节点(DN)和数据源(DS),指定主库...

    CentOS下编写shell脚本来监控MySQL主从复制的教程

    这些命令包括停止从库、跳过一个复制错误的二进制日志事件、重启复制,并退出。 ```shell if [ "$Slave_IO_Running" != "Yes" -a "$Slave_SQL_Running" != "Yes" ]; then echo "$datetime $slave_ip Slave is not ...

    mysql 主从

    需要定位并解决错误,然后手动跳过错误行或重启复制。 5. **主服务器崩溃**:主服务器宕机时,需要尽快恢复服务。可以设置自动故障切换,或者手动将从服务器提升为主服务器。 6. **性能优化**:随着数据量的增长,...

    MySQL主从复制原理以及需要注意的地方

    - **错误处理**:在复制过程中遇到错误时,可以跳过错误继续复制,或者根据错误类型决定是否需要人工干预修复。 - **级联复制**:除了简单的主从结构,还可以实现多级主从复制,以支持更大规模的分布式数据库架构。 ...

    Mysql主从数据库搭建.docx

    - **注释**:跳过从库上的某个错误记录。 - **手动同步** - 在主库上执行: ```sql SHOW MASTER STATUS; ``` - 在从库上执行: ```sql STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE='binlog_file_name',...

    Mysql主从同步备份策略.pdf

    然而,需要注意的是,虽然跳过错误可以避免复制中断,但可能会导致数据不一致,因此在实际操作中需要根据具体业务需求权衡利弊。同时,随着MySQL版本的更新,配置方法和选项可能有所变化,使用时应参考最新的官方...

    mysql主从服务器设置方法

    总之,MySQL主从复制是一种有效提高数据安全性与服务连续性的解决方案,其配置涉及多个步骤,包括服务器环境的准备、数据库的安装、复制用户的创建、日志文件的配置以及从服务器的初始化和同步。在整个过程中,确保...

    mysql 主从服务器配置 文档

    ### MySQL主从服务器配置知识点详解 #### 一、配置背景及目标 在Linux环境下进行MySQL双机互备(即主从复制)配置是一项常见的数据库管理任务。本文档旨在通过一个具体的实例来展示如何实现两台服务器之间的数据...

    mysql主从配置

    - **错误处理**:通过`slave_skip_errors`选项可以跳过复制过程中的一些错误,防止复制中断。 - **数据不一致**:确保Master和Slave上的数据完全一致,可以通过导出导入的方式初始化数据。 - **性能优化**:根据实际...

    MySQL的M-S部署手册1

    以下是根据提供的文件内容,对MySQL主从部署的详细步骤和相关知识点的解释: 1. **下载MySQL**:首先需要从官方下载MySQL的安装包,例如在`https://dev.mysql.com/downloads/mysql/`,选择适合操作系统的版本。 2....

    Sharding-JDBC教程:Mysql数据库主从搭建.docx

    `slave-skip-errors=all`允许从库跳过错误,以确保即使遇到问题也能继续复制。最后,调整`slave-net-timeout`以避免因网络延迟导致的复制中断。 在从库上,我们需要停止复制服务,然后使用`change master to`命令...

    windows下mysql主从同步备份步骤.doc

    - 查看从服务器 B 中的 `mysql_error.log` 日志文件来排查错误。 #### 故障排除 - **主从不能同步**:如果遇到主从不能同步的情况,可以使用 `show slave status\G;` 命令查看详细状态。如果显示 `Error xxx doesn...

Global site tag (gtag.js) - Google Analytics