mysql 错误1062_mysql主从切换步骤

mysql 错误1062_mysql主从切换步骤周末的时候,突然收到报警的短信,是一台slave服务器sql_thread不为YES,唉,还能不能愉快的过周末啊。上服务器一看是,是主键冲突导致从库中断,也是Last_SQL_Errno:1062错误,我们常用的方法是跳过错误,比如SETGLOBALSQL_SLAVE_SKIP_COUNTER=1或者直接slave-skip-errors=1062,这样确实解决了问题,恢复了复制。但是久而…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

以下是报错时的截图:

b6acfbb1abccc7f752133ad20a98c191.png

错误分析:当发生这样的错误时,可以在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

作者:陆炫志

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179231.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python自动化办公——python操作Excel、Word、PDF集合大全[通俗易懂]

    python自动化办公——python操作Excel、Word、PDF集合大全[通俗易懂]Python操作Word、Excel、PPT、PDF\、复杂文件、通信软件(微信、邮件、飞书、钉钉)、图片目录  章节一:python使用openpyxl操作excel    1、openpyxl库介绍    2、python怎么打开及读取表格内容?       1)Excel表格述语       2)打开Excel表格并获取表格名称       3)通过sheet名称获取表格       4)获取表格的尺寸大小       5)获取表格…….

    2022年10月12日
    0
  • struts2.0的工作原理「建议收藏」

    struts2.0的工作原理「建议收藏」客户端发出一个请求,服务器端StrutsPreparedAndExceuteFilter接收请求,如果该请求是一个以.action结尾请求,则Struts2将请求转发至相应的Action,进行数

    2022年7月2日
    20
  • OpenCV——Canny边缘检测(cv2.Canny())

    OpenCV——Canny边缘检测(cv2.Canny())Canny边缘检测Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986年,JohnF.Canny发表了著名的论文AComputationalApproachtoEdgeDetection,在该论文中详述了如何进行边缘检测。Canny()边缘检测步骤Canny边缘检测分为如下几个步骤:步骤1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。步骤2:计算梯度的幅度与方向。步骤3:非极大值抑制,即适当地让边缘“变瘦”。步骤4:确定边缘。使

    2022年5月25日
    41
  • 码蹄集新手村100题答案「建议收藏」

    码蹄集新手村100题答案「建议收藏」码蹄集是今年新上线的一个OJ平台,内含了100道基础题和一些百度之星的题目。由于很多题目有原创性,搜不到相关解答,因此我花了两天特将100道题目刷了一遍,目前位居榜二。码蹄集传送门:https://www.matiji.net/exam/ojquestionlist前言所有题目均能AC,不一定是最佳方法,如有其它方法,可在评论区留言讨论。1、程序设计入门#include<iostream>usingnamespacestd;intmain(){co.

    2022年10月8日
    0
  • java视频教程免费下载

    java视频教程免费下载Java视频教程孙鑫Java无难事(全12CD)Java视频教程即学即会java上海交大Java初级编程基础共25讲下载avi格式吉林大学Java程序设计视频教程48讲+2讲辅导csf格式尚学堂Java视频教程J2SE5.0马士兵主讲高清avi格式张孝祥Java课堂系列之Tomcat入门(七讲swf)张孝祥Java课堂系列

    2022年5月13日
    31
  • CSS 图片去色处理

    CSS 图片去色处理说到对图片进行处理,我们经常会想到PhotoShop这类的图像处理工具。作为前端开发者,我们经常会需要处理一些特效,例如根据不同的状态,让图标显示不同的颜色。或者是hover的时候,对图片的对比度,阴影进行处理。//黑白色img{transition:all.3sease;filter:grayscale(100%);opacity:.6;}//正常颜色img:hover{filter:none;opacity:1;

    2022年10月6日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号