51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

linux 恢复误删数据 (使用ext4magic恢复数据)

1、事情起因

客户为了清理磁盘空间,误删除mysql的ibdata1和ib_logfile文件,但删除后,空间并没有释放。

首先从数据库的进程入手,看看进程所处的状态,在系统的/proc下有每个进程的运行状态,简单

执行几个命令:

[root@localhost ~]# ps -ef|grep mysqld|awk '{print $1,$2}'|grep mysql

mysql 4070

[root@localhost ~]# ll /proc/4070/fd|grep -e ibdata -e ib_

lrwx------ 1 root root 64 3月 21 16:51 3 -> /usr/local/mysql/data/ib_logfile0 (deleted)

lrwx------ 1 root root 64 3月 21 16:51 8 -> /usr/local/mysql/data/ib_logfile1 (deleted)

lrwx------ 1 root root 64 3月 21 16:51 9 -> /usr/local/mysql/data/ibdata1 (deleted)

可以看到,被删除的三个文件ibdata1、ib_logfile0、ib_logfile1在内存中已经标记为deleted了,可见文件

确实是被删除了。

mysqld在运行状态下,会保持ibdata1、ib_logfile0、ib_logfile1这些文件为打开状态,即使把

它们删除了,它们仍旧存在于内存文件系统中,所以,mysqld仍然可以对其进行读写。只要mysqld

服务不重启,就可以通过proc文件系统找到这几个被删除的文件。

这也解释了为何删除这三个文件后,磁盘空间却没有释放的原因。

要恢复mysql数据,首先需要停止目前的写入、更新、删除等操作,最后才能拷贝文件,如何操作

呢,可执行下面几个SQL:

mysql>FLUSH TABLES WITH READ LOCK;

或者干脆断开此数据库服务器的网络

3、恢复被删除的文件

在数据库没有任何写入后,就可以恢复ibdata1、ib_logfile0、ib_logfile1这些文件了,执行如

下操作:

[root@localhost ~]# cp /proc/4070/fd/8 /usr/local/mysql/data/ib_logfile1

[root@localhost ~]# cp /proc/4070/fd/9 /usr/local/mysql/data/ibdata1

[root@localhost ~]# cp /proc/4070/fd/3 /usr/local/mysql/data/ib_logfile0

接着,修改文件权限为mysql,操作如下:

[root@localhost ~]# chown mysql:mysql /usr/local/mysql/data

所有操作完成后,最后,还需要重启下数据库服务:

[root@localhost ~]# /etc/init.d/mysqld restart

{#more-13184}

今天要分享给大家的数据恢复工具是ext4magic,对于ext4数据恢复支持

非常强大的。可以做到基于时间点、inode、指定文件恢复等等。恢复时

需要卸载分区,或以只读方式挂载恢复。

1、安装ext4magic

这里我们使用centos7.9系统,误删除磁盘分区格式为ext4,进行案例演示。对于已删除

的ext3文件系统,推荐使用ext4magic-0.2.4。对于已删除的ext4文件系统,请使用

ext4magic-0.3.0。

ext4magic的安装包,我已经放在系统镜像盘的/data/day4目录下,使用rpm包快速安装。

[root@dbserver1 ~]# rpm -ivh ext4magic-0.3.2-3.10.x86_64.rpm

[root@dbserver1 ~]# ext4magic -V

2、使用ext4magic恢复数据

这里加入误删除文件所在的分区为/dev/sda7,第一步,执行打印输出删除目录的Inode

[root@dbserver1 ~]# ext4magic /dev/sda7 -f /

[root@dbserver1 ~]# ext4magic /dev/sda7 -I 2

上面两个命令实现的功能一样。接着,就可以进行恢复删除的文件了,可以恢复整个磁盘分区的所

有文件,也可以仅恢复被删除的文件。

如果仅恢复误删除的文件和目录,可执行如下操作:

[root@dbserver1 ~]# ext4magic /dev/sda7 -r -d /backup/data

[root@dbserver1 ~]# ext4magic /dev/sda7 -m -d /backup/data

上面两条命令实现的功能一样,仅恢复误删除的文件或目录。

注意,-d是指定恢复后文件存储路径,此路径建议是一个独立的磁盘分区,并且磁盘空间一定要大,至少大于

要恢复的数据所占用的磁盘空间大小。

2、使用ext4magic恢复数据

几个重点参数选项,总结如下:

-r:恢复目录树,恢复已删除文件

-R:恢复已删除和未删除文件,空文件也恢复,完全恢复目录。

如果磁盘分区所有数据被删除,那么" -R "和" -r "作用是相同的。

此外,跟-R、-r选项相同功能的还有-M、-m选项:

-m:恢复已删除文件,空文件也恢复

-M:恢复已删除和未删除文件,全盘恢复情况下使用。

最后,ext4magic还可以根据时间点进行恢复,例如,恢复一天内的数据,执行如下命令:

[root@dbserver1 ~]# ext4magic /dev/sda7 -a $(date -d "-1 day" +%s) -b $(date -d "-0 day" +%s) -m

如果不指定恢复数据的路径,那么会在当前目录下自动创建RECOVERDIR,恢复数据会放到此目录下。

给运维的启示

(1)、备份不是万能的,但是没有备份是万万不行的。

(2)、运维要有充足的知识储备,执行每条命令都要能做到"知其然知其所以然"。

(3)、避免"人肉运维" ,DevOps模式可以避免人工失误。

赞(0)
未经允许不得转载:工具盒子 » linux 恢复误删数据 (使用ext4magic恢复数据)