暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

手机用户8874 2024-10-29
256

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 |
±-----±-----±--------------------+

  1. 删除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。

  1. 生成闪回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是否有问题,通过行数、时间点等信息确认数据是否正确。

  1. 生成回滚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生成回滚文件,确认要恢复的行数。

  1. 导入数据库。

相关代码如下:

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

运行结果如下:

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

/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来分析日志,得到精确的开始和结束时间再闪回。

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

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

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论