数据备份与恢复--MySQL--flashback工具

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:2

数据备份与恢复--MySQL--flashback工具


在系统的日常使用和维护过程中,运维、DBA(数据库管理员)或开发人员有时会误删或者误更新数据,且系统bug有时也会引发该问题。如果是线上环境且误操作带来的影响较大时,需要系统提供快速恢复数据的能力。


传统的恢复数据方法是利用备份和binlog恢复,但这些方法费时费力,且无法快速准确地恢复数据。


今天小编给大家介绍2款MySQL数据恢复闪回(flashback)工具:binlog2sql闪回工具和MyFlash闪回工具,利用binlog直接进行回滚,能够在无需停机的基础上快速恢复用户误操作的delete和update数据。




1 binlog2sql闪回工具

1.1 前置条件


  • 开启binlog,binlog格式必须为ROW,且binlog_row_image必须为full。

    注:binlog是MySQL数据库的二进制日志,记录了数据库的修改操作。

  • 适用于MySQL5.6、5.7版本,在MySQL8.0版本下使用有bug,如字段顺序和字段值对应关系存在问题。


1.2 部署安装

以下都是源码安装,属于离线安装。如果机器可以连接外网,安装步骤更简单,可以自行网上搜索相应的安装方式。


  • 安装setup-tools


下载地址:

https://pypi.org/project/setuptools/#history


需要安装的恢复工具的依赖包如下:


unzip setuptools-36.5.0.zip
cd setuptools-36.5.0
python setup.py install


  • 安装pip


下载地址:

https://pypi.org/project/pip/#history


需要安装的恢复工具的依赖包如下:


tar -zxvf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install


  • 通过pip安装PyMySQL和mysql-replication


pip install PyMySQL-0.9.3.tar.gz
pip install mysql-replication-0.21.tar.gz


  • 安装binlog2sql


下载地址:

https://github.com/danfengcao/binlog2sql


解压binlog2sql后直接使用:


unzip binlog2sql-master.zip
cd binlog2sql-master/binlog2sql/


若输入python binlog2sql.py --help后能够正确输出帮助信息,则表示安装成功。


1.3 案例应用


  • 模拟误删表中的部分数据


1. 创建测试原始表。


create table test1(id int,name varchar(10),addtime datetime default now());
insert into test1 values(1,'赵',now()),(2,'钱',now()),(3,'孙','2022-01-12 12:12:12'),(4,'李','2022-12-12 1:00:00');
mysql> select * from test1;
+------+------+---------------------+
| id   | name | addtime             |
+------+------+---------------------+
|    1 | 赵  | 2021-07-16 09:21:55 |
|    2 | 钱  | 2021-07-16 09:21:55 |
|    3 | 孙  | 2022-01-12 12:12:12 |
|    4 | 李  | 2022-12-12 01:00:00 |
+------+------+---------------------+


2. 删除id>2的数据。


mysql> delete from test1 where id>2;
Query OK, 2 rows affected (0.03 sec)
mysql> select * from test1
;
+------+------+---------------------+
| id   | name | addtime             |
+------+------+---------------------+
|    1 | 赵  | 2021-07-16 09:21:55 |
|    2 | 钱  | 2021-07-16 09:21:55 |
+------+------+---------------------+


  • 恢复误删数据的具体步骤


1. 查看binlog日志,根据删除的时间确定binlog文件。



2. 从binlog文件中解析出误操作的语句。


python /soft/binlog2sql-tool/binlog2sql-master/binlog2sql/binlog2sql.py -h192.168.63.60 -P3306 
-uadmin -pxxx -dzhanghao -ttest1 --start-file='binlog.000472' --only-dml


运行结果如下:



从这里我们可以看到10:08:51时执行了2条delete语句,对应原始的sql语句是delete from test1 where id>2。


3. 生成闪回SQL语句。


python /soft/binlog2sql-tool/binlog2sql-master/binlog2sql/binlog2sql.py -h192.168.63.60 -P3306 
-uadmin -pxxx -dzhanghao -ttest1 --start-file='binlog.000472' -B --only-dml


添加-B, --flashback生成闪回SQL语句,确定反向SQL是否有问题,通过行数、时间点等信息确认数据是否正确。



4. 生成回滚SQL文件。


python /soft/binlog2sql-tool/binlog2sql-master/binlog2sql/binlog2sql.py -h192.168.63.60 -P3306 
-uadmin -pxxx -dzhanghao -ttest1 --start-file='binlog.000472' -B --only-dml >rollback.sql


添加wc -l rollback.sql生成回滚文件,确认要恢复的行数。


5. 导入数据库。


相关代码如下:


mysql -h192.168.63.60 -P3306 -uadmin -p'xxx' < rollback.sql


1.4 参数选项解释




2 MyFlash闪回工具

2.1 前置条件

  • 开启binlog,binlog格式必须为ROW,且binlog_row_image必须为full。

  • 官网上的说法为该工具适用于MySQL5.6、5.7,但在MySQL8.0也可以正常使用,暂未发现bug。


2.2 部署安装

下载地址:

https://github.com/Meituan-Dianping/MyFlash


unzip MyFlash-master.zip
cd MyFlash-master
yum install glib2-devel -y
gcc -w `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c -o binary/flashback
cd binary


若输入./flashback –h能够正确输出帮助信息,则表示安装成功。


2.3 案例应用

此处仍以上面的测试用例为例。



1. 生成闪回binlog日志,默认生成的文件名为binlog_output_base.flashback。


./flashback --databaseNames=zhanghao --tableNames=test1
--binlogFileNames=/var/data/mysql3308/data/binlog.000470


运行结果如下:



2. 应用闪回日志恢复数据。


/usr/local/mysql8/bin/mysqlbinlog binlog_output_base.flashback | mysql8 -A  
-uadmin -P3308 -p -h192.168.63.63


运行结果如下:



在使用MyFlash时,一定要结合时间和位点信息来恢复。因为生成的是回滚binlog文件,无法识别文件内容,不像binlog2sql可以直接生成SQL语句。因此,最好在解析回滚binlog文件后,进一步确认要恢复的SQL内容是否准确


解析方式为:


/usr/local/mysql8/bin/mysqlbinlog  -vv   binlog_output_base.flashback > 1.sql



2.4 参数选项解释




3 重点梳理


1. binlog2sql是闪回具体的反向SQL语句,MyFlash闪回的是反向binlog文件


2. MyFlash闪回也有一定的局限性。在闪回时,虽然指定闪回的开始和结束时间/位置依然是最为重要的,但使用flashback无法查看二进制日志。

这意味着在使用MyFlash时,要么预估开始和结束时间,进行不精确的闪回,要么使用mysqlbinlog或binlog2sql来分析日志,得到精确的开始和结束时间再闪回。


3. binlog2sql似乎比MyFlash更直观,但是MyFlash性能非常好,闪回速度非常快,比binlog2sql要快很多,如果闪回的数据量很大,并且要求快速地恢复数据,建议使用MyFlash。


4. 若使用的版本为MySQL8.0,建议使用MyFlash(binlog2sql在该版本下使用有bug),其他版本可以自由选择。


5. 注意不要覆盖现有表数据,恢复之前先做好备份




#往期推荐#


# 苍穹性能分析之JVM性能分析内存篇


# 苍穹性能分析系列 之 快速定位SQL问题

# 苍穹性能分析系列之Arthas的三板斧

Jmeter的高阶系列——Beanshell脚本


更多精彩内容,“码”上了解!↓



数据备份与恢复--MySQL--flashback工具

在系统的日常使用和维护过程中,运维、DBA(数据库管理员)或开发人员有时会误删或者误更新数据,且系统bug有时也会引发该问题。如果是线上...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息