從mysqldump整庫備份文件中恢復單表


最近,系統更新出現了問題,比較緊急,需要對三張表進行回檔。由於我們都是采用mysqldump進行每天全備整庫,數據量比較大,一個備份文件大概有70G,需要從這個70G文件中恢復三張表,真是蛋疼至極啊,搞了整整一個下午,下面就介紹下具體操作。

1、采用grep查找:由於mysqldump文件導出的是insert into ...values(),(),()...這種形式,其實多行都是屬於一行文本的。

 cat fullbk20151108031001 | grep --ignore-case  'insert into `t_user`' > user.sql

結果:15G大小的文件大概2小時之類能夠搞定,但是對於70G的文件,遲遲沒有結果,干着急啊,於是乎,就想換個命令吧。希望能快點

2、采用sed命令:

sed -n '/INSERT INTO `t_user_pve_ranking`/p' fullbk20151108031001

又等了好久,還是沒有出結果啊,坐不住了,開發開始深深的鄙視我們了,最后,死馬當活馬醫吧,把這個70G大文件切分成多個小文件,然后在小文件中進行sed:

3、采用split切分大文件方法:

    split [參數選項] infile [outfile]

  split 把輸入的文件拆分為若干體積或長度相等的文件,輸入文件保持不變,只是把結果拆分結果寫到outfileaa、outfileab ... ... 等文件中。如果我們不指定outfile,被拆分后的文件會寫到 xaa、xab ... ...。
    常用參數:

        -l n 把infile拆分為具有n行的段,默認值為1000

        -b n[bkm] 以體積為單位的拆分,約定每拆分后每個文件的大小 ,b代表512B,k代表1KB,m代表1MB。

        -C bytes[bkm] 把bytes的最大值放入文件,堅持增加完整的行;
#按1000行一個文件進行切分,最好在后台運行
split
-l 1000 fullbk20151108031001 &

然后在通過sed命令進行一個一個文件查找:

sed -n '/INSERT INTO `t_user_pve_ranking`/p' aaa
sed -n '/INSERT INTO `t_user_pve_ranking`/p' bbb
........

這樣,每個小文件查找很快,這里可以寫個shell腳本,循環遍歷的。

最后通過這種方法找到了表。簡直就是坑爹啊,我不知道還有其他更好的方式了,反正mysqldump備份大庫恢復指定表很慢很慢的,強烈建議使用innobackupex,我測試了也就半個小時就可以搞定了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM