與SSH

2013-02-20 20 views
1

導入SQL我想通過ssh導入轉儲SQL文件,如:與SSH

mysql -hlocalhost -uUSER -pPASS DATABASE < dump.sql 

但它實際上覆蓋並刪除舊的數據庫。轉儲標記爲「DROP TABLE IF EXISTS」,但爲什麼它會刪除舊條目?該轉儲應該將新(唯一)條目添加到數據庫中,但它會刪除舊的數據庫條目。

有沒有辦法避免這種情況?

謝謝。

+2

當然,當然「DROP TABLE IF EXISTS」刪除舊條目,它將刪除整個表 – 2013-02-20 23:12:41

+0

這正是DROP TABLE IF EXISTS所做的。該表存在,因此在執行文件中的任何INSERT之前,該表被丟棄。如果您不想丟失「DROP TABLE」,請在加載文件中的記錄時注意關鍵違規行爲。 – 2013-02-20 23:12:48

+0

謝謝,我不想再次上傳該SQL,有沒有辦法在SSH中使用類似(忽略DROP TABLE)的命令使其運行? – 2013-02-20 23:15:07

回答

0

有各種不同的選項,你可以傳遞給mysqldump的,這樣腳本將只包含你所需要的(如省略創建表的語句,只是插入數據):http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

我覺得你有興趣 - no-create-info和--no-create-db。

如果您需要使用已有的轉儲,請手動從中刪除違規的「DROP TABLE」行。

+0

如果生成表格超出了您的控制範圍:grep -v 'DROP TABLE'dump.sql | MySQL可能工作。 – Gilbert 2013-02-20 23:18:01

+0

hm我使用此命令拒絕訪問。不幸的是--no-create-info和--no-create-db也不起作用。這是一個FreeBSD系統。 – 2013-02-20 23:43:54

0

轉儲標記爲「DROP TABLE IF EXISTS」,但爲什麼它會刪除舊條目?

這正是DROP TABLE IF EXISTS所做的;如果表在那裏,它會與其內部的所有行一起被刪除(刪除)。

創建轉儲時,您可以添加--skip-add-drop-table選項。