一、前提
**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
到此为止,就都找全了,数据也都恢复回来了。
标签:
mysql
本文转载自: https://blog.csdn.net/xhf852963/article/details/135358665
版权归原作者 快乐的小三菊 所有, 如有侵权,请联系我们删除。
版权归原作者 快乐的小三菊 所有, 如有侵权,请联系我们删除。