Rav*_*avi 4 mysql replication mysql-5.5
160523 13:07:29 [ERROR] Slave SQL: Error 'Duplicate entry '914166' for key
'PRIMARY'' on query. Default database: 'zo_dev_20121216'. Query: 'UPDATE
activity
SET
activity_type_id = 9,
subject = 'Send departure email',
date_due = '2016-05-26 01:00',
date_start = '2016-05-23 01:00',
activity_status_id = 1,
content = 'Send departure email'
WHERE
id = 2888555', Error_code: 1062
160523 13:07:29 [Warning] Slave: Duplicate entry '914166' for key 'PRIMARY'
Error_code: 1062
160523 13:07:29 [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.000004' position 14847360
Run Code Online (Sandbox Code Playgroud)
许多人建议使用 slave-skip-error 选项等。但这将完全避免查询。您实际上如何继续引发错误的查询?另外,我找不到一个好的答案来说明为什么会发生这种情况以及数字“914166”表示什么?有人可以解释一下吗?
数字 914166 表示什么?
该数字表示您尝试插入数据的表行。例如,您正在尝试向第 914166 行插入一些值。
为什么会出现这个错误?
由于重复值而发生此错误。您正在尝试将914166
表activity
作为主键插入/更新,但该表活动中已存在值 914166。
您实际上如何继续引发错误的查询?
您不能继续该查询,因为主键列是唯一列,它不接受重复值。您可以使用以下语句跳过此查询并继续下一个查询:
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
Run Code Online (Sandbox Code Playgroud)
请注意,跳过错误不是一个好的选择,您应该尝试修复问题并按照 MySQL 的建议启动从站。
解决:
提到的查询是完整的语句吗?
似乎给定的查询不是插入查询,而是更新语句,它没有更新活动表的主键。
检查主服务器,提到的主键(id)列是否属于activity
表,并检查该(id=914166)
列中是否存在该值。
select * from zo_dev_20121216.activity where id = 914166;
Run Code Online (Sandbox Code Playgroud)
如果该活动表中存在该值,则在从服务器中检查该特定值(id=914166)
是否存在,如果该值存在于从服务器中,则可以简单地跳过查询。
select * from zo_dev_20121216.activity where id = 914166;
Run Code Online (Sandbox Code Playgroud)
如果以上 2 个查询的结果集为空,则可以确定,查询不完整,或者您正在调试错误的查询。
关键是,查询试图将一个值插入/更新到该表中已经存在的活动表中。
我希望它可以帮助您作为调试错误的起点。
归档时间: |
|
查看次数: |
23841 次 |
最近记录: |