2010-08-29 135 views
15

我有一個與5數據庫的MySQL轉儲,並想知道是否有一種方法只導入其中一個(使用mysqldump或其他)。如何從包含多個數據庫的mysqldump恢復一個數據庫?

建議感激。

+0

我不認爲有。導入所有的數據庫,並刪除除了你想保留的那一個以外的所有數據庫是你能做的最好的事情 - 但你永遠不知道,也許有人想出了一些東西 – 2010-08-29 20:22:30

回答

15

您可以通過sed管道轉儲的SQL並讓它爲您提取數據庫。類似:

cat mysqldumped.sql | \ 
sed -n -e '/^CREATE DATABASE.*`the_database_you_want`/,/^CREATE DATABASE/ p' | \ 
sed -e '$d' | \ 
mysql 

兩個sed命令:

  1. 僅打印CREATE DATABASE線(包括CREATE DATABASE線)之間的匹配線,和
  2. 刪除從所述最後CREATE DATABASE線輸出,因爲我們不希望mysqld創建第二個數據庫。

如果您的轉儲不包含CREATE DATABASE行,則還可以匹配USE行。

+0

在一行中,使用'-u'和'-p'選項: 'cat all-databases.sql | sed -n -e'/^CREATE DATABASE。* \'the_database_you_want \'/,/^CREATE DATABASE/p'| sed -e'$ d'| mysql -u my_username -p「 – 2013-12-05 20:26:37

27

您可以使用mysql命令行--one-database選項。

當然,當你這樣做的時候要小心。您可以使用mysql dumpsplitter

+0

我試過這個,但總是得到錯誤「ERROR 1049 (42000):未知數據庫'redmine'「。該文檔指出:「這對跳過對二進制日誌中其他數據庫的更新很有用。」這不是一個二進制日誌(我認爲),所以它不會工作。 – 2010-08-29 23:09:11

+1

我發現了一個與此功能相關的有趣的錯誤報告:http://bugs.mysql.com/bug.php?id=40477 – 2010-08-29 23:16:40

+1

@ThePixelDeveloper:一個空的數據庫需要先存在,然後才能正常工作。 – 2012-09-12 12:20:45

相關問題