2012-01-26 30 views
15

我用下面的命令備份我的生產數據庫:MySQL的恢復到不同的數據庫

mysqldump -u root --opt --skip-extended-insert --databases my_production_db 

生成的轉儲文件具有接近頂部以下行:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `my_production_db` /*!40100 DEFAULT CHARACTER SET latin1 */; 
USE `my_production_db `; 

爲了恢復數據庫到不同的目的地即。 my_debvelopment_db我必須打開轉儲文件並編輯數據庫命名的位。

然後我運行:

mysql -u root -p <password> < mydumpfile 

我還沒有想出另一種方式來做到這一點。

隨着數據庫變大,這變得不切實際。

我錯過了什麼嗎?無論如何,我不知何故指定我想恢復數據庫的位置?我需要一個不同的備份命令嗎?

回答

9

如果刪除選項--databases但仍指定數據庫名稱,則不會獲得create database語句。即:

mysqldump -u root --opt --skip-extended-insert my_production_db 

在你的開發機器上,只需創建任何你想要恢復的數據庫。

+2

即使沒有'--databases'選項,似乎'mysqldump'仍可能會在轉儲中生成對數據庫名稱的引用。至少我在數據庫轉儲中遇到了一些'ALTER DATABASE \'dbname \'CHARACTER SET utf8 COLLATE utf8_bin'的問題,而不使用'--databases'選項。其中有兩個,第二個覆蓋第一個。 – Hibou57

41

@minaz答案很好,但我想追加一點點。

問題是由--databases關鍵字引起的。如果您省略關鍵字,則不會包含任何數據庫創建內容。

所以,轉儲沒有--databases關鍵字。

mysqldump -u username -p database_name > dump.sql 

然後用目標數據庫名稱恢復它。

mysql -u username -p target_database_name < dump.sql 

此外,還有幾種方法可以做到這一點。請參閱here(dba.stackexchange)上的類似問題。

+0

我相信'-p database_name'出現錯誤,因爲'-p'選項名是'--password'選項的簡稱。 – Hibou57

+10

@ Hibou57感謝您的評論。是的,'-p'就是你提到的'--password'。但'-p'實際上意味着'我會通過提示輸入我的密碼'。如果您想通過命令選項把密碼,應該沒有空(空格),如'-p ''不-p '。 – lqez

+0

http://dev.mysql.com/doc/refman/5.5/en/mysql-command-options.html#option_mysql_password – lqez

0

如果您已經擁有了轉儲,則可以刪除用於創建和使用數據庫的命令。只需刪除第四行和新的第五行。

sed '4d' dump.sql | sed '5d' > dump-striped.sql 
+0

是更好地只顯示線條刪除。只有兩個。你給的方法是任意的 - 特別是如果格式改變或有其他手動編輯.. – bshea

1

在Windows上XAMPP我用下面的命令來實現這個

出口

mysqldump -u root -p mydb > mydb.sql 

進口

mysql -u root -p mynewdb < mydb.sql