Резервное копирование и восстановление MySQL с помощью представлений
У меня возникают проблемы при правильном запуске резервных копий mysql, когда они являются представлениями в базе данных. Я думаю, что это может быть связано с необходимостью для него объекта-заполнителя. В любом случае я запускаю эту команду:
mysqldump -u myuser -pmypassword mydatabase | mysql -u myuser -pmypassword -C mydatabase_Beta
Пользователь имеет полные привилегии, и я получаю это:
Просмотр mydatabase_beta.yadayada ссылается на недопустимые таблицы или столбцы или функции или определяет / вызывает, или просмотр не имеет прав на их использование.
Как я могу сделать резервную копию, чтобы она полностью восстановила мою базу данных?
В этом примере я восстанавливаю его под другим именем, но мне нужно иметь возможность восстановить рабочую копию. Я думаю, что это, вероятно, дополнительный параметр mysqldump или, возможно, горячее копирование будет работать лучше. Мысли?
3 ответа
Попробуйте сделать это в два этапа:
mysqldump -uroot -ppassword --skip-extended-insert database.sql > database.sql
Таким образом, он создает резервную копию в файл, а затем передает его во вторую команду:
mysql -u myuser -pmypassword -C mydatabase_Beta < database.sql
Если ошибка ссылки находится на шаге mysqldump, либо исправьте представления, либо удалите их из базы данных. Я не могу представить, что они все еще используются, если они ссылаются на несуществующую таблицу.
Я думаю, что ответ может быть добавить -f
:
--force, -f
Continue even if an SQL error occurs during a table dump.
Одно из применений этой опции - заставить mysqldump продолжать выполнение, даже когда он встречает представление, которое стало недопустимым, потому что определение ссылается на таблицу, которая была удалена. Без --force
mysqldump выходит с сообщением об ошибке. С --force
mysqldump печатает сообщение об ошибке, но также записывает комментарий SQL, содержащий определение представления, в вывод дампа и продолжает выполнение.
Застрелен в темноте, но я не думаю, что вам нужно -C
во второй половине этого заявления. Согласно моей копии MySQL -C
определяет путь к файлу конфигурации для использования.