通过延时从库+binlog复制,恢复误操作数据

通过延迟复制与binlog恢复意外删除的数据

一、环境概述

以下是我们操作的数据库环境的详细信息:

数据库版本 实例角色 IP地址 端口
GreatSQL 8.0.32-26 主库 192.168.134.199 5725
GreatSQL 8.0.32-26 从库 192.168.134.199 5726

二、主库设置

在主库上,我们首先需要创建一个复制用户并授权:

shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5725.sock -p
greatsql> CREATE USER 'repl'@'%' IDENTIFIED BY '123';
greatsql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

三、配置延迟从库

接下来,我们配置从库以实现延迟复制:

greatsql> CHANGE MASTER TO
    MASTER_HOST='192.168.134.199',
    MASTER_PORT=5725,
    MASTER_USER='repl',
    MASTER_PASSWORD='123',
    MASTER_AUTO_POSITION=1,
    MASTER_DELAY=7200;
greatsql> START SLAVE;
greatsql> SHOW SLAVE STATUSG

file

四、模拟主库数据表误删除

我们模拟一个误删除操作,如下:

shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5725.sock -p sysbench
greatsql> DROP TABLE sbtest2;

五、从延迟从库恢复数据至主库故障前状态

  1. 备份从库:为防止恢复过程中出现意外,我们首先使用Xtrabackup备份从库:
$ xtrabackup --defaults-file=/data1/greatsql/greatsql5726/my5726.cnf -S /tmp/greatsql5726.sock --backup --slave-info 
    --stream=xbstream --target-dir=/backup/full.xb
  1. 定位误操作的binlog:我们需要找到主库误操作所在的binlog文件,并确认其位置信息:
$ /usr/local/greatsql/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -vvv ./* | grep -rli 'drop'
$ /usr/local/greatsql/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -vvv mysql-bin.000002 | less

file

  1. 停止sql_thread线程:设置复制不延时,并在误操作binlog位置点停止复制:
shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5726.sock -p
greatsql> STOP SLAVE;
greatsql> CHANGE MASTER TO MASTER_DELAY = 0;
greatsql> START SLAVE IO_THREAD;
greatsql> START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='2fc5a82c-2ac3-11ee-9f7f-00163e402951:187';
greatsql> SHOW SLAVE STATUSG
  1. 等待复制停止:等待复制到达指定的停止位置点,此时sql_thread线程已停止。

file

  1. 备份误操作的表:查看从库中误操作的表,并备份以便恢复到主库:
greatsql> SHOW TABLES FROM sysbench;
greatsql> SELECT COUNT(*) FROM sysbench.sbtest2;
shell> /usr/local/greatsql/bin/mysqldump -S /tmp/mysql5726.sock --set-gtid-purged=OFF --single-transaction --master-data=2 --max-allowed-packet=32M -q sysbench sbtest2 > sbtest2.sql
  1. 恢复备份数据至主库

```sql
shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5725.sock -p -A sysbench
greatsql> SET sql_log_bin = off;
greatsql> SOURCE sbtest2.sql

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4301.html

(0)
LomuLomu
上一篇 2024 年 12 月 24 日 下午2:42
下一篇 2024 年 12 月 24 日

相关推荐

  • 一文搞懂架构设计的衡量标准:功能性、可用性、性能、可扩展性、安全性、协作效率、复杂度、成本效益

    大家好,我是汤师爷~ 架构设计的首要目标是服务于业务需求。因此,我们不应该盲目追求所谓的”最厉害的”架构,而应该致力于寻找最适合当前业务环境和未来发展需求的架构方案。 衡量架构的合理性是一个复杂的过程,需要从多个角度进行全面评估。主要可以从以下视角进行分析: 功能需求视角:评估架构是否有效支撑当前业务需求,并具有充分的灵活性以适应未来业务发展。 非功能需求视…

    未分类 2025 年 1 月 16 日
    38400
  • Redis Java 集成到 Spring Boot

    Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Redis 📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。 Redis Java 集成到 Spring Boot 一、使用 Spring Boot 连接 Redis 单机 1.创…

    2025 年 1 月 1 日
    40500
  • 如何做好软件架构师

    本文以个人视野聊下软件架构师的工作以及软件架构设计知识。做开发工作接近10年了,期间主要做Windows应用开发。在成熟的“华南区最大WPF团队”希沃白板呆了较长一段时间、后面从0到1构建Windows技术栈以及会议屏软件集,在软件设计这块自己成长了很多。之前整理过如何做好技术经理 – 唐宋元明清2188 – 博客园,这里梳理下自己的设计思维,算是自己阶段性…

    未分类 2025 年 1 月 10 日
    38800
  • 扣子又出新功能,支持一键部署小程序,太强了!!

    大家好,我是R哥。 作为一名程序员和技术博主,我一直关注如何使用工具提升生产力,尤其是在内容创作和应用开发领域。 拿我开发一个微信小程序为例,我需要懂前端、后端、运维 等全栈技术,开发流程和技术栈复杂,我还需要购买云服务器、云数据库 等各种基础设施,资源耗费非常多。 虽然现在有如 Cursor 这样的革命性 AI 开发工具,它突破了传统开发模式的壁垒,非开发…

    2025 年 1 月 10 日
    36700
  • MySql 9 in Docker 主从切换

    继上一篇《MySql 9 in Docker 利用克隆插件搭建主从》我们说了主从复制后, 那么我们接下来说说如何手动的进行主从切换。 动手~ 1. 原主库设置 切断应用对主库的访问 主库设置为只读状态 set global read_only=ON;set global super_read_only=ON; 主库执行 SELECT @@gtid_execu…

    未分类 2024 年 12 月 24 日
    52000

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信