2013-02-20 2 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's» находится в файле. Удалите 'DROP TABLE', если вы не хотите потерять то, что там, и будьте осторожны при нарушении записей при загрузке записей в файл. –

+0

спасибо, я не хочу снова загружать этот SQL, нет ли способа использовать такую ​​команду, как (игнорировать DROP TABLE) в SSH, чтобы заставить ее работать? –

ответ

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

+0

hm Я получаю доступ с этой командой. к сожалению --no-create-info и -no-create-db тоже не работает. Это система FreeBSD. –

0

Дамп помечен как «DROP TABLE IF EXISTS», но почему он удаляет старые записи?

Это точно, что DROP TABLE IF EXISTS делает; если таблица там, она удаляется (удаляется) вместе со всеми строками внутри нее.

При создании дампа вы можете добавить опцию --skip-add-drop-table.