mysql slave duplicate entry_slave 报Duplicate entry for key
今天slave机器报如下错误
[ERROR] Slave SQL: Error 'Duplicate entry '7301' for key 'PRIMARY'' on query. Default database: 'rt_roledb0301'. Query: 'insert into gm_proc_run_info (run_name, des, err_code) values ('pc_rank_of_day', 'begin', 0)', Error_code: 1062
111027 4:00:12 [Warning] Slave: Duplicate entry '7301' for key 'PRIMARY' Error_code: 1062
111027 4:00:12 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-binlog.000009' position 31542061
定位分析:在主从切换以后,由于没有关闭从上的计划任务
(root@localhost:)[(none)]> show global variables like 'event_sch%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.00 sec)
导致 从服务器复制了一次主服务器计划任务的结果,又执行了一次相同的计划任务,导致了Duplicate entry报警。
解决方法:关闭从服务器上的计划任务,对从服务器进行数据恢复。
-------------------quote begin------------------------
3. If you decide that you can skip the next statement from the master, issue the following
statements:
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n;
mysql> START SLAVE;
The value of n should be 1 if the next statement from the master does not use
AUTO_INCREMENT or LAST_INSERT_ID(). Otherwise, the value should be 2. The
reason for using a value of 2 for statements that use AUTO_INCREMENT or
LAST_INSERT_ID() is that they take two events in the binary log of the master.
-------------------quote end------------------------
MySQL文档中的意思是当master传到slave的语句中要用到auto_increment,或者last_insert_id()时,需要skip两个event. 但实际情况并非如此
测试过程如下:
192.168.1.1 为master
192.168.1.2 为slave
同步test,初始状态ok
1. 在master上创建测试表
点击(此处)折叠或打开
mysql> create table tmp_test_0208(id int not nullauto_increment,name varchar(30),primary key(id)) engine=innodb;
Query OK, 0 rows affected (0.20 sec)
2, 在salve上insert 3条记录
点击(此处)折叠或打开
mysql> insert into tmp_test_0208 values(1,'a'),(2,'b'),(3,'c');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from tmp_test_0208;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
+----+------+
3 rows in set (0.00 sec)
3, 在master上insert 3条记录
点击(此处)折叠或打开
mysql> insert into tmp_test_0208(name) values('a'),('b'),('c');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from tmp_test_0208;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
+----+------+
3 rows in set (0.00 sec)
4, slave 的sql thread 中止
点击(此处)折叠或打开
/usr/local/mysql/bin/mysql -uroot -pxxx c2cdb -s -e"show slave status\G" |egrep "Slave_IO_Running|Sl
ave_SQL_Running"
Slave_IO_Running: Yes
Slave_SQL_Running: No
5, skip next statemate后start slave正常
点击(此处)折叠或打开
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 ;
Query OK, 0 rows affected (0.00 sec)
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
/usr/local/mysql/bin/mysql -uroot -pxxx c2cdb -s -e"show slave status\G" |egrep "Slave_IO_Running|Sl
ave_SQL_Running"
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
slave端errlog如下:
130416 13:20:57 [ERROR] Slave SQL: Error 'Duplicate entry '1' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'insert into tmp_test_0208(name) values('a'),('b'),('c')', Error_code: 1062
130416 13:20:57 [Warning] Slave: Duplicate entry '1' for key 'PRIMARY' Error_code: 1062
130416 13:20:57 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.004707' position 39082343
master binlog中相应的记录如下:
SET INSERT_ID=1/*!*/;
# at 39082439
#130416 13:16:07 server id 1 end_log_pos 39082557 Query thread_id=12589 exec_time=0 error_code=0
SET TIMESTAMP=1366089367/*!*/;
insert into tmp_test_0208(name) values('a'),('b'),('c')
/*!*/;
# at 39082557
#130416 13:16:07 server id 1 end_log_pos 39082584 Xid = 409512836
COMMIT/*!*/;
总结:使用SET GLOBAL SQL_SLAVE_SKIP_COUNTER 命令跳过失败的SQL
mysql slave duplicate entry_slave 报Duplicate entry for key相关推荐
- Mysql报错:Specified key was too long; max key length is 767 bytes
在执行mysql脚本时,报错:Specified key was too long; max key length is 767 bytes. 解决办法: 一.修改mysql的字符集为uft8 再次执 ...
- mysql 出现错误 Duplicate entry for key PRIMARY 解决办法
原来是没有主键的,想增加一列为主键. mysql> desc t111; +-------+-------------+------+-----+---------+-------+ | Fie ...
- MySql插入数据时错误Duplicate entry '131' for key 'PRIMARY'
今天在进行开发的过程中,遇到MySQL数据库插入数据时抛出异常: Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViol ...
- Duplicate entry for key 'PRIMARY'
错误场景: 更新同事代码之后启动报错,代码中的bug 具体的堆栈信息: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolatio ...
- Duplicate entry...for key...
Duplicate entry...for key...的错误原因是主键的唯一值重复,在对数据库进行修改.插入操作时,一但主键的唯一值重复就会报此错误,有时在表中存在多个主键时,对表操作仍然报此错误, ...
- Duplicate entry ‘***‘ for key ‘UK_mjrobjw9m8n29ou6083ixjxmf‘
后台运行报错Duplicate entry '***' for key 'UK_mjrobjw9m8n29ou6083ixjxmf' 检查sql语句,看数据库里面唯一的字段,你在添加或者修改的时候重复
- Hibernate: Duplicate entry for key错误排查
背景: 公司业务需求: 1.合并两个用户,包括资产账户信息. 2.其中用户的积分账户有身份证号码(idNum)与真实姓名(realName)信息,且为联合唯一索引. 3.为了描述方便,假设两个用户A与 ...
- Duplicate entry '??…???' for key 'cname' Query:
今天开发过程中,进行数据修改Update 时遇到了个问题Duplicate entry '??-???' for key 'cname' Query: 这报错是 代表数据表中 字段xxx中 已经的这个 ...
- MySQL5.7创建唯一索引时报错提示Duplicate entry * for key *
一.报错原因 因表中创建唯一索引的列有重复数据,导致创建唯一索引时报错提示Duplicate entry * for key * 二.报错演示 例如lz用户表中用户名.邮箱和创建时间三列属性中存在相同 ...
最新文章
- 科学家都解决不了的5个“简单”算法,你不来看看?
- 转换营销阵地 特步的世界杯身影
- 安装suricata
- codeforces364D
- keras 多维时间序列预测
- JCG新年献礼,JHR-N825R给力上市
- 外键约束 mysql
- Batch Normailzation
- 蓝桥杯2019年第十届C/C++省赛C组第一题-求和
- 常见排序算法之插入排序
- DPCM差分预测编码
- 大数据分析技术与应用 1
- STM32-M3(野火)SD卡读写/移植znFAT文件访问系统
- linux如何打印脚本运行进度,linux-如何在使用systemd引导期间最后运行并打印我的脚本输出?...
- 拖拽牛逼,轻松实现一个自由拖拽的组件
- (一)安全测试基础:安全测试的内容
- Mac idea打开项目Java文件和resources文件都被标记了resources类型
- 最新xampp安装教程与配置
- 西安电子科技大学计算机834,西安电子科技大学834数据结构2021年硕士研究生招生考试自命题科目考试大纲...
- 将Google Analytics for Firebase数据导入BigQuery