天天看点

记一次Linux服务器 误删数据的恢复操作所有线上服务器,数据库一定要每天凌晨定一个时间段进行备份,不然后果真的会很严重1.先查找binlog2.备份binlog文件,以便恢复数据操作使用3.binlog文件导出成一份sql文件4.恢复数据到数据库

今天把自己的一个服务器的数据 误操作删除了一个重要的数据表,心想,嗯,真特么的想扇自己个耳光,哈哈哈

好,事不宜迟,进入正文

事情是这样的。我执行了TRUNCATE操作,导致表清空了,那么静下心来想

所有线上服务器,数据库一定要每天凌晨定一个时间段进行备份,不然后果真的会很严重

好了,正文继续

1.先查找binlog

命令行输入 

mysql -uroot -p
           

进入mysql命令行后输入

show master status
           
记一次Linux服务器 误删数据的恢复操作所有线上服务器,数据库一定要每天凌晨定一个时间段进行备份,不然后果真的会很严重1.先查找binlog2.备份binlog文件,以便恢复数据操作使用3.binlog文件导出成一份sql文件4.恢复数据到数据库

这里能看到有一个binlog文件了,那么我们下面接下来的操作都是跟这个文件有关的,但是这个作为原始文件,不能执行,因为线上服务器随时都会产生新数据,会改变binlog文件,所以我们应该copy一份出来  那么不知道这个文件在哪里怎么办呢?这时候find命令就非常有用了,这时候就不要在mysql命令行里操作了

find / -type f -name mysql-bin.000005
           

2.备份binlog文件,以便恢复数据操作使用

这样我们就能找到我们这个log文件的位置 然后我们复制一份到根目录下,方便后续操作

cp /www/server/data/mysql-bin.000005 ~/
           

根据自己的路径操作就好,然后我们就得到这个备份的文件了

这里插一个自己的小插曲,之前是想直接操作binlog文件,把错误节点的那句  TRUNCATE语句删除,然后重新导入这份binlog去恢复的,但是发现这个问题

记一次Linux服务器 误删数据的恢复操作所有线上服务器,数据库一定要每天凌晨定一个时间段进行备份,不然后果真的会很严重1.先查找binlog2.备份binlog文件,以便恢复数据操作使用3.binlog文件导出成一份sql文件4.恢复数据到数据库

就提示第一行的问题,这个很明显是提示我编码格式的问题,然后前前后后折腾了1个小时去尝试解决这个问题,发现都没用,后来想我可以使用binlog命令导出一份sql文件去操作,应该就能解决,所以我的第三部是

3.binlog文件导出成一份sql文件

mysqlbinlog /www/server/mysql/mysql-bin.000005 > ~/005.sql
           

通过这个命令导出一份sql文件到根目录,这时候我们回到mysql命令行,输入

show binlog events\G
           

这时候就能看到我们最后操作的节点了

记一次Linux服务器 误删数据的恢复操作所有线上服务器,数据库一定要每天凌晨定一个时间段进行备份,不然后果真的会很严重1.先查找binlog2.备份binlog文件,以便恢复数据操作使用3.binlog文件导出成一份sql文件4.恢复数据到数据库

然后打开刚刚导出的005.sql文件我们把27722后面的操作都删除掉,重新保存一下

4.恢复数据到数据库

最好是建立一个新的数据库来恢复备份的数据,然后新库跟旧库做一个同步,以免新数据被覆盖,但是这是因为这是我自己的服务器,我是关闭了网站操作的,所以数据都是比较固定,不怕出问题,接下来进入mysql命令行  输入

source ~/005.sql
           

然后一堆神奇的sql代码过后,在查看数据库 发现,咦!数据回来了!

数据库恢复数据是万不得已的操作,所以每次删数据清空数据库的时候最好都是先备份一份再操作,还有一定每天都要备份一份数据库数据,以免造成不必要的损失

最后写这份博客更多的是提醒自己不要再误操作,不备份数据库了

继续阅读