利用MyFlash实现MySQL数据闪回的操作指南

 更新时间:2024年06月21日 09:08:58   作者:逢生博客  
MySQL数据闪回是一种高级功能,它允许你在数据库中恢复到某个特定的时间点,通常是事务开始或保存点的状态,以便处理数据错误或回滚意外更改,本文给大家介绍了如何利用MyFlash实现MySQL数据闪回,需要的朋友可以参考下

Github

MyFlash 限制

仅支持 5.6 与 5.7

binlog 格式必须为 row,且 binlog_row_image=full

只能回滚DML(增、删、改

MySQL 准备

注: 本章 MySQL 是采用 Docker 部署,容器内是 不带mysqlbinlog 的,可以从已安装 MySQL 的Linux服务器上拷贝 mysqlbinlog 文件。

开启 binlog

[mysqld]
# binlog功能
log_bin=/var/lib/mysql/mysql-bin
# binlog 文件格式
binlog_format=ROW
binlog_row_image=FULL
# binlog 文件保留时间7天(默认0天)
expire_logs_days=7
# binlog 单个文件的最大值大小(默认1G)
max_binlog_size=512m
# 开启 binlog 后需要创建 function 或 procedure 时要开启
log_bin_trust_function_creators=1
# 服务id,以区分主库和备库
server-id=1
-- 显示是否开启 binlog
show variables like 'log_bin%';
-- 显示 binlog 文件格式
show variables like 'binlog_format%';
-- 显示 binlog 文件保留时间
show variables like 'expire_logs_days%';
-- 显示 binlog 单个文件的最大值大小
show variables like 'max_binlog_size%';
-- 显示 binlog 事件
show binlog events;
-- 显示全部 binlog 文件列表
show binary logs;
show master logs;
-- 显示最新 binlog 文件编号以及最后一个操作事件结束点(Position)值
show master status;
-- 结束当前 binlog 文件并生成新的 binlog 文件
flush logs;
-- 重置 binlog 文件(清空全部 biglog 文件)
reset master;

注: binlog 默认存放在 /var/lib/mysql/ 数据库文件目录。

mysqlbinlog

  • 查看 Linux 环境下 mysqlbinlog 目录
# /usr/bin/mysqlbinlog
whereis mysqlbinlog
  • 将 mysqlbinlog 文件复制到容器内的 /usr/bin 目录
docker cp mysqlbinlog mysql:/usr/bin
# 进入容器内
docker exec -it mysql /bin/bash
# 在容器内为 mysqlbinlog 添加权限
chmod +x /usr/bin/mysqlbinlog
  • 使用 mysqlbinlog 生成 sql 文件
# 进入容器内执行
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000001 >/tmp/binlog-000001.sql
# 进入容器内执行
mysqlbinlog --no-defaults \
--database=db_name \
--start-datetime='2024-06-20 00:00:00' \
--stop-datetime='2024-06-20 17:00:00' \
/var/lib/mysql/mysql-bin.000001 >/tmp/binlog-000001.sql

安装 MyFlash

  • 安装依赖
# 安装 gcc glib-2.0
yum install -y gcc libgnomeui-devel
# 验证是否安装成功
pkg-config --modversion glib-2.0
  • 安装MyFlash
# 下载源码
git clone https://github.com/Meituan-Dianping/MyFlash.git
cd MyFlash
# 动态编译链接安装
gcc -w `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c -o binary/flashback
  • 配置环境变量
vim /etc/profile
# 在文件末尾添加
alias flashback=~/MyFlash/binary/flashback
source /etc/profile
  • 验证是否安装成功
cd ~/MyFlash/binary
./flashback --help

flashback 选项

选项说明
–databaseNamesdatabaseName to apply. if multiple, seperate by comma(,)
–tableNamestableName to apply. if multiple, seperate by comma(,)
–tableNames-filetableName to apply. if multiple, seperate by comma(,)
–start-positionstart position
–stop-positionstop position
–start-datetimestart time (format %Y-%m-%d %H:%M:%S)
–stop-datetimestop time (format %Y-%m-%d %H:%M:%S)
–sqlTypessql type to filter . support INSERT, UPDATE ,DELETE. if multiple, seperate by comma(,)
–maxSplitSizemax file size after split, the uint is M
–binlogFileNamesbinlog files to process. if multiple, seperate by comma(,)
–outBinlogFileNameBaseoutput binlog file name base
–logLevellog level, available option is debug,warning,error
–include-gtidsgtids to process. if multiple, seperate by comma(,)
–include-gtids-filegtids to process. if multiple, seperate by comma(,)
–exclude-gtidsgtids to skip. if multiple, seperate by comma(,)
–exclude-gtids-filegtids to skip. if multiple, seperate by comma(,)

生成回滚文件

# 进入MyFlash的bin目录
cd ~/MyFlash/binary
# 生成回滚文件,执行后会在当前目录下生成 binlog_output_base.flashback 文件
./flashback --sqlTypes='INSERT' \
--binlogFileNames=/var/lib/mysql/mysql-bin.000001 \
--databaseNames=db_name \
--tableNames=table_name \
--start-datetime='2024-06-20 18:23:00'

执行回滚操作

# 在binlog_output_base.flashback所在目录下执行以下命令
mysqlbinlog binlog_output_base.flashback | mysql -h 127.0.0.1 -uroot -p
# 或
mysqlbinlog binlog_output_base.flashback | mysql -uroot -p
# 输入数据库密码

到此这篇关于利用MyFlash实现MySQL数据闪回的操作指南的文章就介绍到这了,更多相关MyFlash MySQL数据闪回内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL5.6.22 绿色版 安装详细教程(图解)

    MySQL5.6.22 绿色版 安装详细教程(图解)

    本文通过图文并茂的形式给大家介绍了MySQL5.6.22 绿色版 安装详细教程,非常不错,具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • win10下完全卸载+重装MySQL步骤详解

    win10下完全卸载+重装MySQL步骤详解

    小编是因为连接MySQL和Qt时出现问题,迫不得已选择把64bitMySQL换成了32bitMySQL,在安装过程中出现各种问题,下面小编把 win10下完全卸载+重装MySQL步骤分享到脚本之家平台,需要的朋友参考下
    2017-12-12
  • 聊聊QT添加MySQL驱动依赖的问题

    聊聊QT添加MySQL驱动依赖的问题

    这篇文章主要介绍了QT添加MySQL驱动依赖的问题,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • mysql 全文检索中文解决方法及实例代码

    mysql 全文检索中文解决方法及实例代码

    这篇文章主要介绍了mysql 全文检索中文解决方法及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • MySQL各个特殊时间段的查询方法

    MySQL各个特殊时间段的查询方法

    在MySQL数据库中,经常需要查询某个时间段内的数据,所以本文给大家介绍了MySQL各个特殊时间段的查询方法,并提供相应的源代码示例,具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • MYSQL查看表是否被锁以及解锁过程

    MYSQL查看表是否被锁以及解锁过程

    这篇文章主要介绍了MYSQL查看表是否被锁以及解锁过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-10-10
  • mysql jdbc连接步骤及常见参数

    mysql jdbc连接步骤及常见参数

    这篇文章主要介绍了mysql jdbc连接步骤及常见参数,需要的朋友可以参考下
    2015-09-09
  • Mysql动态更新数据库脚本的示例讲解

    Mysql动态更新数据库脚本的示例讲解

    今天小编就为大家分享一篇关于Mysql动态更新数据库脚本的示例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • MYSQL复杂查询练习题以及答案大全(难度适中)

    MYSQL复杂查询练习题以及答案大全(难度适中)

    在我们学习mysql数据库时需要一些题目进行练习,下面这篇文章主要给大家介绍了关于MYSQL复杂查询练习题以及答案的相关资料,文中通过实例代码介绍的非常详细,这些练习题难度适中,需要的朋友可以参考下
    2022-08-08
  • MySQL中WITH ROLLUP的具体使用

    MySQL中WITH ROLLUP的具体使用

    本文主要介绍了MySQL中WITH ROLLUP的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07

最新评论