这时候需要跳过这条错误

3| mysql-bin.000010 | 46755214 | Query      |         1 |    46755283 |
BEGIN                                                  | 

理解错了,以为对于事务型,N代表N个事务,而非事务型,代表一条sql
语句。后经过linuxtone曹哥指导发现,其实并不是这么回事
 

Skip_Counter: 0

很明显,是21,那么我们可以执行SET GLOBAL sql_slave_skip_counter
=21(这里你SET GLOBAL sql_slave_skip_counter =19或者20都可以)

24 rows in set (0.00 sec)          

大家都知道,当slave出现错误时,可以通过SET GLOBAL
sql_slave_skip_counter =
N来跳过错误,但是这个N,又真正代表什么呢,开始时,

在 master 上,执行

   Last_Error: Error ‘Duplicate entry ‘190’ for key ‘PRIMARY” on
query. Default database: ‘ssldb’. Query: ‘insert slave_no_skip1
 values (190,’y17′)’

在mysql中,对于sql的 binary log
他实际上是由一连串的event组成的一个组,即事务组。

mysql> SHOW BINLOG EVENTS in ‘mysql-bin.000010’ from 46755013;

5| mysql-bin.000010 | 46755387 | Xid        |         1 |    46755414 |
COMMIT /* xid=4529452 */                               | 

| mysql-bin.000010 | 46756487 | Query      |         1 |    46756592 |
use `ssldb`; insert slave_no_skip1  values (190,’y17′) | 

在MYSQL进行Replication的时候,有时候会由于主从端的POS点不同,导致复制的SQL进程出现错误,从而导致主从…

下面阐述下N的意思,转帖

 

6| mysql-bin.000010 | 46755414 | Query      |         1 |    46755483 |
BEGIN                                                  | 

我们在master上可以通过
 

show slave status 

在slave上

| mysql-bin.000010 | 46755013 | Query      |         1 |    46755082 |
BEGIN                                                  | 

3:启动SLAVE服务

如果我们想跳到最后一条语句“use `ssldb`; insert slave_no_skip1
 values (190,’y17′)“的话 ,我们必须简单计算下中间有多少个event
 

文档中有介绍说( …
e-skip-counter.html):

16| mysql-bin.000010 | 46756085 | Query      |         1 |    46756190 |
use `ssldb`; insert slave_no_skip1  values (198,’y15′) | 

2:设置跳过的EVENT个数

在MYSQL进行Replication的时候,有时候会由于主从端的POS点不同,导致复制的SQL进程出现错误,从而导致主从复制失败。比如在主端复制一个ID是100的到从端,而此时由于某种原因从端已经有了ID=100的记录,这时进行INSERT操作的时候,就会主键重复,插入失败。这时候需要跳过这条错误。方法如下

9| mysql-bin.000010 | 46755614 | Query      |         1 |    46755683 |
BEGIN                                                  | 

可见 他已经如我所愿,跳到use `ssldb`; insert slave_no_skip1  values
(190,’y17′)这里了。

 

20| mysql-bin.000010 | 46756391 | Xid        |         1 |    46756418 |
COMMIT /* xid=4529457 */                               | 

SHOW BINLOG EVENTS 来查看一个sql里有多少个event。

  Last_Error: Error ‘Duplicate entry ‘193’ for key ‘PRIMARY” on query.
Default database: ‘ssldb’. Query: ‘insert slave_no_skip1  values
(193,’y10′)’

 

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

7| mysql-bin.000010 | 46755483 | Query      |         1 |    46755587 |
use `ssldb`; insert slave_no_skip1 values (195,’y12′)  | 

mysql> START SLAVE;

 

  www.2cto.com  

在slave 在次执行show slave status查看 

 

11| mysql-bin.000010 | 46755788 | Xid        |         1 |    46755815 |
COMMIT /* xid=4529454 */                               | 

12| mysql-bin.000010 | 46755815 | Query      |         1 |    46755884 |
BEGIN                                                  | 

+——————+———-+————+———–+————-+——————————————————–+

| mysql-bin.000010 | 46756592 | Xid        |         1 |    46756619 |
COMMIT /* xid=4529458 */                               | 

Skip_Counter: 0  www.2cto.com  

13| mysql-bin.000010 | 46755884 | Query      |         1 |    46755989 |
use `ssldb`; insert slave_no_skip1  values (197,’y14′) | 

通过错误可知,他是use `ssldb`; insert slave_no_skip1  values
(193,’y10′) 这条语句导致错误了

1:停止SLAVE 服务

This statement skips the next N events from the master

18| mysql-bin.000010 | 46756217 | Query      |         1 |    46756286 |
BEGIN                                                  | 

Last_Errno: 1062

mysql> STOP SLAVE;

2| mysql-bin.000010 | 46755187 | Xid        |         1 |    46755214 |
COMMIT /* xid=4529451 */                               | 

     www.2cto.com  

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

21| mysql-bin.000010 | 46756418 | Query      |         1 |    46756487 |
BEGIN                                                  | 

14| mysql-bin.000010 | 46755989 | Xid        |         1 |    46756016 |
COMMIT /* xid=4529455 */                               | 

19| mysql-bin.000010 | 46756286 | Query      |         1 |    46756391 |
use `ssldb`; insert slave_no_skip1  values (199,’y16′) | 

17| mysql-bin.000010 | 46756190 | Xid        |         1 |    46756217 |
COMMIT /* xid=4529456 */                               | 

8| mysql-bin.000010 | 46755587 | Xid        |         1 |    46755614 |
COMMIT /* xid=4529453 */                               | 

通过例子来说明下,真正的event的含义:

Last_Errno: 1062

即他是跳过N个events,这里最重要的是理解event的含义

 

10| mysql-bin.000010 | 46755683 | Query      |         1 |    46755788 |
use `ssldb`; insert slave_no_skip1  values (196,’y13′) | 

15| mysql-bin.000010 | 46756016 | Query      |         1 |    46756085 |
BEGIN                                                  | 

+——————+———-+————+———–+————-+——————————————————–+

4| mysql-bin.000010 | 46755283 | Query      |         1 |    46755387 |
use `ssldb`; insert slave_no_skip1 values (194,’y11′)  | 

 

| Log_name         | Pos      | Event_type | Server_id |
End_log_pos | Info                                                   |

1| mysql-bin.000010 | 46755082 | Query      |         1 |    46755187 |
use `ssldb`; insert slave_no_skip1  values (193,’y10′) | 

+——————+———-+————+———–+————-+——————————————————–+

相关文章