码迷,mamicode.com
首页 > 其他好文 > 详细

主从同步常见故障

时间:2015-05-08 18:27:06      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:mysql

公司使用腾讯云数据库,今天在从库上面查询相关数据时候,显示没有任何记录,登录后

show slave status\G 查看到状态中报1032错误,这里把相关主从同步故障总结一下。

1、在master上删除一条记录,在slave上找不到。

  Last_SQL_Error.Could not execute Delete_rows event on table ….Error_code:1032…

2、主键冲突,在slave已经有该记录, 又在master上插入了同一条记录

  Last_SQL_Error.Could not execute Write_rows event on table…… Error_Code :1062……

3、在master上更新一条记录,在slave上找不到数据

  Last_SQL_Error.Could not execute Update_rows event …… Error_Code: 1032……

以上三种情况在HA切换过程中,由于异步复制且sync_binlog=0 时,会造成小部分binlog 没接受完而导致报错。

4、slave中继日志损坏

  Last_SQL_Error:Error initializing relay log postion: I/O error reading the headerfrom the binary log

  Last_SQL_Error:Error initializing relay log positon:Binlog has bad magic number:it’s not a binary log file that can be used by this version of MySQL.

Slave 宕机或非法关机,电源故障、硬件故障,造成中继日志损坏。


解决方法:

  对于第一种情况: master要删除一条记录,而slave上找不到相应记录而报错。Master上已经删除,slave 并没有改记录,可以直接跳过:

 mysql> Stop slave ; 

    mysql> set global sql_slave_skip_counter=1;

    mysql>  start slave;

  对于第二种情况的处理:对于重复的记录,需要删除重复的键值。

  第三种情况: master更新的记录,在slave上找不到。通过 Mysqlbinlog 分析出真实的语句,将slave缺少的记录进行手动填充。

  第四种:找到salve 同步执行到master的位置,重新做同步。

  查找变量:

  Relay_Master_Log_File:

  Exec_Master_Log_Pos:

  从这两个位置重新同步。

  如果业务允许的话,可以设置下面两个变量:

  slave-skip-errors=1022,1032,1062 (必须在 f中进行设置,只读的系统变量)

  (1022 :Message: Can‘t write; duplicate key in table ‘%s‘)

  (1032: Message: Can‘t find record in ‘%s‘)

  (1062: Message: Duplicate entry ‘%s‘ for key %d)

  slave_exec_mode (可在全部变量中进行设置)

  可选项为STRICT(默认)和IDEMPOTENT 模式, STRICT遇到任何问题,都会导致复制的停止。

  IDEMPOTENT 对于 duplicate key 和 no-key-found错误跳过。

注:以上两个参数的设置,如果出现跳过的情况,则会在错误日志中进行记录。

可以参考:http://alwaysyunwei.blog.51cto.com/3224143/1272027 

本文出自 “从心开始” 博客,请务必保留此出处http://hao360.blog.51cto.com/5820068/1649641

主从同步常见故障

标签:mysql

原文地址:http://hao360.blog.51cto.com/5820068/1649641

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!