MYSQL数据库数据丢失恢复思路简述(无binlog)

前言:本文仅提供恢复思路,不涉及恢复的具体算法细节。适用于使用innodb引擎的数据库实例,黑客勒索加密/删除数据库、误操作删除数据库以及误操作删除数据记录,同时未开启binlog日志的情况。

一、故障环境保护

1、当误操作使用delete或truncate命令删除表中的数据记录后,尽可能第一时间关闭数据库服务,丢失数据的表不要再有数据写入,避免造成丢失的记录数据被覆盖破坏,导致无法恢复。
2、当遇到黑客勒索或误操作,删除了表或者整个数据库(drop table或者drop database)时,这个时候表相关的.ibd表空间文件或全部数据库空间文件会被删除,数据释放到磁盘上,一定要注意,整个磁盘分区上面不要再有写入操作,不要再自行操作还原旧的备份。整个磁盘分区上,一旦有新的数据写入,将造成数据被彻底破坏无法恢复。

二、数据恢复思路

1、数据记录删除(delete、truncate)

使用delete或truncate语句删除表中的数据后,相关的.ibd表空间文件并没有释放,文件还存在,此时被删除的数据还存在于表空间文件中,只是此数据的一些信息被修改,从数据库中屏蔽了。
测试数据
测试数据

上图中为测试表中存在的一条数据,使用delete命令删除此条数据后,表空间中情况如下
测试数据
测试数据
由此可见,delete命令删除后的数据,实际还是存在在.ibd表空间文件中的,可以从表空间页中的删除记录入口,获取被删除屏蔽的数据记录的偏移地址,从而恢复被删除的数据记录。

2、表或数据库删除(drop table、drop database)

使用drop语句删除表或者数据库后,表相关的.ibd数据文件也会被全部删除。若数据库所在的系统环境为windows操作系统,可尝试使用windows数据恢复软件,恢复.ibd数据文件;当系统环境为linux操作系统时,一般数据文件都无法直接恢复,需要进行数据库碎片扫描,并导出其中的数据记录来恢复。
测试数据

mysql数据库中默认数据页大小为16K,上图中即为一个mysql的数据库页,可根据页校验参数、infimum、supremum等相关标志性信息,扫描磁盘分区的闲置空间,得到所有丢失的数据库页数据,同时依据数据页中的表空间id参数,对扫描到的数据库页数据进行区分,结合相应的表结构,从数据页中抓取导出正确的数据记录,将数据整理成insert语句后,导入到新的数据库表中,完成mysql数据库数据的恢复。

扫描数据碎片

在这里插入图片描述
注意通过碎片扫描方式恢复mysql数据库,一定要有正确的表结构,如果没有表结构留存或表结构与实际扫描到的数据碎片中的结构有差异,都会导致数据无法恢复。

数据库被删除不要着急跑路,有需要私信或留言,我来助你力挽狂澜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLbinlog是一种二进制日志文件,用于记录数据库的修改操作。当数据库出现故障时,可以通过binlog来进行数据恢复MySQL提供了多种工具来进行binlog数据恢复。其中最常用的工具是mysqlbinlogmysqlbinlog是一个命令行工具,用于解析binlog文件,并将其中的SQL语句打印出来。通过mysqlbinlog,可以将binlog中记录的SQL语句重新执行,从而实现数据恢复。 使用mysqlbinlog进行数据恢复的步骤如下: 1. 找到事故发生时的最新的binlog文件和位置。 2. 使用mysqlbinlog命令解析binlog文件: ```shell mysqlbinlog binlog.000001 --start-position=12345 ``` 这将会将binlog文件中从指定位置开始的所有SQL语句输出到终端。 3. 检查输出的SQL语句,确认其正确性,并逐条重新执行,以恢复数据。 除了mysqlbinlog工具外,还有其他一些第三方的工具可以进行binlog数据恢复。例如,Binlog Explorer、Binlog Viewer等工具提供了更加友好的图形界面,方便操作和查看binlog文件。 需要注意的是,在使用binlog进行数据恢复时,要确保事故发生后的binlog文件没有被删除或覆盖,否则无法完全恢复数据。另外,对于大规模的数据库binlog数据恢复可能比较耗时和复杂,需要谨慎操作。 总而言之,mysqlbinlog是一种常用的binlog数据恢复工具,通过解析binlog文件中的SQL语句,可以重新执行这些SQL语句以恢复数据。此外,还有其他一些第三方工具可供选择。在进行binlog数据恢复时,需要注意保留好binlog文件,并进行逐条确认和执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值