昨天端午,晚上的時候接了一個電話,我朋友的公司,數據庫被兩個工作沒多久的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 沒有經常用,還查了下資料,當然思路也是最重要的,解決問題,第一個,要有一個清析的思路,把整個過程,好好過幾下,要不然,考濾不全,會造成更多的問題