解决Mysql 主从或主主报1062错误

news/2024/11/29 10:47:45/

1062错误——主键冲突,出现这种情况就是从库出现插入操作,主库又插入相同的数据,iothread没问题,sqlthread出错
处理此种错误一般有两种思路:
1、直接跳过错误执行语句
2、找到错误执行语句,修复主库2数据

语句跳过操作方法如下:
1062 错误提示如下:

         Last_Errno: 1062
         Last_Error: Could not execute Write_rows event on table test.test; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql2-bin.000001, end_log_pos 2799
         Skip_Counter: 0

—传统模式

    mysql> stop slave;        #表示跳过一步错误,后面的数字可变,(或者N条event,一条一条跳过)
    mysql> set global sql_slave_skip_counter =1;
    mysql> start slave;
    mysql> show slave status/G;


    mysql> show slave status/G;/
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.21
                      Master_User: rep1
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql2-bin.000001
              Read_Master_Log_Pos: 3087
                   Relay_Log_File: cndba-relay-bin.000006
                    Relay_Log_Pos: 587
            Relay_Master_Log_File: mysql2-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: test
    #还有一种方法跳过所有1062错误
    更改my.cnf文件,在Replication settings下添加:
    slave-skip-errors = 1062
    并重启数据库,然后start salve。
    注意:因为要重启数据库,不推荐,除非错误事件太多。

模拟1062场景:
主库1创建表

    mysql> create table test(id int PRIMARY KEY ,name varchar(32));
    Query OK, 0 rows affected (0.06 sec)
    修改参数sql_log_bin 使主库1操作不同步到主库2
    mysql> set sql_log_bin=0;
    Query OK, 0 rows affected (0.00 sec)
    mysql> insert into test values (1,'aa');
    Query OK, 1 row affected (0.02 sec)
    mysql> insert into test values (2,'bb');
    Query OK, 1 row affected (0.01 sec)
    mysql> insert into test values (3,'dd');
    Query OK, 1 row affected (0.00 sec)
    修改参数sql_log_bin 使主库1操作说同步到主库2
    mysql> set sql_log_bin=1;
    Query OK, 0 rows affected (0.00 sec)
    mysql> insert into test values (4,'cc');
    Query OK, 1 row affected (0.08 sec)
    mysql> select * from test;
    +----+------+
    | id | name |
    +----+------+
    |  1 | aa   |
    |  2 | bb   |
    |  3 | dd   |
    |  4 | cc   |
    +----+------+
    4 rows in set (0.00 sec)

主库2查看数据同步情况主库2查看数据同步情况

    可以看到主库2数据只同步了一条数据
    mysql> select * from test;
    +----+------+
    | id | name |
    +----+------+
    |  4 | cc   |
    +----+------+
    1 row in set (0.00 sec)

在主库2插入表test

    mysql> insert into test values (2,'bb');
    Query OK, 1 row affected (0.01 sec)

在主库1查看主从状态

    发现报1062错误,发生这个错误的原因是因为主库1已经存在id=2的数据,导致主键冲突。
    mysql> show slave status/G;
    ......
                       Last_Errno: 1062
                       Last_Error: Could not execute Write_rows event on table test.test; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql2-bin.000001, end_log_pos 2799
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 2564
                  Relay_Log_Space: 1541
                  Until_Condition: None
                   Until_Log_File:
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: NULL
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 1062
                   Last_SQL_Error: Could not execute Write_rows event on table test.test; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql2-bin.000001, end_log_pos 2799
    ......

根本解决办法:

    根据Last_Error中提示的master log和end_log_pos的位置查找这条主库2上缺失的数据
    主库2操作:
    [root@cndba data]# mysqlbinlog --no-defaults -v --base64-output=decode-rows  --stop-position=2799 /data/mysql/binlog/mysql2-bin.000001 | tail -20
    #180819 10:59:56 server id 21  end_log_pos 2706 CRC32 0x5a43437b     Query    thread_id=6    exec_time=0    error_code=0
    SET TIMESTAMP=1534647596/*!*/;
    SET @@session.sql_mode=1436549152/*!*/;
    SET @@session.auto_increment_increment=2, @@session.auto_increment_offset=2/*!*/;
    BEGIN
    /*!*/;
    # at 2706
    #180819 10:59:56 server id 21  end_log_pos 2756 CRC32 0x0d6a3132     Table_map: `test`.`test` mapped to number 229
    # at 2756
    #180819 10:59:56 server id 21  end_log_pos 2799 CRC32 0xc6a8a0b0     Write_rows: table id 229 flags: STMT_END_F
    ### INSERT INTO `test`.`test`
    ### SET
    ###   @1=2
    ###   @2='bb'
    ROLLBACK /* added by mysqlbinlog */ /*!*/;
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
    DELIMITER ;
    # End of log file
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    找到之后,手动转变为delete 语句
    主库1执行以下语句:
    mysql> delete from test where id=2;
    Query OK, 1 row affected (0.02 sec)
    启动复制
    mysql> start slave;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    查看主库2状态:
    mysql> show slave status/G;
    ......
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    ......

确定插入的数据和库里的数据是不是相同,如果相同可以删除主库1的数据来解决,否则可以考虑跳过这个事件来解决


http://www.ppmy.cn/news/703678.html

相关文章

C++刷题错误集锦

AddressSanitizer: heap-buffer-overflow on address 堆缓存移除,数组访问越界了。C之invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’ 函数原型上参数是int类型,但是在调用函数的时候却是“int&am…

ZUCC数据库原理 第二部分开发 实验6

实验6 JDBC进阶(3) 一、相关知识点 1、JDBC基本概念 2、批处理 3、DAO和OR映射 二、实验目的: 掌握批量SQL语句执行的方法,理解DAO和ORM的基本概念 三、实验内容: 利用批量SQL语句执行的方法实现实验5中的最后两…

实验记录 | 6/29

使用scSplitter拆分10X 的数据的时候,出现了问题。 EXITING because of FATAL ERROR in reads input: quality string length is not equal to sequence length ST-K00126:608:HWNLJBBXX:6:2115:23480:3459 ST-K00126:608:HWNLJBBXX:6:1212:4005:42513 2:N:0:GATCTC…

php code128条码,PHP教程:php实现生成code128条形码的方法详解

《PHP教程:php实现生成code128条形码的方法详解》要点: 本文介绍了PHP教程:php实现生成code128条形码的方法详解,希望对您有用。如果有疑问,可以联系我们。 本文实例讲述了php实现生成code128条形码的方法.分享给大家供…

硬件检测信息记录

硬盘:东芝 THNSNJ128GCSY (固态硬盘 [基础信息] ---------------------------------------------------------------------------------- 名称 东芝 THNSNJ128GCSY (固态硬盘) 容量 128 GB 磁盘已使用 共 1604 …

Barco无线演示系统受多个漏洞困扰

F-Secure的IT安全研究人员在Barco的Clickshare产品(一种无线演示系统)中发现了一些高危漏洞,可以让攻击者在演示期间窃取到关键信息,甚至还会影响密码等敏感信息。 此外,通过这些漏洞攻击者还可以在目标设备上安装后门…

盘点6月Sui生态发展,了解Sui的近期成长历程!

自5月Sui主网上线以来,已两月有余,最近一个月Sui网络进行多次迭代更新,生态正在不断稳步发展。为吸引更多的项目或开发者前来构建,Sui基金会推出了黑客松以及多项生态建设活动,进一步助力生态持续发展。 以下是Sui的近…

MES生产管理系统与ERP系统的集成以及优势

导言: 在当今数字化转型的浪潮中,企业越来越意识到整合各个部门的数据和流程的重要性。MES生产管理系统和ERP系统是两个关键的管理工具,它们在企业中发挥着不可或缺的作用。本文将探讨企业MES管理系统与ERP系统进行集成,以及这种…