首页 > 数据库 >pt-slave-repair - 自动修复MySQL主从同步数据

pt-slave-repair - 自动修复MySQL主从同步数据

时间:2023-10-12 14:22:06浏览次数:38  
标签:repair 同步 slave 修复 pt 主从

pt-slave-repair介绍

MySQL主从复制作为一种常见的数据同步方式,有时候会出现同步错误导致同步中断的情况。手动修复这些同步错误通常需要耗费时间和精力,并且对于不熟悉MySQL复制的人来说比较困难。

pt-slave-repair是对原有pt-slave-restart工具的补充,它提供自动修复MySQL主从同步复制的报错数据,以及恢复中断的sql thread复制线程。

image

 


自动修复主从同步数据工具具有以下几个优势:

1)提高效率:自动修复工具能够快速检测和修复主从同步错误,无需手动干预。这大大节省了DBA的时间和精力,使他们能够更专注于其他重要的任务。

2)减少人为错误:手动修复同步错误可能存在人为错误的风险,例如配置错误或操作失误。自动修复工具可以提供一致性和准确性的修复策略,减少了人为错误的可能性。

3)实时监控和响应:具有实时监控功能,可以及时检测同步错误的发生,并立即采取相应的修复措施。这有助于及时恢复同步并减少数据延迟。

4)自动化运维:可以定期检查主从同步状态并执行修复操作,无需人工干预。这减少了对人工操作和监控的依赖,提高了系统的可靠性和稳定性。

5)快速故障恢复:当主从同步错误发生时,自动修复工具能够迅速识别和修复问题,从而减少数据丢失和业务中断的时间。这有助于提高系统的可用性和数据的一致性。

总的来说,自动修复主从同步数据工具能够提高效率、降低风险、实时监控和响应、自动化运维以及快速故障恢复,可以极大地提升同步运行的稳定性和可靠性。

原理

1) 当检测到同步报错1062(主键冲突、重复)和1032(数据丢失)时,首先要进行binlog环境检查,如果binlog_format不等于ROW并且binlog_row_image不等于FULL,则退出主程序。
    如果错误号非1062或1032,则直接退出主程序。

2) 获取show slave status信息,得到binlog、position、gtid信息

3) 连接到主库上解析binlog,如果是DELETE删除语句,则直接跳过

4)  关闭slave_parallel_workers多线程并行复制

5)  如果开启GITD复制模式,启用SET gtid_next方式;如果开启位置点复制模式,启动SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1方式)

6) 如果是UPDATE/INSERT语句,则把BINLOG解析为具体的SQL,并且反转SQL,将其转换为REPLACE INTO

7) 将解析后的REPLACE INTO语句反向插入slave上,使其数据保持一致,然后执行第5步操作;

8) 将slave设置为read_only只读模式

9) 依次类推,最终使其show slave status同步为双YES(同步正常)。

image

使用

shell> chmod 755 pt-slave-repair


连接到同步报错的slave从库上执行(请用MySQL复制的账号,例如repl,并赋予工具运行的权限)

一、前台运行

shell> ./pt-slave-repair -H 192.168.198.239 -P 3346 -u repl -p hechunyang -d test

注:你可以按<ctrl+c>或者<ctrl+z>退出程序。

二、后台运行

shell> nohup ./pt-slave-repair -H 192.168.198.239 -P 3346 -u repl -p hechunyang -d test > /dev/null &

注:你可以

shell> pkill pt-slave-repair

退出后台进程。

-e, --enable-binlog Enable binary logging of the restore data

1) -e 选项,默认修复完的数据不会记录在binlog文件里,如果你的slave是二级从库(后面还接着一个slave),那么开启这个选项。

2) 开启后台守护进程后,会自动在当前目录下创建一个log目录和{db_name}_INFO.log文件,该文件保存着日志信息。

image

MySQL 用户的最小化权限:

mysql> show grants for repl@'%';
+------------------------------------------------------------------------+
| Grants for hcy@%                                                       |
+------------------------------------------------------------------------+
| GRANT SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `repl`@`%`|
| GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO `repl`@`%`         |
| GRANT SELECT ON `performance_schema`.* TO `repl`@`%`                   |
+------------------------------------------------------------------------+
3 rows in set (0.00 sec)


注:支持 MySQL5.7/8.0 和 MariaDB 数据库,工具适用于Centos7 系统。

8.0默认是caching_sha2_password用户认证,需要更改为 mysql_native_password

测试:

1) 先把主从复制环境配置好,然后在主库上插入3条数据,此时从库已经同步完该3条数据,然后在从库truncate掉该表,再到主库上update全表更新,这样就模拟出了1032错误。

2) 运行pt-slave-repair工具修复。

 

标签:repair,同步,slave,修复,pt,主从
From: https://www.cnblogs.com/hcymysql/p/17759373.html

相关文章

  • typescript: Mediator pattern
     /****Mediatorpattern中介者是一种行为设计模式,让程序组件通过特殊的中介者对象进行间接沟通,达到减少组件之间依赖关系的目的。*file:Mediatorts.ts*TheMediatorinterfacedeclaresamethodusedbycomponentstonotifythe*mediatoraboutvarious......
  • GPT-4 即将超越拐点;5.5G 手机或明年上半年商用;AI 音乐或将成行业标配丨 RTE 开发者日
    开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE (RealTimeEngagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大......
  • 报错解决:java.security.InvalidKeyException: Illegal key size(微信支付v3遇到的问
    前言在使用微信支付v3生成jar包后本地测试没有问题在开发小程序支付功能的时候:本地开发好好的,放在linux服务器上运行时碰到报错原因是因为微信支付256位秘钥加密解密策略 可能会导致某些jdk的版本加密解密出现问题解决首先观察你这个目录下的文件根据文件内容做判断看下......
  • Kafka服务报UnknownHostException解决办法
    问题描述启动需要连接kafka服务的项目,报如下错误09:57:01.336[http-nio-8085-exec-3]WARNorg.apache.kafka.clients.NetworkClient-[ConsumerclientId=consumer-group-1,groupId=XX-group]ErrorconnectingtonodeMY_HOST_NAME:9092(id:0rack:null)java.net.Unk......
  • Running Large Language Models locally – Your own ChatGPT-like AI in C#
    Forthepastfewmonths,alotofnewsintechaswellasmainstreammediahasbeenaround ChatGPT,anArtificialIntelligence(AI)productbythefolksat OpenAI.ChatGPTisaLargeLanguageModel(LLM)thatisfine-tunedforconversation.Whileunderval......
  • 87基于java的流浪动物领养系统设计与实现(配套lun文,PPT,可参考做毕业设计)
    本章节给大家带来一个基于java流浪动物领养系统设计与实现,可适用于流浪动物救助及领养管理系统,宠物教学、领养宠物、宠物认领、领养申请、动物认领信息,动物申请认领等等;项目背景科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景......
  • 在JavaScript中,最高效的方法来深度克隆一个对象是什么?
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中,最高效的方法来深度克隆一个对象是什么?将JavaScript对象进行深度克隆的最有效方法是什么?我见过使用obj=eval(uneval(o));,但这是非标准的做法,仅被Firefox支持。我曾尝试过obj=JSON.parse(JSON.stringify(o));,但对效率......
  • java.lang.ClassNotFoundException org.apache.ibatis.io.Resources问题的解决
    问题描述时隔好久,再次使用mybatis框架写管理系统,运行时出现了这个问题;问题解决我看着我也导入了相关的依赖,然后就发现,原来是没有放入到libaray里面,只需要这么做就能搞定啦:打开项目里面的这里:将右边的需要的包双击即可加入进去啦!再次运行就不会报错啦~~......
  • JavaScript Library – YouTube Embedded、YouTube Player API、YouTube Data API
    YouTube EmbedVideo参考: Embedvideos&playlists它和 GoogleMapsEmbed 类似,是通过iframe完成的。<iframewidth="800"style="aspect-ratio:16/9"src="https://www.youtube.com/embed/vEZCoe9GJFk"title="粉色海洋"......
  • (关于创建时用com/example和com.example导致的mapper包对应不上)org.apache.ibatis.bi
    日志输出:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessingfailed;nestedexceptionisorg.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.example.mapper.EmpMapper.li......