MySQL回滚工具:binlog 闪回工具 MyFlash工具

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL回滚工具:binlog 闪回工具 MyFlash工具
  • 优点:
  • 快 // 比binlog2sql快
  • 原生binlog格式
  • 安装简单
  • 功能强大
  • 不需要账号密码连接
  • 缺点:
  • 必须为行模式 rows

安装依赖

yum install glib2-devel  gcc   -y

下载包

# 可能无法访问推荐迅雷下载即可
wget  https://github.com/Meituan-Dianping/MyFlash/archive/refs/heads/master.zip

解压

unzip master.zip

进入目录

cd MyFlash-master

安装

## 动态编译 (推荐)
gcc -w  `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c  -o binary/flashback
## 静态编译
gcc -w -g `pkg-config --cflags  glib-2.0` source/binlogParseGlib.c   -o binary/flashback /usr/lib64/libglib-2.0.a -lrt

查看用法

cd binary/
 ./flashback --help
Usage:
  flashback [OPTION?]
Help Options:
  -h, --help                  Show help options
Application Options:
  --databaseNames            #库名
  --tableNames               #表名
  --tableNames-file          #表名文件路径
  --start-position           #起始位置
  --stop-position            #停止位置
  --start-datetime           #开始时间  格式(format %Y-%m-%d %H:%M:%S)
  --stop-datetime            #停止时间  格式(format %Y-%m-%d %H:%M:%S)
  --sqlTypes                 #要筛选的sql类型。支持INSERT, UPDATE ,DELETE.。
  --maxSplitSize             #拆分后的最大文件大小,单位为 M # 文件拆分
  --binlogFileNames          #要处理的binlog文件。
  --outBinlogFileNameBase    #输出binlog文件名
  --logLevel                 #日志级别,可用选项为 debug,warning,error
  --include-gtids            #要处理的GTID。
  --include-gtids-file       #要处理的GTID。
  --exclude-gtids            #要跳过的GTID。
  --exclude-gtids-file       #要跳过的GTID。

实战用法

# 一般生产是指定起始position进行单表回滚的可自行添加使用
cd binary/
./flashback  \
--logLevel=error \
--databaseNames=test  \
--tableNames=t1   \
--sqlTypes=update  \
--binlogFileNames=/mydata/3306/binlog/mysql-bin.000002,/mydata/3306/binlog/mysql-bin.000003 \
--outBinlogFileNameBase=/tmp/roll_update_1

导入到数据库

# 将二进制文件转化为mysql可识别的格式 并跳过gtid
mysqlbinlog --skip-gtids  roll_update_1.flashback  >roll_update_1.flashback_bak
# 登录mysql
mysql -S /root/mysql-sandboxes/3306/sandboxdata/mysqld.sock  -p 
# 进库
use test
# 导入到数据库
mysql> source /tmp/roll_update_1.flashback_bak
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

检查数据是否恢复

问题

回滚时状态条数会显示为0 但其实执行成功了
建议单个文件去回滚,从后往前回滚,先回滚数字大的binlog文件,最好按回滚顺序标记好 1、2、3这样好回滚
在source时加begin是无法回滚source的SQL的
# 解决
    如果想使用begin; commit; or rollback;的话
    要在恢复文件中开头写上begin; 并删除文本中所有的commit语句
    在导入完成后,检查数据是否正确,正确则在命令行commit;错误则rollback;
    建议不要在导入大文件时使用这种方法
# 建议没有从库的情况下导入时不写入binlog 
    没有从库的情况下哈
    set sql_log_bin=0;
    set sql_log_bin=1;

分享是一种精神

好用点个赞谢谢

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志和二进制日志是确保数据库稳定性和可靠性的关键组件。重做日志主要用于事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务;而二进制日志记录SQL语句的逻辑变化,支持数据复制、恢复和审计。两者在写入时机、存储方式及配置参数等方面存在显著差异。
|
6天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1月前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
93 11
|
1月前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
97 2
|
1月前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
2月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的binlog日志文件
MySQL的binlog日志记录了所有对数据库的更改操作(不包括SELECT和SHOW),主要用于主从复制和数据恢复。binlog有三种模式,可通过设置binlog_format参数选择。示例展示了如何启用binlog、设置格式、查看日志文件及记录的信息。
271 6
|
2月前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志(Redo Log)和二进制日志(Binary Log)是两种重要的日志系统。重做日志主要用于保证事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务更改。二进制日志则记录了数据库的所有逻辑变化操作,用于数据的复制、恢复和审计。两者在写入时机、存储方式、配置参数和使用范围上有所不同,共同确保了数据库的稳定性和可靠性。
|
4月前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
959 4
|
5月前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
690 2
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路