从mysqldump整库备份文件中恢复单表
最近,系統(tǒng)更新出現(xiàn)了問(wèn)題,比較緊急,需要對(duì)三張表進(jìn)行回檔。由于我們都是采用mysqldump進(jìn)行每天全備整庫(kù),數(shù)據(jù)量比較大,一個(gè)備份文件大概有70G,需要從這個(gè)70G文件中恢復(fù)三張表,真是蛋疼至極啊,搞了整整一個(gè)下午,下面就介紹下具體操作。
1、采用grep查找:由于mysqldump文件導(dǎo)出的是insert into ...values(),(),()...這種形式,其實(shí)多行都是屬于一行文本的。
cat fullbk20151108031001 | grep --ignore-case 'insert into `t_user`' > user.sql結(jié)果:15G大小的文件大概2小時(shí)之類能夠搞定,但是對(duì)于70G的文件,遲遲沒(méi)有結(jié)果,干著急啊,于是乎,就想換個(gè)命令吧。希望能快點(diǎn)
2、采用sed命令:
sed -n '/INSERT INTO `t_user_pve_ranking`/p' fullbk20151108031001又等了好久,還是沒(méi)有出結(jié)果啊,坐不住了,開(kāi)發(fā)開(kāi)始深深的鄙視我們了,最后,死馬當(dāng)活馬醫(yī)吧,把這個(gè)70G大文件切分成多個(gè)小文件,然后在小文件中進(jìn)行sed:
3、采用split切分大文件方法:
??? split [參數(shù)選項(xiàng)] infile [outfile]
split 把輸入的文件拆分為若干體積或長(zhǎng)度相等的文件,輸入文件保持不變,只是把結(jié)果拆分結(jié)果寫到outfileaa、outfileab ... ... 等文件中。如果我們不指定outfile,被拆分后的文件會(huì)寫到 xaa、xab ... ...。
??? 常用參數(shù):
??????? -l n 把infile拆分為具有n行的段,默認(rèn)值為1000
??????? -b n[bkm] 以體積為單位的拆分,約定每拆分后每個(gè)文件的大小 ,b代表512B,k代表1KB,m代表1MB。
-C bytes[bkm] 把bytes的最大值放入文件,堅(jiān)持增加完整的行; #按1000行一個(gè)文件進(jìn)行切分,最好在后臺(tái)運(yùn)行split -l 1000 fullbk20151108031001 &
然后在通過(guò)sed命令進(jìn)行一個(gè)一個(gè)文件查找:
sed -n '/INSERT INTO `t_user_pve_ranking`/p' aaa sed -n '/INSERT INTO `t_user_pve_ranking`/p' bbb........
這樣,每個(gè)小文件查找很快,這里可以寫個(gè)shell腳本,循環(huán)遍歷的。
最后通過(guò)這種方法找到了表。簡(jiǎn)直就是坑爹啊,我不知道還有其他更好的方式了,反正mysqldump備份大庫(kù)恢復(fù)指定表很慢很慢的,強(qiáng)烈建議使用innobackupex,我測(cè)試了也就半個(gè)小時(shí)就可以搞定了。
轉(zhuǎn)載于:https://www.cnblogs.com/mysql-dba/p/4958612.html
總結(jié)
以上是生活随笔為你收集整理的从mysqldump整库备份文件中恢复单表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 详细解读Jquery各Ajax函数:$.
- 下一篇: 创建查看修改数据库及数据表