У меня есть стандартный сценарий mysqlbackup, который запускается в cron. Недавно у нас возникла проблема, когда мы удалили столбец из таблицы, на которую ссылалось представление. Таким образом, наш сценарий резервного копирования завершился ошибкой, похожей на следующую:
mysqldump: Couldn't execute 'show create table `v`': View 'foo_breakage.v'
references invalid table(s) or column(s) or function(s) or definer/invoker of
view lack rights to use them (1356)
Если вы просто откажетесь от этого представления, резервное копирование снова будет работать. То, что я пытаюсь решить, - это либо а) получать уведомление в будущем, когда произойдет эта ошибка, или б) (это, вероятно, маловероятно), но принудительно выполнить резервное копирование независимо от такой ошибки, если это вообще возможно.
Как лучше всего подойти к этой проблеме? Я предполагаю, что единственный и лучший подход для этого - проверить код состояния выхода и отправить системным администраторам уведомление по электронной почте в случае сбоя. Появится ли указанная выше ошибка в коде статуса выхода? Ищу креативные / простые решения.
Я бы проверил наличие ошибок и отправил бы что-то по почте / инициировал бы что-то соответственно, но вы также можете принудительно продолжить резервное копирование независимо от ошибок:
из справочная страница mysqldump:
--force, -f
Продолжайте, даже если во время дампа таблицы возникает ошибка SQL.
Одно из применений этой опции - заставить mysqldump продолжать выполнение, даже если он встречает представление, которое стало недопустимым, поскольку определение относится к таблице, которая была удалена. Без --force mysqldump завершает работу с сообщением об ошибке. С --force mysqldump печатает сообщение об ошибке, но также записывает комментарий SQL, содержащий определение представления, в вывод дампа и продолжает выполнение.
Простое решение: используйте сценарий «automysqlbackup» с sourceforge.net и загрузите его в cron.
Он даже автоматически меняет ежедневные / еженедельные резервные копии + отправляет вам электронное письмо со всеми результатами.