Mysqldump с таблицами InnoDB, как импортировать их без ошибок? - PullRequest
1 голос
/ 29 сентября 2011

Я экспортировал mysqldump базы данных с таблицами InnoDB и связями внешних ключей в них, используя флаг --single -action (который я читаю где-то, который я должен использовать для InnoDB).Нет проблем.

Но при попытке импортировать этот дамп в другую существующую базу данных (та же база данных, другой сервер) я получаю всевозможные ошибки при попытке удалить таблицы, потому что это нарушит отношения InnoDB.

Я также прочитал, что для избежания этого следует использовать foreign_key_checks = 0, но это переменная сервера, а не часть процесса дампа.Поэтому я пытаюсь выяснить, как автоматизировать все это, поскольку у меня есть сценарий, который выполняет резервное копирование БД, он работал, когда у нас были только таблицы MyISAM:

mysqldump -u user -p'password '--single -action -q база данных |ssh user@backup.com mysql -u user -p'password 'база данных

Спасибо.

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Вы можете создать дамп в файл, добавить требуемый SET FOREIGN_KEY_CHECKS=0; в этот файл и затем передать файл в mysql.

2 голосов
/ 06 октября 2011

Оказывается, что файл mysqldump достаточно умен, чтобы обнаружить, что они являются таблицами InnoDB, и помещает соответствующие комментарии вверху файла. Моя проблема заключалась в том, что, когда я экспортировал через PHPMyAdmin, он не помещал правильные комментарии в файл, следовательно, вызывал все эти проблемы.

Спасибо за ваш ответ.

1 голос
/ 04 сентября 2012

Вы также можете добавить в командную строку mysql при восстановлении без редактирования исходного файла. Это очень полезно, так как резервные копии mysql могут стать огромными, а редактирование файла GB + занимает много процессорного времени по сравнению с добавлением этого в командную строку,

mysql -D YourDatabaseName -u YourUserName -p --init-command="set @@foreign_key_checks=0"<YourBackupDumpFile.sql
...