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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springCloud学习笔记-no.2-eruka server和client

    springCloud学习笔记-no.2-eruka server和client1.转载于:https://www.cnblogs.com/andydlz/p/10283293.html

    2022年8月21日
    8
  • Linux7/Centos7磁盘分区、格式化及LVM管理

    Linux7/Centos7磁盘分区、格式化及LVM管理RHEL7如何对磁盘进行分区和格式化以及如何配置LVM,与以前版本的RHEL区别不大,可以通过disk工具(在图形桌面中运行)或命令工具(如:fdisk、gdisk、parted)管理硬盘设备。fdisk可以配置MBR格式;gdisk配置gpt格式,parted可以自己选择。传统的硬盘分区都是MBR格式,MBR分区位于0扇区,他一共512字节,前446字节是grub引导程序,这个会在后面学习;…

    2022年5月27日
    39
  • 无需请求号直接修改QAS/PRD程序【…

    无需请求号直接修改QAS/PRD程序【…为了偷懒,不再来回申请cr,有些测试程序可以这么干,直接在测试环境修改代码,但是正式的项目程序,严谨修改,不然……经理会很生气,后果…很严重……代码很简单:REPORTZLM_MOD.”变量定义data:beginofitaboccurs0,    line(200)TYPEc,    “如果代码中某行大于了200个字符,请重新设定值,   

    2022年6月28日
    23
  • mt4下载正版官网下载(如何分辨真假MT4软件)

    mt4下载正版官网下载(如何分辨真假MT4软件)在全球零售外汇行业,外汇经纪商使用最多的还是俄罗斯迈达克公司的MT4交易平台,一些不合规的外汇经纪商也对MT4十分热衷,这使市场上几千块一个的盗版MT4日益猖獗,致使一部分交易者因此遭受一些不必要的利益侵害。那么MT4。fOrex6。cc的特点是什么?如何判别一个MT4软件是否是盗版?今天就带你们辨别真假MT4.MT4的优势1.强大的工作表现MT4强大的工作表现,这一点是毋庸置疑的。MT4自2005年7月1日推出以来,就不断的获得市场的认可。下单灵活、界面友好、交易直观等这些都是MT4平台成为外汇市场

    2022年8月15日
    5
  • Maximal Information Coefficient (MIC)最大互信息系数详解与实现「建议收藏」

    Maximal Information Coefficient (MIC)最大互信息系数详解与实现「建议收藏」MICMIC即:MaximalInformationCoefficient最大互信息系数。使用MIC来衡量两个基因之间的关联程度,线性或非线性关系,相较于MutualInformation(MI)互信息而言有更高的准确度。MIC是一种优秀的数据关联性的计算方式。本篇文章将会详细介绍MIC的算法原理,优缺点以及Python的具体实现方式,并给出一个可视化方案。互信息?互信息(Mut…

    2022年9月18日
    4
  • vs2012ultimate密钥_visual studio 2012产品密钥

    vs2012ultimate密钥_visual studio 2012产品密钥VisualStudioExpress2012forWindowsDesktopKEY:MMVJ9-FKY74-W449Y-RB79G-8GJGJMicrosoftVisualStudioExpress2012forWebKEY:VX3VY-8GCVT-KJQCY-RQ99X-MCF2RVisualStudioExpress

    2022年10月14日
    2

发表回复

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

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