昨天端午,晚上的时候接了一个电话,我朋友的公司,数据库被两个工作没多久的phper给弄坏了,具体就是把一个字段值,给全表弄成一个了名字了,当然这个是可以配置了禁止全表更新数据库,这下可急坏了,找到我,叫我给看一下,他们每天3:00是有备份的,按天备份,还好不是增量的,当然binlog日志也是开启的,我看了一下他们的备份文件是
[root@AY1406121449173218ccZ ~]# ls -lha /www/datebak/2016-06-09.sql -rw-r--r-- 1 root root 4.9G Jun 9 03:03 /www/datebak/2016-06-09.sql [root@AY1406121449173218ccZ ~]#
他们整个备份文件有5G,当然恢复的效果有多种,我想了一下,把他们今天这一整天的注册的用户给弄出来,也没有多少就10多个,然后就是想办法在这5个G的数据中把我需要的表找出来。
[root@AY1406121449173218ccZ datebak]# grep -n "ROP TABLE IF EXISTS `activity`" 2016-06-09.sql -bash: activity: command not found 22:DROP TABLE IF EXISTS `activity`; 67:DROP TABLE IF EXISTS `activity_img`; 93:DROP TABLE IF EXISTS `activity_recommended`; 124:DROP TABLE IF EXISTS `atest`; 149:DROP TABLE IF EXISTS `black_user`; 175:DROP TABLE IF EXISTS `category`; 204:DROP TABLE IF EXISTS `class_grade`; 232:DROP TABLE IF EXISTS `collocate_banner`; 262:DROP TABLE IF EXISTS `course`; 330:DROP TABLE IF EXISTS `edu_account_bind`; 366:DROP TABLE IF EXISTS `function`; 392:DROP TABLE IF EXISTS `head_img`; 418:DROP TABLE IF EXISTS `information`; 455:DROP TABLE IF EXISTS `information_img`; 480:DROP TABLE IF EXISTS `installed_app`;
通过 shell的 grep 这个命令,我们可以找出我们需要的表中的行数
sed -n '5112,5153p' 2016-06-09.sql > tb_user_info.sql
再通过sed 命令将我们找到的行号写入另一个文件中,这样,基本就解决了,然后,把我导出来的数据 给导入原来的数据中,然后再将导出的一天的数据给导入,就解决了问题,整个解决问题的时间,没有超 过1小时,主要是shell 没有经常用,还查了下资料,当然思路也是最重要的,解决问题,第一个,要有一个清析的思路,把整个过程,好好过几下,要不然,考滤不全,会造成更多的问题
时间: 2024-11-10 12:51:37