早上起来被告知昨晚误删除了3个mysql的文件,只能恢复了

这是删除前的文件信息:

wKioL1axa3SyzCq8AAATZMF9_Wc943.png

首先lsof查看进程:

wKioL1axa8Th9xHzAABLZD0uUb4052.png

这里PID都是一样的,下面进入proc里ls -l查看:

# cd /proc/8784/fd/

wKiom1axbDeiUsmAAABEF3Dg4rA544.png

这里可以看到ibdata1删除的信息了

接着直接cp复制

#cp 4 /tmp/ibdata1.bak

其余的2个同理恢复,下面是恢复后的文件:

wKiom1axbJTQQ7cFAAAWgYnvrew121.png

+++++++++++++++++++++++++++++++++++++++++++++

虽然恢复了,但是事情绝对没有这么简单!!!

因为,在innodb的buffer pool中,有许多dirty page(就是内存中的数据已经被修改,但是没有写回文件中),如果直接把文件复制回去,轻则数据丢失,重则ibdata1文件损坏。

我们必须保证所有buffer pool中的数据修改都保存到了硬盘文件上面,然后在恢复文件。