mysql主从复制错误:Last_SQL_Error: Error 'Duplicate entry '327' for key 'PRIMARY'' on query. Default database: 'xxx'. Query:

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
全局流量管理 GTM,标准版 1个月
简介: 这个算不算解决,我都不太清楚,因为我感觉网上的说法,只是把错误忽略了,不表示以后用从库时不会出问题!!! 解决的办法是在从库上执行: mysql> slave stop; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> slave s...

这个算不算解决,我都不太清楚,因为我感觉网上的说法,只是把错误忽略了,不表示以后用从库时不会出问题!!!

解决的办法是在从库上执行:

mysql> slave stop;
 mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> slave start;

上面的方法可以解决问题,还有一种解决问题的办法是通过修改mysql的配置文件,让从库的同步线程忽略这个错误,方法:

修改mysql配置文件 /etc/my.cnf 在 [mysqld]下加一行 slave_skip_errors = 1062 ,保存.重启mysql. mysql slave可以正常同步了.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

专业点的是以下这个:

线上环境我从来没有碰到过1062的问题,测试环境开发环境不停的出现类似问题,以往为了赶时间都是skip或者直接重新做,这会有时间,就好好去查查问题所在。 

1 从库报错信息: 
mysql> show slave status\G 
*************************** 1. row *************************** 
               Slave_IO_State: Waiting for master to send event 
                  Master_Host: xxxx0402.china.online.ea.com 
                  Master_User: replication 
                  Master_Port: 3306 
                Connect_Retry: 60 
              Master_Log_File: mysql-bin.000154 
          Read_Master_Log_Pos: 56680675 
               Relay_Log_File: mysql-relay-bin.000455 
                Relay_Log_Pos: 33013454 
        Relay_Master_Log_File: mysql-bin.000152 
             Slave_IO_Running: Yes 
            Slave_SQL_Running: No 
              Replicate_Do_DB:  
          Replicate_Ignore_DB:  
           Replicate_Do_Table:  
       Replicate_Ignore_Table:  
      Replicate_Wild_Do_Table:  
  Replicate_Wild_Ignore_Table:  
                   Last_Errno: 1062 
                   Last_Error: Error 'Duplicate entry '250.1.1-rding-changelogs/myIDENTITY/250/xxxx.xml' for key 'PRIMARY'' on query. Default database: 'identity'. Query: 'INSERT INTO `DATABASECHANGELOG` (`DATEEXECUTED`, `AUTHOR`, `xxxx`, `DESCRIPTION`, `COMMENTS`, `MD5SUM`, `ID`, `FILENAME`) VALUES (NOW(), 'rding', '1.9.3', 'Custom SQL', '', '4ac9fbf5222bc344362ccdecbc072', '250.1.1', 'changelogs/myIDENTITY/250/xxxx.xml')' 
                 Skip_Counter: 0 
          Exec_Master_Log_Pos: 33013308 
              Relay_Log_Space: 33020134 
              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: Error 'Duplicate entry '250.1.1-rding-changelogs/myIDENTITY/250/xxxx.xml' for key 'PRIMARY'' on query. Default database: 'identity'. Query: 'INSERT INTO `DATABASECHANGELOG` (`DATEEXECUTED`, `AUTHOR`, `xxxx`, `DESCRIPTION`, `COMMENTS`, `MD5SUM`, `ID`, `FILENAME`) VALUES (NOW(), 'rding', '1.9.3', 'Custom SQL', '', '4ac9fbf5222bc344362ccdecbc072', '250.1.1', 'changelogs/myIDENTITY/250/xxxx.xml')' 
  Replicate_Ignore_Server_Ids:  
             Master_Server_Id: 1 
1 row in set (0.00 sec) 

2 看表结构 
mysql> show create table DATABASECHANGELOG; 
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Table             | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                              | 
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| DATABASECHANGELOG | CREATE TABLE `databasechangelog` ( 
  `ID` varchar(63) NOT NULL, 
  `AUTHOR` varchar(63) NOT NULL, 
  `FILENAME` varchar(200) NOT NULL, 
  `DATEEXECUTED` datetime NOT NULL, 
  `MD5SUM` varchar(32) DEFAULT NULL, 
  `DESCRIPTION` varchar(255) DEFAULT NULL, 
  `COMMENTS` varchar(255) DEFAULT NULL, 
  `TAG` varchar(255) DEFAULT NULL, 
  `xxxx` varchar(10) DEFAULT NULL, 
  PRIMARY KEY (`ID`,`AUTHOR`,`FILENAME`) 坑爹的表设计结构,不是我喜欢的风格 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

3 看已经存在的数据 
mysql> select * from DATABASECHANGELOG  where AUTHOR ='rding'; 
+---------+--------+-----------------------------------------+---------------------+----------------------------------+-------------+------------------------------------------+------+-----------+ 
| ID      | AUTHOR | FILENAME                                | DATEEXECUTED        | MD5SUM                           | DESCRIPTION | COMMENTS                                 | TAG  | xxxx |
+---------+--------+-----------------------------------------+---------------------+----------------------------------+-------------+------------------------------------------+------+-----------+ 
| 250.1.1 | rding  | changelogs/myIDENTITY/250/xxxx.xml | 2013-08-12 20:41:22 | 4ac9fbf5222bc344362ccdecbc072    | Custom SQL  |                                          | NULL | 1.9.3     | 
| 250.1.2 | rding  | changelogs/myIDENTITY/250/xxxx.xml | 2013-08-12 20:41:22 | 8463e1cf4ba029e3ace675d3e69a71d2 | Custom SQL  | Create new table for email change record | NULL | 1.9.3     | 
+---------+--------+-----------------------------------------+---------------------+----------------------------------+-------------+------------------------------------------+------+-----------+ 
2 rows in set (0.00 sec) 

4 看binlog,在Relay_Master_Log_File: mysql-bin.000152,去主库找这个binlog解析出来 
解析 
[root@xxxx0402 tmp]# mysqlbinlog mysql-bin.000152 > a152.log 
搜索包含'rding'字符串的语句,因为这个是主键字段之一,所以检索起来应该比较容易。 
[root@xxxx0402 tmp]# grep a152.log 'rding' > rd.log 
grep: rding: No such file or directory 
[root@xxxx0402 tmp]# grep  'rding' a152.log > rd.log 
[root@xxxx0402 tmp]# ll 

[root@xxxx0402 tmp]# more rd.log  
INSERT INTO `DATABASECHANGELOG` (`DATEEXECUTED`, `AUTHOR`, `xxxx`, `DESCRIPTION`, `COMMENTS`, `MD5SUM`, `ID`, `FILENAME`) VALUES (NOW(), 'rding', '1.9.3', 'Custom 
 SQL', '', '4ac9fbf5222bc344362ccdecbc072', '250.1.1', 'changelogs/myIDENTITY/250/xxxx.xml') 
INSERT INTO `DATABASECHANGELOG` (`DATEEXECUTED`, `AUTHOR`, `xxxx`, `DESCRIPTION`, `COMMENTS`, `MD5SUM`, `ID`, `FILENAME`) VALUES (NOW(), 'rding', '1.9.3', 'Custom 
 SQL', 'Create new table for email change record', '8463e1cf4ba029e3ace675d3e69a71d2', '250.1.2', 'changelogs/myIDENTITY/250/xxxx.xml') 

主库上面只有一条insert sql语句。 

5 再去看从库的relay log日志Relay_Log_File: mysql-relay-bin.000455 
[root@eanshlt2mydbc004db002 data]# cp mysql-relay-bin.000455 /tmp 
[root@eanshlt2mydbc004db002 data]# cd /tmp 
[root@eanshlt2mydbc004db002 tmp]# mysqlbinlog mysql-relay-bin.000455 > relay.log 
[root@eanshlt2mydbc004db002 tmp]#  
[root@eanshlt2mydbc004db002 tmp]# grep  'rding' relay.log > rd.log 
[root@eanshlt2mydbc004db002 tmp]# more rd.log 
INSERT INTO `DATABASECHANGELOG` (`DATEEXECUTED`, `AUTHOR`, `xxxx`, `DESCRIPTION`, `COMMENTS`, `MD5SUM`, `ID`, `FILENAME`) VALUES (NOW(), 'rding', '1.9.3', 'Custom 
 SQL', '', '4ac9fbf5222bc344362ccdecbc072', '250.1.1', 'changelogs/myIDENTITY/250/xxxx.xml') 
INSERT INTO `DATABASECHANGELOG` (`DATEEXECUTED`, `AUTHOR`, `xxxx`, `DESCRIPTION`, `COMMENTS`, `MD5SUM`, `ID`, `FILENAME`) VALUES (NOW(), 'rding', '1.9.3', 'Custom 
 SQL', 'Create new table for email change record', '8463e1cf4ba029e3ace675d3e69a71d2', '250.1.2', 'changelogs/myIDENTITY/250/xxxx.xml')

奇怪了,2边的都是一样子的。这个错误怎么判断? 

6 去看下主从关于这个数据记录的录入时间。 
从库上面: 
mysql> select * from DATABASECHANGELOG where AUTHOR='rding' and ID='250.1.1' and FILENAME='changelogs/myIDENTITY/250/xxxx.xml'\G; 
*************************** 1. row *************************** 
          ID: 250.1.1 
      AUTHOR: rding 
    FILENAME: changelogs/myIDENTITY/250/xxxx.xml 
DATEEXECUTED: 2013-08-12 20:41:22 
      MD5SUM: 4ac9fbf5222bc344362ccdecbc072 
 DESCRIPTION: Custom SQL 
    COMMENTS:  
         TAG: NULL 
   xxxx: 1.9.3 
1 row in set (0.00 sec) 

ERROR:  
No query specified 
mysql>  

主库上面 : 
mysql> select * from DATABASECHANGELOG where AUTHOR='rding' and ID='250.1.1' and FILENAME='changelogs/myIDENTITY/250/xxxx.xml'\G; 
*************************** 1. row *************************** 
          ID: 250.1.1 
      AUTHOR: rding 
    FILENAME: changelogs/myIDENTITY/250/xxxx.xml 
DATEEXECUTED: 2013-08-12 19:54:29 
      MD5SUM: 4ac9fbf5222bc344362ccdecbc072 
 DESCRIPTION: Custom SQL 
    COMMENTS:  
         TAG: NULL 
   xxxx: 1.9.3 
1 row in set (0.02 sec) 

ERROR:  
No query specified 

mysql>  
看DATEEXECUTED时间字段都是8月12日录入的,可惜我的db server由于磁盘有限,只保存了近期的binlog,而且现在主库上面最早的binlog就是出错的那个mysql-bin.000152 

7 最后一招,去看从库的binlog,看是否近期有人insert了这条记录 
[root@eanshlt2mydbc004db002 data]# cp mysql-bin.004* /tmp/ 
[root@eanshlt2mydbc004db002 tmp]# mysqlbinlog mysql-bin.004268 > 1.log 
[root@eanshlt2mydbc004db002 tmp]# grep  'rding' 1.log > rd1.log 
[root@eanshlt2mydbc004db002 tmp]# ll rd1.log 
-rw-r--r-- 1 root root 0 Sep  3 17:47 rd1.log 
空的,第一个日志没有录入操作 

[root@eanshlt2mydbc004db002 tmp]# mysqlbinlog mysql-bin.004269 > 2.log 
[root@eanshlt2mydbc004db002 tmp]# grep  'rding' 2.log > rd2.log 
[root@eanshlt2mydbc004db002 tmp]# ll rd2.log 
-rw-r--r-- 1 root root 0 Sep  3 17:48 rd2.log 
[root@eanshlt2mydbc004db002 tmp]#  
空的,第二个日志没有录入操作 

[root@eanshlt2mydbc004db002 tmp]# mysqlbinlog mysql-bin.004270 > 3.log 
[root@eanshlt2mydbc004db002 tmp]# grep  'rding'  3.log > rd3.log 
[root@eanshlt2mydbc004db002 tmp]# ll rd3.log 
-rw-r--r-- 1 root root 0 Sep  3 17:49 rd3.log 
[root@eanshlt2mydbc004db002 tmp]#  
空的,第三个日志没有录入操作 

[root@eanshlt2mydbc004db002 tmp]# mysqlbinlog mysql-bin.004271 > 4.log 
ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 438, event_type: 2 
[root@eanshlt2mydbc004db002 tmp]# grep  'rding' 4.log > rd4.log 
[root@eanshlt2mydbc004db002 tmp]# ll rd4.log 
-rw-r--r-- 1 root root 0 Sep  3 17:50 rd4.log 
空的,第四个日志没有录入操作 

这里解析报错了,解决方案,记录在如此 
  http://blog.csdn.net/mchdba/article/details/11011229 
[root@eanshlt2mydbc004db002 tmp]# mysqlbinlog mysql-bin.004272 > 5.log 
[root@eanshlt2mydbc004db002 tmp]# grep  'rding' 5.log > rd5.log 
[root@eanshlt2mydbc004db002 tmp]# ll rd5.log 
-rw-r--r-- 1 root root 0 Sep  3 18:07 rd5.log 
[root@eanshlt2mydbc004db002 tmp]#  
空的,第五个日志没有录入操作 

解析了从库的5个日志,都没有看到这条纪律的insert操作,问题到此卡住了,原因何在?这边开发的兄弟们已经在催了,我只要skip之后从库重新做了。 

mysql> stop slave; 
set global sql_slave_skip_counter=1; 
start slave; 
show slave status\G 
Query OK, 0 rows affected (0.09 sec) 

mysql> set global sql_slave_skip_counter=1; 
Query OK, 0 rows affected (0.00 sec) 

mysql> start slave; 
Query OK, 0 rows affected (0.00 sec) 
mysql> show slave status\G 
*************************** 1. row *************************** 
               Slave_IO_State: Waiting for master to send event 
                  Master_Host: xxxx0402.china.online.ea.com 
                  Master_User: replication 
                  Master_Port: 3306 
                Connect_Retry: 60 
              Master_Log_File: mysql-bin.000184 
          Read_Master_Log_Pos: 27865900 
               Relay_Log_File: mysql-relay-bin.000495 
                Relay_Log_Pos: 253 
        Relay_Master_Log_File: mysql-bin.000171 
             Slave_IO_Running: Yes 
            Slave_SQL_Running: Yes 
              Replicate_Do_DB:  
          Replicate_Ignore_DB:  
           Replicate_Do_Table:  
       Replicate_Ignore_Table:  
      Replicate_Wild_Do_Table:  
  Replicate_Wild_Ignore_Table:  
                   Last_Errno: 0 
                   Last_Error:  
                 Skip_Counter: 0 
          Exec_Master_Log_Pos: 107 
              Relay_Log_Space: 8000 
              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: 3434734 
Master_SSL_Verify_Server_Cert: No 
                Last_IO_Errno: 0 
                Last_IO_Error:  
               Last_SQL_Errno: 0 
               Last_SQL_Error:  
  Replicate_Ignore_Server_Ids:  
             Master_Server_Id: 1 
1 row in set (0.11 sec) 

mysql>  

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
25天前
|
存储 关系型数据库 MySQL
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
86 1
|
25天前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
43 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
2月前
|
SQL 数据库
SQL error : “No query“问题参考
本文介绍了解决SQL中"No query"错误的步骤,包括错误提示、正确的SQL语句写法,以及更多相关参考信息。错误的原因是在构建更新语句时字段赋值之间缺少逗号,导致SQL解析失败。文章还提供了正确格式的SQL语句和相关错误处理的参考链接。
SQL error : “No query“问题参考
|
25天前
|
关系型数据库 MySQL 数据库
mysql 8.0 递归(例子分享)(sample database classicmodels _No.4)
本文介绍了如何在MySQL8.0中使用递归查询处理部门表和员工表的树形结构数据,包括查看文档、准备数据、递归处理以及提取层级信息。作者通过示例展示了WITHRECURSIVE语句的应用及其在数仓中的结构表示。
36 2
|
25天前
|
安全 关系型数据库 MySQL
mysql8.0 正值表达式Regular expressions (sample database classicmodels _No.5)
本文介绍了MySQL8.0中的正值表达式及其相关函数,通过实例展示了如何使用正则表达式进行字符串匹配,并提出了关于执行效率的问题。
44 1
|
25天前
|
SQL 关系型数据库 MySQL
介绍5款 世界范围内比较广的 5款 mysql Database Management Tool
介绍5款 世界范围内比较广的 5款 mysql Database Management Tool
44 0
|
25天前
|
算法 关系型数据库 MySQL
复购率 mysql 实例(sample database classicmodels _No.1 )
复购率 mysql 实例(sample database classicmodels _No.1 )
25 0
|
2月前
|
关系型数据库 MySQL Nacos
nacos启动报错 load derby-schema.sql error
这篇文章描述了作者在使用Nacos时遇到的启动错误,错误提示为加载derby-schema.sql失败,作者通过将数据库从Derby更换为MySQL解决了问题。
nacos启动报错 load derby-schema.sql error
|
3月前
|
SQL 关系型数据库 MySQL
MySQL的match WITH QUERY EXPANSION 模式是什么?如何使用?
【8月更文挑战第29天】MySQL的match WITH QUERY EXPANSION 模式是什么?如何使用?
61 4
|
3月前
|
关系型数据库 MySQL Java
解决com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large
这篇文章提供了解决MySQL JDBC驱动中`com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large`错误的步骤,主要是通过增加配置文件中的`max_allowed_packet`参数值并重启服务来允许更大的数据包传输。
解决com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large

热门文章

最新文章

下一篇
无影云桌面