Назад | Перейти на главную страницу

Резервное копирование и восстановление MySQL с помощью представлений

У меня возникают проблемы с правильной работой резервных копий mysql, когда они отображаются в базе данных. Я думаю, это может иметь какое-то отношение к тому, что для него нужен объект-заполнитель. В любом случае я запускаю эту команду:

mysqldump -u myuser -pmypassword mydatabase | mysql -u myuser -pmypassword -C mydatabase_Beta

У пользователя есть полные права, и я получаю следующее:

View mydatabase_beta.yadayada ссылается на недопустимые таблицы, столбцы или функции, или на определитель / вызывающий объект, или на просмотр, у которого отсутствуют права на их использование.

Как я могу сделать резервную копию, чтобы правильно восстановить всю мою базу данных?

В этом примере я восстанавливаю его под другим именем, но мне нужно иметь возможность восстановить рабочую копию. Я думаю, что это, вероятно, дополнительный параметр mysqldump или, возможно, горячая копия будет работать лучше. Мысли?

Сначала попробуйте сделать это в два этапа:

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 определяет путь к файлу конфигурации для использования.