作者:微信小助手
发布时间:2024-12-03T17:13:10
某天,张三打算操作数据库,删除自己项目的无用数据,但是一不小心数据删多了。被误删的数据,如何恢复呢?本文将介绍相关方法,以及现成的一些工具。
例子:
有一个表
create table person
(
id bigint primary key auto_increment comment 'id',
name varchar(50) comment '名称'
) engine = innodb;
原本是要执行这条SQL语句:
delete from person where id > 500000;
不小心执行了这条SQL语句:
delete from person;
处理这个问题的解决思路就是,基于binlog找回被删除的数据,将被删除的数据重新插入到数据库。
对于binlog文件来说,实际上保存的是对于数据库的正向操作。比如说,插入数据insert,binlog中保存的也是insert语句;删除数据delete,binlog中保存的也是delete语句。
因此,想要恢复被删除的数据,主要有两种方式:
下面就针对上面的两种方式,进行详细的讲解
首先介绍两种方式都需要使用到的一些通用的操作,主要用于设置binlog、找到binlog文件
1.1.1 查询开启状态
首先要保证binlog是开启的,不然数据肯定是没办法恢复回来的。
在MySQL中,可以通过执行以下SQL查询来检查是否已经开启了binlog:
SHOW VARIABLES LIKE 'log_bin';
这个查询将返回一个结果集,其中包含名为log_bin
的系统变量的值。如果log_bin
的值为ON,则表示binlog已经开启;如果值为OFF,则表示binlog没有开启。
mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)
1.1.2 开启binlog
如果发现没有开启,可以通过修改MySQL配置文件(通常是my.cnf
或my.ini
,Linux下MySQL的配置文件目录一般是/etc/mysql
)中的[mysqld
]部分来开启binlog。如果在配置文件中找到了类似以下的设置,则表示binlog已经开启:
[mysqld]
log-bin=mysql-bin
server-id=1
修改配置启用了binlog之后,需要重启MySQL服务才能使更改生效
mysql-bin
表示binlog文件的前缀
server-id
设置了MySQL服务器的唯一ID,必须设置ID,否则没办法开启binlog