課時7-備份與恢復----從dump檔案中找出單個表的資訊

小亮520cl發表於2015-11-24
獲取單表:
原文地址
https://blog.tsheets.com/2008/tips-tricks/extract-a-single-table-from-a-mysqldump-file


法1:perl extract_sql.pl -t mytable -r mydumpfile > mytable.sql
法2:cat test1db.sql | sed -n '/Table structure for table .test1./,/Table structure for table .test2./p'>/tmp/xxx.sql   ----列印test1與test2之間的內容
法3:awk '/Table structure for table .test1./,/Table structure for table .test2./{print}' test1db.sql    ----列印test1與test2之間的內容


獲取多表:



  1. 這裡介紹一個最近用得很多的一個小工具:。

    主要有兩個功能:

    (1) 儘可能快的從一個非常大的mysqldump檔案的分離出某個單表的備份檔案

    (2) 可以幫你把一個大的mysqldump檔案,切割成非常小的單表備份檔案(可繼續做並行恢復)

    1. 什麼時候需要這麼做

    (1) 如果把MySQL中某一個表資料弄丟了,需要從很大的mysqldump備份檔案中恢復這個表

    (2) 如果你想並行恢復整個mysqldump備份檔案時,這個指令碼可以幫你把大檔案切割成多個小的單表備份檔案,然後就可以方便並行恢復多個檔案了

    2. 如何使用這個指令碼

    這裡以例項的方式介紹如何使用該指令碼:

    (1) 從backup.sql檔案中獲取表process的備份:

    tbdba-restore-mysqldump.pl -t process -f backup.sql

    (2) 從backup.sql檔案中獲取資料庫monitor中的表process的備份:

    tbdba-restore-mysqldump.pl -t process -s monitor -f backup.sql

    (3) 從backup.sql檔案中獲取多個表的備份檔案(例如表process、users):

    tbdba-restore-mysqldump.pl -t process,user -s monitor -f backup.sql

    (4) 直接接收來自管道的輸出(如果你的mysqldump備份是壓縮後,則可以使用):

    gunzip -c backup.sql.gz|tbdba-restore-mysqldump.pl -t process,user -s monitor

    (5) 從backup.sql檔案中獲取資料庫monitor下所有表的備份檔案:

    gunzip -c backup.sql.gz|tbdba-restore-mysqldump.pl -s monitor

    (6) 從backup.sql檔案中獲取所有資料庫下所有表的備份檔案:

    gunzip -c backup.sql.gz|tbdba-restore-mysqldump.pl --all-tables

    (7) 使用-d引數,則可以看到切割的過程中的更多資訊:

    date && gunzip -c /backdir/backup.sql.gz|tbdba-restore-mysqldump.pl -d -a && date
    3. tbdba-restore-mysqldump.pl有什麼優勢

    (1) 如果指定了-s(獲取某個資料庫中的備份)引數,則指令碼在成功擷取需要恢復的後就會立刻退出,所以如果你要恢復的表恰好在備份檔案的比較靠前的位置時,該指令碼的速度會非常快。

    一個實際工作例子:

    $ls -lh backup.sql.gz
    -rw-r--r-- 1 mysql dba 14G Nov 21 04:49 backup.sql.gz
    $date && gunzip -c backup.sql.gz|./tbdba-restore-mysqldump.pl -s monitor_general -t monitor_host_info && date
    Fri Nov 25 14:35:06 CST 2011
    Fri Nov 25 14:46:49 CST 2011
    (the unzip of backup.sql.gz is 88G)

    如果要全量恢復的話,根據經驗值:88GB的sql檔案完全恢復約需要400分鐘()。

    (2) 為了讓每個獨立的單表備份檔案能夠準確恢復,指令碼做了兩個額外的處理工作:在每個單表備份前加上'use db',讓該表能夠恢復到正確的資料庫;為了讓單表恢復時字符集不出錯誤,指令碼在某個單表備份前加上了對應的SET NAMES utf8、SET TIME_ZONE等命令。

指令碼連結


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1845115/,如需轉載,請註明出處,否則將追究法律責任。

相關文章