[MySQL]-数据库恢复工具之binlog2sql

news2025/1/16 2:33:37

[MySQL]-数据库恢复工具之binlog2sql

森格 | 2022年12月

本文主要介绍工具binlog的使用,它可以帮助我们快速解析出原始SQL、回滚SQL、去除主键的INSERT SQL等。


一、工具介绍

1.1 概述

我们可以去设想,当开发人员使用了delete语句误删除了某表的数据,这时候需要进行数据恢复,我们如何快速的去进行恢复呢?

这就要提到我们今天介绍的工具了 ,binlog2sql,一款基于python开发的开源工具,是由大众点评团队的DBA使用python开发出来的。其功能有:

  • 数据快速回滚(闪回)
  • 主从切换后新master丢失数据的恢复
  • 从binlog生成标准SQL,带来的衍生功能

1.2 工具安装

GitHub地址:https://github.com/danfengcao/binlog2sql

百度网盘下载(防止网络无法进入GitHub):

链接:https://pan.baidu.com/s/16tKMyZaYLcVUn9oDGhTkBA
提取码:u4n9

首先安装git及pip

yum -y install epel-release 
yum -y install git python-pip

安装binlog2sql

git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt

1.3 数据库要求

配置要求,开启以下参数

[mysqld]
server_id = xxx
logbin = mysql-bin.xxxxx
max_binlog_size = xx
binlog_format = row 
binlog_row_image = full

用户权限要求

# 至少要有一个用户有以下权限
select,replication slave,replication client
# 官方建议授权
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO xx;

三种权限说明

  • select:需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句
  • super/replication client:两个权限都可以,需要执行’SHOW MASTER STATUS’, 获取server端的binlog列表
  • replication slave:通过BINLOG_DUMP协议获取binlog内容的权限

注:以上权限说明来自GitHub官方说明。

1.4 工具使用

语句格式

(安装目录的binlog2sql/的目录下执行)

python binlog2sql.py -h${host} -P${port} -u${username} -p${password} [parameter...]

参数介绍如下:

解析模式

–stop-never 持续解析binlog。可选。默认False,同步至执行命令时最新的binlog位置。

-K, --no-primary-key 对INSERT语句去除主键。可选。默认False

-B, --flashback 生成回滚SQL,可解析大文件,不受内存限制。可选。默认False。与stop-never或no-primary-key不能同时添加。

–back-interval -B模式下,每打印一千行回滚SQL,加一句SLEEP多少秒,如不想加SLEEP,请设为0。可选。默认1.0。

解析范围控制

–start-file 起始解析文件,只需文件名,无需全路径 。必须。

–start-position/–start-pos 起始解析位置。可选。默认为start-file的起始位置。

–stop-file/–end-file 终止解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。

–stop-position/–end-pos 终止解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。

–start-datetime 起始解析时间,格式’%Y-%m-%d %H:%M:%S’。可选。默认不过滤。

–stop-datetime 终止解析时间,格式’%Y-%m-%d %H:%M:%S’。可选。默认不过滤。

对象过滤

-d, --databases 只解析目标db的sql,多个库用空格隔开,如-d db1 db2。可选。默认为空。

-t, --tables 只解析目标table的sql,多张表用空格隔开,如-t tbl1 tbl2。可选。默认为空。

–only-dml 只解析dml,忽略ddl。可选。默认False。

–sql-type 只解析指定类型,支持INSERT, UPDATE, DELETE。多个类型用空格隔开,如–sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。

二、场景模拟


当前chart.users情况
在这里插入图片描述
delete语句删除数据
在这里插入图片描述

查看当前binlog文件
在这里插入图片描述

使用binlog2sql

python ./binlog2sql.py -h${host} -P${port} -u${username} -p${password} -dchart -tusers --start-file='mysql-bin.000001' --start-datetime='2022-12-16 17:20:00' --stop-datetime='2022-12-16 17:30:00'

正向解析如下

在这里插入图片描述
逆向解析如下

python ./binlog2sql.py -h${host} -P${port} -u${username} -p${password} -dchart -tusers --start-file='mysql-bin.000001' --start-datetime='2022-12-16 17:00:00' --stop-datetime='2022-12-16 17:10:00' -B

在这里插入图片描述

恢复完成如下

在这里插入图片描述

至此,我们已经对删除的数据的准确定位的还原,这种方法相对来说还是比较高效的。

三、总结


对于该工具在使用上面是比较简单的,在恢复速度上也是比较快速,而对于运维人员来说,不用再去跑到binlog中去查找删除的信息,掌握一款这样的工具在特定的恢复场景中还是十分有必要的。如果错误之处,欢迎各位大佬提出改正建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务实用篇5-分布式搜索elasticsearch篇1

今天的主要学习任务是分布式搜索,首先了解elasticsearch,然后学习索引库的操作、文档的操作、RestAPI等。elasticsearch是非常强大的开源搜索引擎,可以帮助我们从海量数据中快速定位到我们需要的内容。这一篇主要学习ES的基本使用&#xff0c…

rocketmq源码-关于消费者push模式和pull模式的对比

在rocketmq中,对于消费者而言,有两种模式,push和pull 我在没有看源码之前,看其他博客的时候,大部分的说法是: mq中有两种获取消息的模式,一种是push,一种是pull;pull这种…

技术人员必备的便携版卸载清理工具 - Uninstall Tool 3 便携版直接U盘中启动软件,专为单个用户在多台电脑上使用而设计的。

Uninstall Tool ,快速、强大的卸载清理软件,可完全彻底删除已安装软件。彻底删除不需要的应用程序,实时安装监视器。控制在系统启动时运行的应用。有效,强大的应用程序,具有简单而直观的界面。 删除不需要的软件&#…

马斯克都不懂的 GraphQL,API 网关又能对其如何理解?

作者,罗泽轩 上个月马斯克评论 Twitter App 滥用 RPC 后,与一些 Twitter 的技术主管发生了矛盾 —— 直言马斯克不懂技术。那这个马斯克都不懂的 GraphQL 到底是什么? 什么是 GraphQL?它有多流行? GraphQL 是一套由 F…

【javascript】值,类型,变量,函数,noi103题目,if语句,调试

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录基本类型NumberStringboolean例子变量求二元一次方程函数1.3题目if例子1.4题目调试下面我们会随着…

SpringMVC:SpringMVC五种类型参数传递(4)

请求参数1. 环境准备2. 参数传递2.1 GET请求2.1.1 GET发送一个参数2.1.2 GET发送多个参数2.1.3 GET请求中文乱码2.2 POST请求2.2.1 POST发送一个参数2.2.2 POST发送多个参数2.2.3 POST请求中文乱码问题3. 五种类型参数传递3.1 普通参数3.2 POJO类型参数3.3 嵌套POJO类型参数3.4…

HashMap(二)扩容

想要了解HashMap的扩容机制你要有这两个问题 1、什么时候才需要扩容 2、HashMap的扩容是什么 1、什么时候才需要扩容 当HashMap中的元素个数超过数组大小(数组长度)* loadFactor(负载因子)时,就会进行数组扩容,loadFactor的默认值…

Pytest框架运行常用参数解析

-s:表示输出调试信息,用于显示测试函数中print()打印的信息。我们在用例中加上一句 print(driver.title),我们再运行一下我们的用例看看,调试信息输出-v:未加前只打印模块名,加v后--verbose打印类名、模块名…

Java中的八大包装类(Wrapper)

目录 一、八大包装类 1、八大包装类的体系图: 二、装箱和拆箱 三、intValue()和valueOf()方法 1、intValue() 2、valueOf() 四、包装类型和String类型的相互转换 五、包装类的常用方法(以Integer和Character为例) 一、八大包装类 包装…

Scala环境搭建

目录1)安装步骤2)测试3)IDEA安装Scala 插件1)安装步骤 1.首先确保 JDK1.8 安装成功 2.下载对应的 Scala 安装文件 scala-2.x.zip 3.解压 scala-2.12.11.zip,我这里解压到 F:\software 4.配置 Scala 的环境变量 …

使用Python和GDAL处理遥感影像数据超详细教程

提示:文章末尾有强化学习代码资源 : ) 前言 在本教程中,我们将学习使用 Python 和地理空间数据抽象库 GDAL 自动处理栅格数据的基本技术。 栅格文件通常用于存储地形模型和遥感数据及其衍生产品,例如植被指数和其他环境数据集。 栅格文件往往…

windows 连接蓝牙耳机失败 解决方法

windows 连接蓝牙耳机失败 解决方法 如果我们在windows7或windows10电脑中连接蓝牙却出现了连接失败的状况,这要怎么办呢,可能是我们没有打开电脑的蓝牙功能,这时我们点击打开蓝牙网络的属性,勾选Bluetooth设置的选项即可&#x…

安卓某通讯协议环境算法浅谈

所有的tlv组包都在 oicq.wlogin_sdk.tlv_type加密算法可以hook oicq.wlogin_sdk.tools Tlv144 是由5个tlv组成 然后用TGTkey进行 TEA加密 tlv_109 AndroidIDtlv_52d 系统内核信息tlv_124 平台网络信息tlv_128 手机设备信息tlv_16e 手机品牌TLV544 是设备id&#xff0…

MySQL-复合查询

文章目录复合查询基础查询多表查询自连接子查询单行子查询多行子查询多列子查询合并查询uion会自动去重union all就是不去重union all就是不去重复合查询 基础查询 查询工资高于500或者岗位为MANAGER的员工,同时名字首字母是J select * from emp where (sal>500…

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上,板卡插入时&#xff0…

pytest + yaml 框架 -14.钉钉机器人通知测试结果

前言 当用例执行完成后,希望能给报告反馈,常见的报告反馈有:邮箱/钉钉群/飞书/企业微信 等。 pip 安装插件 pip install pytest-yaml-yoyo钉钉机器人通知测试结果功能在v1.1.1版本实现 钉钉机器人设置 钉钉机器人的设置请参考官方API文档…

实验2 VLAN的划分及VLAN间通信的配置

实验2 VLAN的划分及VLAN间通信的配置一、实验目的二、实验要求三、实验步骤,数据记录及处理四、实验总结一、实验目的 掌握VLAN的划分及VLAN间通信的配置方法 二、实验要求 交换机在没有划分虚拟网络时,都默认属于VLAN1,可以相互通信。通过…

【链表面试题】——剑指 Offer : 复杂链表(带随机指针)的复制

文章目录前言1.题目介绍2. 题目分析3. 思路讲解思路1思路2步骤1步骤2步骤34. 分析图及源码展示前言 这篇文章,我们一起来解决一道与链表相关的经典面试题:复杂链表(带随机指针)的复制。 1.题目介绍 我们先来一起了解一下这道题&…

Java的继承到底是怎么回事?看这篇让你明明白白

一. 引言 在学习面向对象后,我们就可以使用类来描述对象共有的特征(属性)和行为举止(方法),如果我们用类来描述猫、狗和企鹅,可以进行如下编码: public class Cat {private String name;//名字private int age;//年龄private St…

操作系统,计算机网络,数据库刷题笔记11

操作系统,计算机网络,数据库刷题笔记11 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql&#xf…