【每日一记11】使用binlog2sql恢复数据
  

sailyang 1597

{{ttag.title}}
binlog2sql 是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要用途如下:

数据快速回滚(闪回)
主从切换后新master丢数据的修复
从binlog生成标准SQL,带来的衍生功能
1、 系统环境准备
1.1 安装git
该项目分享与git上,可以直接从git上获取,因此可以先安装git

yum install  -y  pip
1.2 安装python
因binlog2sql依赖于python2.7或python3.4+版本,如果本机python版本较低,则无法使用。安装或升级python的方法可以参考 《python安装及升级》

1.3 安装pip
如果系统中没有安装pip,则需要先安装pip,因为后续需要用pip安装python所需的包。安装方法可以参考历史文章中的 《一分钟搞定pip安装》

2、 MySQL环境准备
2.1 参数设置
MySQL server必须设置以下参数

[mysqld]
server_id = 128
log_bin = /data/mysql/mysql3306/logs/mysql-bin
max_binlog_size = 512M
binlog_format = row
binlog_row_image = full   # 默认值,可以不显式设置
2.2  创建恢复账号
因binlog2sql是通过模拟从库的方式获取binlog,所以,数据库账号权限至少需设置为从库所需的权限。
1.4 binlog2sql下载及依赖包安装
binlog2sql可以部署在其他机器上,而不是必须部署在mysql服务端上

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

2.4  模拟误删除数据

3 binlog2sql恢复数据
3.1  生成恢复SQL
因知道大概误删除的时间,因此通过解析对应时间的binlog恢复出指定库表的数据,生成的结果是用于恢复的sql

python binlog2sql.py  --flashback  -h **-udata_rec -p'xxxxxxxx' -d testdb  -t t_test1  --start-file='mysql-bin.000003' --start-datetime='2020-09-18 16:29:08' --stop-datetime='2020-09-18 16:30:00'  >/tmp/rec.sql


3.2 恢复数据
数据已恢复。

4 使用说明

4.1  解析模式
--stop-never 持续解析binlog。可选。默认False,同步至执行命令时最新的binlog位置。一般情况下解析单个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。

4.2 解析范围控制
--start-file 起始解析文件,只需文件名,无需全路径 ,必选参数。即指定对应的binlog起始文件名

--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'。可选。默认不过滤。

4.3 对象过滤
-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。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。



打赏鼓励作者,期待更多好文!

打赏
1人已打赏

会飞的癞蛤蟆 发表于 2020-9-22 09:33
  
超给力,谢谢分享。
小霞米 发表于 2023-8-29 13:08
  
超给力,谢谢分享。
小西北 发表于 2023-8-29 13:08
  
超给力,谢谢分享。
焱燚 发表于 2023-8-29 13:14
  
超给力,谢谢分享。
日出 发表于 2023-8-29 13:14
  
超给力,谢谢分享。
德德 发表于 2023-8-29 13:20
  
超给力,谢谢分享。
飞飞侠 发表于 2023-8-29 13:20
  
超给力,谢谢分享。
小德 发表于 2023-8-29 13:25
  
超给力,谢谢分享。
小小胖 发表于 2023-8-29 13:25
  
超给力,谢谢分享。
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
干货满满
新版本体验
技术笔记
功能体验
标准化排查
产品连连看
技术晨报
2023技术争霸赛专题
技术咨询
信服课堂视频
GIF动图学习
运维工具
用户认证
解决方案
VPN 对接
专家分享
社区帮助指南
自助服务平台操作指引
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
安装部署配置
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
云计算知识
原创分享
sangfor周刊
项目案例
SANGFOR资讯
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
答题榜单公布
纪元平台
通用技术
卧龙计划
华北区拉练
天逸直播
以战代练
秒懂零信任
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版达人

新手89785...

本周建议达人

新手78183...

本周分享达人