如何從完整的MySQL DB轉(zhuǎn)儲文件中提取表備份

mysqldump是mysql/mariadb為備份數(shù)據(jù)庫和表提供的實用程序。一般來說,我們會定期對數(shù)據(jù)庫進行完整的轉(zhuǎn)儲并保存。但有時我們需要從備份中恢復(fù)單個或兩個表。問題是如何從完整備份文件中恢復(fù)特定表?本篇文章將介紹從完整的數(shù)據(jù)庫備份文件中提取表備份。此外,我們還可以在每個表中提取單個文件中的所有表備份。

如何從完整的MySQL DB轉(zhuǎn)儲文件中提取表備份

第1步:下載MySQL dump拆分腳本

在單獨的表特定文件備份中拆分完整的mysqldump數(shù)據(jù)庫備份文件。創(chuàng)建一個名為splitdb.sh的文件,并在其中復(fù)制下面的腳本。

#!/bin/bash  #### #?Split?MySQL?dump?SQL?file?into?one?file?per?table #?based?on?http://blog.tty.nl/2011/12/28/splitting-a-database-dump ####  if?[?$#?-lt?1?]?;?then ??echo?"USAGE?$0?DUMP_FILE?[TABLE]" ??exit fi  if?[?$#?-ge?2?]?;?then ??csplit?-s?-ftable?$1?"/--?Table?structure?for?table/"?"%--?Table?structure?for?table?`$2`%"?"/--?Table?structure?for?table/"?"%40103?SET?TIME_ZONE=@OLD_TIME_ZONE%1" else ??csplit?-s?-ftable?$1?"/--?Table?structure?for?table/"?{*} fi  [?$??-eq?0?]?||?exit  mv?table00?head  FILE=`ls?-1?table*?|?tail?-n?1` if?[?$#?-ge?2?]?;?then ??mv?$FILE?foot else ??csplit?-b?'%d'?-s?-f$FILE?$FILE?"/40103?SET?TIME_ZONE=@OLD_TIME_ZONE/"?{*} ??mv?${FILE}1?foot fi  for?FILE?in?`ls?-1?table*`;?do ??NAME=`head?-n1?$FILE?|?cut?-d$'x60'?-f2` ??cat?head?$FILE?foot?>?"$NAME.sql" done  rm?head?foot?table*

第2步:從dump中提取所有表

對于這個例子,有一個名為mydb.sql的轉(zhuǎn)儲文件,要想在每個表的小備份中拆分。為此,需要創(chuàng)建了一個新目錄/ opt / splitdb,并在此目錄中復(fù)制了名為splitDB.sh的腳本。現(xiàn)在使用以下命令提取單個備份文件中的所有表。

#cd?/?opt?/?splitdb? #sh?splitDB.sh?mydb.sql

第3步:從dump中提取單個表

如果我們只想提取一個表,我們可以使用如下命令。例如,要想只拆分名為my_tbl1和my_tbl2的表。它將在當前目錄中提取名為my_tbl1.sql和my_tbl2.sql的備份。

#cd?/?opt?/?splitdb? #sh?splitDB.sh?mydb.sql?my_tbl1? #sh?splitDB.sh?mydb.sql?my_tbl2

本篇文章到這里就已經(jīng)全部結(jié)束了,更多其他精彩內(nèi)容可以關(guān)注php中文網(wǎng)的MySQL教程視頻欄目!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享