mysqlimport с использованием дампа

Мне нужно восстановить дамп базы данных, но без удаления существующих строк в таблицах.

Для дампа я использую:

mysqldump -u root --password --databases mydatabase > C:\mydatabase.sql

Для восстановления я не использую команду mysql, так как она отбросит все существующие строки, но вместо этого mysqlimport должен выполнить свою задачу, очевидно Но как? Бег:

mysqlimport -u root -p mydatabase c:\mydatabase.sql

говорит "таблица mydatabase.mydatabase не существует". Почему он ищет таблицы? Как восстановить дамп со всей базой данных, не удаляя существующие строки в существующих таблицах? Я мог бы сбросить отдельные таблицы, если mysqlimport хочет этого.

Что делать?

3 ответа

Решение

Если вы обеспокоены растоптанием существующих строк, вам нужно выполнить mysqldump следующим образом:

MYSQLDUMP_OPTIONS="--no-create-info --skip-extended-insert"
mysqldump -uroot --ppassword ${MYSQLDUMP_OPTIONS} --databases mydatabase > C:\mydatabase.sql

Это сделает следующее:

  • Удалить CREATE TABLE заявления и использовать только вставки.
  • Он будет вставлять ровно по одной строке за раз. Это помогает смягчить строки с дублирующимися ключами

С mysqldump, выполненным таким образом, теперь вы можете импортировать как это

mysql -uroot -p --force -Dtargetdb < c:\mydatabase.sql

Попробуйте!

ПРЕДУПРЕЖДЕНИЕ: сброс --skip-extended-insert сделает mysqldump действительно большим, но по крайней мере вы можете контролировать каждый дубликат, сделанный один за другим. Это также увеличит продолжительность перезагрузки mysqldump.

Я бы отредактировал файл mydatabase.sql в текстовом редакторе, удалив строки, которые ссылаются на удаление таблиц или удаление строк, а затем вручную импортировал файл, как правило, используя mysql Команда как обычно.

mysql -u username -p databasename < mydatabase.sql

Команда mysqlimport предназначена для дампов, созданных с помощью команды mysql. SELECT INTO OUTFILE а не прямые дампы базы данных.

Похоже, это намного сложнее, чем вы описываете.

Если вы делаете резервную копию так, как вы описываете, она имеет все записи в вашей базе данных. Тогда вы говорите, что не хотите удалять существующие строки из базы данных и загружать из резервной копии? Зачем? Причина, по которой в файле резервной копии (вывод из mysqldump) есть команды удаления и создания таблицы, заключается в том, что вы не получите две копии своих данных.

Правильный ответ - загрузить выходной файл mysqldump с помощью клиента mysql. Если вы не хотите этого делать, вам придется объяснить, почему нужно получить лучший ответ.

Другие вопросы по тегам