2012-10-01 80 views
7

我GOOGLE了很多,我什麼也沒找到!如何從命令行導入MySQL轉儲覆蓋

[[email protected] backups]# mysql -u username_1 -p db_1 < tables_to_import/tables.sql 
ERROR 1050 (42S01) at line 19: Table 'ps_customer' already exists 

mysql -f是一樣的。我希望簡單地導入.sql並重寫那些表,有人可以幫助我嗎?

p.s.我知道當你導出一個數據庫時,你可以選擇「DROP TABLE」選項,但如果我有一個備份,沒有這個聲明?我如何強制?謝謝

回答

3

你想覆蓋整個數據庫嗎?如果是這樣,您可以手動刪除所有表,然後運行導入腳本。這在phpmyadmin中很容易實現。如果您使用CLI,最快的方法是使用DROP DATABASE databasename,然後使用create database,但我認爲您必須重新授予任何非root用戶的權限。

另一個選擇是在每個CREATE TABLE命令之前打開轉儲文件並添加DROP TABLE tablename。你可以用一些聰明的正則表達式輕鬆做到這一點。

+0

嗨octern!不,我只想覆蓋tables.sql中包含的表(在這個.sql中,我導出了6個表,因此我希望只覆蓋這些表),從邏輯的角度來看它可能是可能的,或者我錯過了什麼? – ienabellamy

+1

然後使用我的第二個建議,併爲tables.sql中的每個CREATE TABLE命令添加DROP TABLE命令。你可以寫一個shell腳本來做到這一點,但如果只有6個表格,你應該可以在一分鐘之內手動完成。 – octern

+0

感謝提示octem。再見;-) – ienabellamy

-2

我建議--add-drop-table選項。

21

當你做mysqldump add --add-drop-table(就像twihoX提到的)。然後照常進行導入。所以像這樣:

mysqldump --add-drop-table -u user -p > dumpfile.sql 

mysql -u user -p < dumpfile.sql 
+0

爲什麼降評級? – DrewB

+0

對不起評論,但它是相反的。不是mysql ...> dumpfile.sql。因此,這些命令將是mysqldump --add-drop-table -u用戶-p> dumpfile.sql,然後是mysql -u用戶-p WoodyDRN

+0

好的。我已經修復了這個錯誤。 – DrewB