從mysqldump整庫備份檔案中恢復單錶

2022-08-02 13:51:13 字數 1328 閱讀 6052

最近,系統更新出現了問題,比較緊急,需要對三張表進行回檔。由於我們都是採用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,我測試了也就半個小時就可以搞定了。

Oracle 備份整庫

echo off color 0b cls echo echo 設定備份檔案存放資料夾.echo set tbuf c oraclebackup if not exist tbuf mkdir tbuf echo echo 設定備份檔案名 以星期幾命名,即備份檔案只儲存最近一周 echo set n...

mysqldump 資料庫備份

mysqldump客戶端可用來轉儲資料庫或蒐集資料庫進行備份,轉儲包含建立表和 或裝載表的sql語句。適用於innodb引擎的資料庫。有3種方式來呼叫mysqldump 1 mysqldump options db name tables 2 mysqldump options database d...

Oracle 整庫備份還原

sql語句 system使用者登陸 檢視表空間和存放位置 select t1.name,t2.name from v tablespace t1,v datafile t2 where t1.ts t2.ts 檢視所有表空間的大小 select tablespace name,sum bytes 1...