Mysql恢复误删库表数据完整场景演示

 更新时间:2024年07月10日 11:09:07   作者:快乐的小三菊  
在开发和在生产中总会出现各种各样的失误和意味,当MySQL的数据或表被删除后不要慌,下面这篇文章主要给大家介绍了关于Mysql恢复误删库表数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、前提

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恢复误删库表数据的文章就介绍到这了,更多相关Mysql恢复误删库表数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 8种手动和自动备份MySQL数据库的方法

    8种手动和自动备份MySQL数据库的方法

    作为流行的开源数据库管理系统,MySQL的使用者众多,为了维护数据安全性,数据备份是必不可少的。本文就为大家介绍几种适用于企业的数据备份方法,需要的朋友可以参考下
    2018-10-10
  • pymysql.err.DataError:(1264, ")异常的有效解决方法(最新推荐)

    pymysql.err.DataError:(1264, ")异常的有效解决方法(最新推荐)

    遇到pymysql.err.DataError错误时,错误代码1264通常指的是MySQL数据库中的Out of range value for column错误,这意味着你尝试插入或更新的数据超过了对应数据库列所允许的范围,这篇文章主要介绍了pymysql.err.DataError:(1264, ")异常的有效问题,需要的朋友可以参考下
    2024-05-05
  • MySQL主从复制配置心跳功能介绍

    MySQL主从复制配置心跳功能介绍

    这篇文章主要介绍了MySQL主从复制配置心跳功能介绍,解决Slave has read all relay log; waiting for the slave I/O thread to update it问题,需要的朋友可以参考下
    2014-06-06
  • mysql的事务,隔离级别和锁用法实例分析

    mysql的事务,隔离级别和锁用法实例分析

    这篇文章主要介绍了mysql的事务,隔离级别和锁用法,结合实例形式分析了MySQL事务,隔离级别和锁相关原理、用法及操作注意事项,需要的朋友可以参考下
    2020-02-02
  • 解决ERROR 1129 (HY000): Host ‘xxx‘ is blocked because of many问题

    解决ERROR 1129 (HY000): Host ‘xxx‘ is blocked because 

    这篇文章主要介绍了解决ERROR 1129 (HY000): Host ‘xxx‘ is blocked because of many问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 图文详解Ubuntu下安装配置Mysql教程

    图文详解Ubuntu下安装配置Mysql教程

    这篇文章主要以图文结合的方式详细为大家介绍了Ubuntu安装配置Mysql的实现步骤,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 关于com.mysql.jdbc.Driver与com.mysql.cj.jdbc.Driver的区别

    关于com.mysql.jdbc.Driver与com.mysql.cj.jdbc.Driver的区别

    这篇文章主要介绍了关于com.mysql.jdbc.Driver与com.mysql.cj.jdbc.Driver的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL中delimiter关键字的使用解读

    MySQL中delimiter关键字的使用解读

    这篇文章主要介绍了MySQL中delimiter关键字的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • MySQL如何修改密码过期时间

    MySQL如何修改密码过期时间

    MySQL修改密码过期时间的方法,包括修改my.ini文件、设置账号过期时间、查看过期时间和账号状态,并在修改后重启服务和密码
    2025-02-02
  • Windows Server 2003 下配置 MySQL 集群(Cluster)教程

    Windows Server 2003 下配置 MySQL 集群(Cluster)教程

    这篇文章主要介绍了Windows Server 2003 下配置 MySQL 集群(Cluster)教程,本文先是讲解了原理知识,然后给出详细配置步骤和操作方法,需要的朋友可以参考下
    2015-06-06

最新评论