我有一个在 cron 中运行的标准 mysqlbackup 脚本。我们最近遇到了一个问题,我们从视图引用的表中删除了一列。因此,我们的备份脚本失败,并出现类似以下错误:
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)
如果您简单地删除此视图,备份将再次起作用。我试图解决的问题是 a) 将来发生此错误时收到通知,或 b)(这可能不太可能),但如果可能的话,不管发生这样的错误,都强制备份通过。
解决这个问题的最佳方法是什么?我认为唯一且最好的方法是检查退出状态代码,并在发生故障时向系统操作员发送电子邮件通知。上述故障会显示在退出状态代码中吗?寻找有创意/简单的解决方案。
答案1
我会检查错误并相应地发送邮件/触发某些操作 - 但您也可以强制备份继续,无论是否存在错误:
--force,-f
即使在表转储期间发生 SQL 错误,仍继续。
此选项的一个用途是使 mysqldump 继续执行,即使它遇到由于定义引用已被删除的表而变得无效的视图。如果不使用 --force,mysqldump 将退出并显示错误消息。使用 --force,mysqldump 将打印错误消息,但它还会将包含视图定义的 SQL 注释写入转储输出并继续执行。
答案2
简单的解决方案:使用来自 sourceforge.net 的“automysqlbackup”脚本并将其放在 cron 上。
它甚至会自动轮换每日/每周备份 + 通过电子邮件向您发送所有结果。