MySQL数据误删怎么办?闪回帮你找回手抖误删的数据
随着互联网的飞速发展,数据在企业中扮演着越来越重要的角色。而数据库则是企业中最基础、最核心的技术之一。作为目前世界上使用最广泛的关系型数据库管理系统之一,MySQL的稳定性、可靠性和安全性对于企业的数据存储和应用至关重要。
然而,日常的数据库操作中仍然会遇到各种各样的问题。其中,误删除、误修改等意外操作依然是MySQL数据库管理员最头疼的问题之一。这时候,我们就需要学会使用MySQL的闪回功能,以便快速恢复误删除、误修改等情况下的数据。
MySQL闪回技术是一种逆向数据修改技术,也称为“数据时间旅行”或“基于日志的数据修复”,它能够通过回滚操作来还原已经提交的事务,使其变成未提交的状态,从而达到恢复数据的目的。MySQL实现闪回技术的核心是通过查询binlog日志文件,将已经提交的事务进行反向执行。
MySQL闪回技术可以通过多种方法来实现,包括使用命令行工具、使用第三方工具以及自定义脚本等,其实mysql自带的mysqlbinlog
工具就能完成,具体步骤如下:
- 查询binlog日志文件
使用mysqlbinlog命令查询需要恢复的时间段内的binlog日志文件,并将其保存到一个文本文件中:其中,–start-datetime和–stop-datetime参数用于指定需要查询的时间段,>>符号用于将结果追加到指定文件中。1
mysqlbinlog /mysql/logbin.0000001 --start-datetime="2023-05-11 15:03:00" --stop-datetime="2023-05-11 15:07:00" >> /tmp/mysql-bin.txt
1 | BEGIN |
过滤需要闪回的SQL语句
将查询到的日志文件进行过滤,提取需要闪回的SQL语句,并将其保存到一个sql文件中:1
grep -i 'delete from table_name' /tmp/mysql-bin.txt > /tmp/flashback.sql
其中,grep命令用于过滤包含指定关键字的行,-i参数表示不区分大小写,并将结果保存到指定文件中。
反向执行SQL语句
根据binlog信息反向执行SQL语句,将已经提交的事务进行回滚。
使用mysqlbinlog命令查询日志文件时,需要确保MySQL服务器上已开启二进制日志功能。如果未开启,需要修改my.cnf配置文件,并重启MySQL服务。
除了mysqlbinlog
外,还有很多不错的开源工具。
binlog2sql
从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL。
代码地址:https://github.com/danfengcao/binlog2sql.git
MyFlash
MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析v4版本的binlog,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。 该工具已经在美团点评内部使用
代码地址:https://github.com/Meituan-Dianping/MyFlash.git
binlog_rollback
binlog_rollback实现了基于row格式binlog的回滚闪回功能,让误删除或者误更新数据,可以不停机不使用备份而快速回滚误操作;也可以解释binlog(支持非row格式binlog)生成易读的SQL,让查找问题如什么时个某个表的某个字段的值被更新成了1,或者找出某个时间内某个表的所有删除操作等问题变得简单;还可以按配置输出各个表的update/insert/delete统计报表, 也会输出大事务与长事务的分析, 应用是否干了坏事一目了然, 也会输出所有DDL。
代码地址:https://github.com/GoDannyLai/binlog_rollback.git
mysql-flashback
可以使用指定 SQL 语句, 来获取上面需要回滚的参数,可以支持条件过滤, 条件过滤也是使用 SQL 的形式体现的.
1 | ./mysql-flashback create \ |
上面的 –match-sql 参数值特别长, 主要是因为参数要在一个字符串里面导致的.
格式化看 –match-sql 参数值
1 | SELECT col_1, col_2, col_3 -- 指定只需要的字段, SELECT * 代表所有字段 |
代码地址:https://github.com/daiguadaidai/mysql-flashback.git
开源的关于binlog
解析的工具比较多,有兴趣的可以去找一下。在MySQL中,binlog日志默认是关闭的。要使用MySQL闪回功能,必须首先开启binlog日志并设置相应的参数,如 log-bin 等。MySQL支持三种不同类型的binlog日志格式,分别是statement、row和mixed。其中,row模式是最常用的模式,它会记录每行数据的变化,包括删除、插入和更新等操作。因此,在使用MySQL闪回时,建议将binlog日志格式设置为row模式。
MySQL闪回是一项非常有用的功能,可以帮助我们快速恢复误删除、误修改等操作导致的数据丢失。除了基于binlog日志的闪回方案外,MySQL Enterprise Backup工具也提供了一种可行的闪回实现方式。但是需要注意的是,对于数据的安全性和完整性,我们仍然要采取一系列措施保障,如定期备份、设置权限、监控数据库等。虽然MySQL闪回
功能非常实用,但是在TRUNCATE操作
、DROP TABLE操作
、系统故障导致数据库文件损坏或丢失等情况下是无法使用闪回的。
只有在确保数据安全性的前提下,才能更好地利用MySQL闪回等技术,提高数据库的可靠性和稳定性。
MySQL数据误删怎么办?闪回帮你找回手抖误删的数据