Mysql 恢复误删库表数据
创始人
2025-01-15 20:38:21
0

一、前提

        1、如果你的数据库有备份文件,自己还原即可。

        2、如果没有备份文件,那首先检查下你的 binlog 是否开启。如果未开启,那你就不用往下看了。如果开启了,可以往下看看。

1.1 查看位置

        可以通过以下的命令查看是否开启了 binlog 以及它的存储路径,mysql8.0 版本是默认开启的。

show variables like '%log_bin%'

二、简单场景演示

2.1 背景

        此时演示的数据库版本是 Mysql 8.0。且创建表、插入数据和删除表都是在一个 binlog 里面完成的。

2.2 创建数据库

        确认 binlog 是开启状态之后,创建测试数据库,在测试数据库中创建测试表,并写入数据,脚本如下:

create database if EXISTS itcast;  use itcast;  create table tb_user( 	id int(11) not null, 	name varchar(50) not null, 	sex varchar(1), 	primary key (id) )engine=innodb default charset=utf8;  insert into tb_user(id,name,sex) values(1,'Tom','1'); insert into tb_user(id,name,sex) values(2,'Trigger','0'); insert into tb_user(id,name,sex) values(3,'Dawn','1'); 

2.3 删除数据库

        执行下面的语句将数据库删除掉。

drop DATABASE itcast;

2.4 创建新文件

        当需要恢复数据时,为了防止恢复数据后影响最新业务,需要执行下面的命令产生一个新的 binlog 文件,如下,此时旧的 binlog 文件不会再有写入操作了。

flush logs;

2.5 查看具体文件

        执行下面的命令,看下系统有多少个 binlog 文件

show master logs;

        由于我们执行 flush logs 命令新生了一个文件,所以我们执行的删除的命令应该在 binlog.000017 文件里面。

2.6 查看具体的命令行

        执行下面的命令,查看具体操作的开始和结束的位置

show binlog events in 'binlog.000017';

        得到数据恢复的起始位置为 125,结束位置为 1750

2.7 mysqlbinlog

        接下来使用 mysqlbinlog 命令执行 binlog 文件,恢复数据,命令如下:

mysqlbinlog -v /var/lib/mysql/binlog.000017 --start-position=125 --stop-position=1750 | mysql -uroot -p1234

         数据就被恢复成功了。

三、复杂场景演示

        先通过下面的命令查看下 binlog 是否开启,以及日志存储的位置

show variables like '%log_bin%'

3.1 背景

        1、此时演示的数据库版本是 Mysql 8.0

        2、创建表、插入数据和删除表不是在一个 binlog 里面完成的。

        3、binlog 里面存储了不止一个数据库的日志。

3.2 现状

        此时我们有一个库,里面有三张表,如下,具体什么时候创建的,不记得了,现在我们把他删除掉,看看能不能给还原回去。

3.3 删除数据库

        执行下面的语句将数据库删除掉。

drop DATABASE itcast;

3.4 数据复原

        1、执行 flush logs 命令,使其产生一个新的 binlog 文件

        2、执行下面的命令,看下系统有多少个 binlog 文件。

show master logs;

        3、挨个遍历,执行下面的命令,挨个 binlog 日志去查看

show binlog events in 'DESKTOP-B0B82CP-bin.000001'; show binlog events in 'DESKTOP-B0B82CP-bin.000002'; show binlog events in 'DESKTOP-B0B82CP-bin.000003'; show binlog events in 'DESKTOP-B0B82CP-bin.000004'; show binlog events in 'DESKTOP-B0B82CP-bin.000005'; show binlog events in 'DESKTOP-B0B82CP-bin.000006'; show binlog events in 'DESKTOP-B0B82CP-bin.000007';

        1、发现第一个有关于 itcast 的日志位置,如下

        把涉及到的这几个 binlog 日志都拷贝到另外的文件夹里面去,因为 MySQL Server 8.0 这个目录识别不了,真坑爹。 

 

         拷贝完成后,执行下面的语句:

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000003 --start-position=424 --stop-position=543 | mysql -uroot -p123456

        执行成功后,可以看到,数据库被恢复成功了,不过现在只是个空库,如下图:

        2、继续向下搜寻有关 itcast binlog 日志,如下图,又在 binlog 里面发现了有关 itcast 的日志,

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=125 --stop-position=9655 | mysql -uroot -p123456

        继续找,继续还原。 

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=11607 --stop-position=12344 | mysql -uroot -p123456

        继续找,继续还原。

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=14152 --stop-position=14742 | mysql -uroot -p123456

        到此为止,就都找全了,数据也都恢复回来了。

相关内容

热门资讯

六分钟普及!wepoke软件透... 六分钟普及!wepoke软件透明挂下载,(红龙扑克)果真真的有挂,详细教程(有挂掌握)1、wepok...
热点讨论!德州之星辅助器(透视... 热点讨论!德州之星辅助器(透视辅助)WPKai辅助-其实真的有挂(头条)德州之星辅助器辅助器中分为三...
Wepoke!wepoke辅助... Wepoke!wepoke辅助挂在哪开(透视挂)新版教程-一贯真的有挂(微博热搜)1、首先打开Wep...
wpk辅助挂!红龙软件德州扑克... wpk辅助挂!红龙软件德州扑克就是真的有挂(透视辅助)原来真的有挂(2023已更新)(哔哩哔哩)1....
实测发现!wpk ai机器人和... 实测发现!wpk ai机器人和真的的区别(透视)wpk外 挂被实锤-一般真的有挂(哔哩哔哩)实测发现...
八分钟脚本!aapoker辅助... 八分钟脚本!aapoker辅助工具存在,(云扑克app)的确真的有挂,2025新版教程(有挂晓得);...
好运大菠萝!wepower有机... 好运大菠萝!wepower有机器人(软件透明挂)输赢教程-其实真的有挂(百度贴吧)1、全新机制【好运...
wepoke模拟器!聚星扑克其... wepoke模拟器!聚星扑克其实真的有挂(透视辅助)本来真的有挂(2025已更新)(哔哩哔哩);1、...
实测揭晓!微扑克有脚本(辅助挂... 实测揭晓!微扑克有脚本(辅助挂)wepOkE发牌规律性总结-好像真的有挂(头条)1、实时微扑克有脚本...
一分钟规律!微扑克有辅助挂,(... 一分钟规律!微扑克有辅助挂,(传奇扑克)总是真的有挂,线上教程(有挂知晓);1、下载好微扑克有辅助挂...