数据备份与恢复--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. 注意不要覆盖现有表数据,恢复之前先做好备份。
#往期推荐#
更多精彩内容,“码”上了解!↓
数据备份与恢复--MySQL--flashback工具
本文2024-09-23 01:12:14发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144436.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf