周末的时候,突然收到报警的短信,是一台slave服务器sql_thread不为YES,唉,还能不能愉快的过周末啊。上服务器一看是,是主键冲突导致从库中断,也是Last_SQL_Errno: 1062错误,我们常用的方法是跳过错误,比如SET GLOBAL SQL_SLAVE_SKIP_COUNTER =1或者直接slave-skip-errors=1062,这样确实解决了问题,恢复了复制。但是久而久之主从数据相差就很大了。对于复制正常以后,我们还需要使用数据效验,用校验数据的完整性,以及pt-table-sync同步数据。

以下是报错时的截图:

错误分析:当发生这样的错误时,可以在master库上的xxxx库下对应的表,用desc查看一个表结构,找出主键对应的列名,然后把对应的记录找出来

master的记录是:

mysql> select * from xxxx.xxxx where id=120383;+--------+----------+----------+------------+-------------+----------+------------+---------------------+------+------+------+------+------+------+

| id | log_type | log_user | log_server | log_channel | log_data | log_result | log_time | f1 | f2 | f3 | f4 | f5 | f6 |

+--------+----------+----------+------------+-------------+----------+------------+---------------------+------+------+------+------+------+------+

| 120383 | 8 | 0 | 411 | 2 | 0 | 0 | 2015-01-10 03:34:00 | | | | | | |

+--------+----------+----------+------------+-------------+----------+------------+---------------------+------+------+------+------+------+------+

1 row in set (0.00sec)

mysql>

slave库上的记录是:

mysql> select * from xxxx.xxxx where id=120383;+--------+----------+----------+------------+-------------+----------+------------+---------------------+------+------+------+------+------+------+

| id | log_type | log_user | log_server | log_channel | log_data | log_result | log_time | f1 | f2 | f3 | f4 | f5 | f6 |

+--------+----------+----------+------------+-------------+----------+------------+---------------------+------+------+------+------+------+------+

| 120383 | 8 | 0 | 411 | 2 | 0 | 1 | 2015-01-10 03:34:00 | | | | | | |

+--------+----------+----------+------------+-------------+----------+------------+---------------------+------+------+------+------+------+------+

1 row in set (0.00sec)

mysql>

可以看到slave的记录与主库不一样,当然以主库的记录为准啦,所以要在slave库上把主键冲突的记录删除掉,如果一两条,手动删除倒没什么问题,但比较多的时候,手动删除的效率是灰常慢的,下面写了个小脚本:

#!/bin/bash

#Delete duplicate records primary key conflict

#Write by xuanzhi2015-01-12mysql=/usr/local/mysql-5.1.66-3310/bin/mysql

sock=/data/mysql-slave-3310/mysql.sockpasswd=123456

while true

doSQL_THREAD=`$mysql -uroot -p$passwd -S $sock -e 'show slave status\G' | egrep 'Slave_SQL_Running' | awk '{print $2}'`

LAST_ERROR=`$mysql -uroot -p$passwd -S $sock -e 'show slave status\G' | egrep Last_Errno | awk '{print $2}'`

duplicate=`$mysql -uroot -p$passwd -S $sock -e 'show slave status\G' | grep Last_Error | awk '/Duplicate entry/{print $5}' | awk -F "'" '{print $2}'`

DATABASE=`$mysql -uroot -p$passwd -S $sock -e 'show slave status\G' | grep Last_Error | awk '{print $13}' | awk -F "'" '{print $2}'`

TABLE=`$mysql -uroot -p$passwd -S $sock -e 'show slave status\G' | grep Last_Error | awk -F ":" '{print $4}' | awk -F "(" '{print $1}' | awk '{print $NF}'`

$mysql-uroot -p$passwd -S $sock -e 'show slave status\G' | grepHA_ERR_FOUND_DUPP_KEYif [ $? -eq 1]then

if [ "$SQL_THREAD" == No ] && [ "$LAST_ERROR" == 1062]thenFILED=`$mysql -uroot -p$passwd -S $sock -Nse "desc $DATABASE.$TABLE" | grep PRI | awk '{print $1}'`

$mysql-uroot -p$passwd -S $sock -e "delete from $DATABASE.$TABLE where $FILED=$duplicate"$mysql-uroot -p$passwd -S $sock -e "start slave sql_thread"

else

echo "====================== ok ========================"$mysql-uroot -p$passwd -S $sock -e 'show slave status\G' | egrep 'Slave_.*_Running'

echo "====================== ok ========================"breakfi

fi

done

如果slave是完全跟上master了,运行该脚本,会循环删除,但如果从库还没跟上主库,当slave读取中继日志,还有主键冲突,又会出现主从中断的,这时可能要结合任务计划crontal来执行删除操作了(该脚本还有可以优化和完善的地方,如果有更好的想法,请分享下)。

参考资料:http://www.cnblogs.com/gomysql/p/3734087.html

作者:陆炫志

您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。

mysql主从复制1062_主从复制1062错误的解决方法相关推荐

  1. windows下本地或者远程连接MYSQL数据库,报1130错误的解决方法

    windows下本地或者远程连接MYSQL数据库,报1130错误的解决方法 参考文章: (1)windows下本地或者远程连接MYSQL数据库,报1130错误的解决方法 (2)https://www. ...

  2. 连接MYSQL数据库,报1130错误的解决方法

    连接MYSQL数据库,报1130错误的解决方法 参考文章: (1)连接MYSQL数据库,报1130错误的解决方法 (2)https://www.cnblogs.com/y792552640/p/102 ...

  3. mysql 1058_MySQL数据库之mysql启动服务报1058错误的解决方法

    本文主要向大家介绍了MySQL数据库之mysql启动服务报1058错误的解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 今天研究一个框架,数据库使用mysql,启动my ...

  4. mysql 1058_MySQL数据库之mysql启动服务报1058错误的解决方法

    本文主要向大家介绍了MySQL数据库之mysql启动服务报1058错误的解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 今天研究一个框架,数据库使用mysql,启动my ...

  5. mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)

    从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...

  6. mysql连接数据库出现1251错误_连接MySQL数据库时出现#1251错误的解决方法

    连接MySQL数据库时出现#1251错误的解决方法 连接MySQL数据库时常会出现如下的错误提示: #1251 - Client does not support authentication pro ...

  7. mysql 2003错误 10055,MYSQL无法连接提示10055错误的解决方法

    解决方法:(以下内容为本人亲自实践原创) 总结一下,应该是连接数的问题,那么服务器上有些什么连接数: 1.IIS网站服务器中各个网站中有"连接超时时间","会话超时时间& ...

  8. 主从复制1062错误的解决方法

    周末的时候,突然收到报警的短信,是一台slave服务器sql_thread不为YES,唉,还能不能愉快的过周末啊.上服务器一看是,是主键冲突导致从库中断,也是Last_SQL_Errno: 1062错 ...

  9. mysql 403_mysql数据库管理phpmyadmin 403错误的解决方法

    在使用php的过程中,出现了phpmyadmin 403错误:phpmyadmin 403 You don't have permission to access /phpmyadmin/ on th ...

最新文章

  1. vue2.0transition过渡的使用介绍
  2. SpringMVC+redis整合
  3. DL之Panoptic Segmentation:Panoptic Segmentation(全景分割)的简介(论文介绍)、全景分割挑战简介、案例应用等配图集合之详细攻略
  4. 20-umask命令
  5. kibana 查看索引库中文档个数_百度索引量是什么意思?和百度收录量的区别。...
  6. apache的源代码编译安装
  7. 如何维护应用程序状态
  8. 深入浅出Flume之原理解析
  9. RabbitMQ 安装和监控[原,转]
  10. ReactiveCocoa之UI篇
  11. iOS经典讲解之Socket使用教程
  12. pycharm怎么修改html的字体大小,怎么改pycharm的字体大小
  13. python二维码_Python 二维码制作
  14. matlab求两向量夹角_【求精干货】高中数学知识点总结归纳高一学生必须掌握
  15. 奥鹏福师计算机应用基础在线作业答案,福师11秋《计算机应用基础》在线作业一、二...
  16. 大数据与JS实现2014巴西世界杯冠军预测图
  17. 单向链表—在单向链表的尾部插入一个元素
  18. 基于STM32的心率血氧检测仪
  19. 黑暗之光第2章:角色创建(魔法师和剑士)
  20. 想骂人!开发语言不能统一成一个么?

热门文章

  1. NKOJ——P1385——笨笨种西瓜
  2. 整数的mod,%运算,运算的区别和联系
  3. “深绿” 及 AlphaGo 对QQ分分彩源码出租指挥与控制智能化的启示
  4. 多模态多目标优化文献分享
  5. 【Rest API】Advanced REST Client浏览器插件rest api请求工具安装教程及使用说明
  6. win7系统开机后电脑桌面背景变黑的解决方法
  7. 解决Docker安装过程中yum源错误的“UnicodeEncodeError: ‘ascii‘ codec can‘t encode charact u‘\ufffd‘ in position“问题
  8. 远程抄表将取代人工抄表
  9. VS CODE MarkDown预览字体修改
  10. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------04