数据备份与恢复--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/bi数据备份与恢复--MySQL--flashback工具
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



