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. Если вы не хотите этого делать, вам придется объяснить, почему нужно получить лучший ответ.