在實際工作中,一個MySQL實例中可能有多個database。而我們備份時,通常采用完全備份,將所有database都備份到一個文件中。
但是,偶爾會遇到只恢復一個database或者一個表的情況。怎么解決呢?
一、利用全備恢復一個庫(database)的數據
案例:朋友在群里問, MySQL全庫備份。如何只恢復一個庫?
1、采用--one-database 選項。使用該命令前提是 all_db.sql 中的所有數據庫都在Mysql數據庫中有存在。不建議使用該方式,經常出現問題。
mysql -uroot -pxx -D db1 -o < all_db.sql
2、從全備份文件中將需要的庫的建表語句和INSERT數據拿出來,然后再導入
sed -n '/^-- Current Database: `db1`/,/^-- Current Database: `/p' all.dmp > db1.sql
mysql -uroot -pxx -D db1 < db1.sql
二、利用全備恢復一個表(table)的數據
那么如何從全庫備份中抽取某張表呢,全庫恢復,再恢復某張表小庫還可以,大庫就很麻煩了,那我們可以利用正則表達式來進行快速抽取,具體實現方法如下:
從全庫備份中抽取出t表的表結構
sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `t