如何在没有cron的情况下自动执行数据库表备份

时间:2018-12-02 13:52:44

标签: php mysql database-backups

因此,我有一个Web应用程序,每个月应出于历史目的备份一个MYSQL数据库表。表格名称就是它的名称,后跟当前年份以及它应该代表的月份,例如table_201901AREA等,您就会明白。

我没有SSH访问权限,因此没有经典的cron工作机会。

我想,一种方式是,由于PHP并非一直运行,因此在每次页面加载时,我都会:

  • 获取最新的表名
  • 从中获取年份和月份
  • 将其与当前年份和月份进行比较
  • 检查当前年月表是否存在
  • 如果没有创建,然后复制所有数据

现在,这没什么问题,但是我认为,每个人都可以看到这不是一个最佳解决方案,因为至少涉及2个MYSQL请求。

如何改进此过程?还有另一种更好的方法吗?

编辑: 尽管不是最优雅的一种方法,但可以实现这一目标:

  • 将下一个备份日期保存在服务器上的文件中
  • 在每次加载页面时,将该日期与当前日期进行比较
  • 如果相等或更大,请检查表是否已经创建
  • 如果没有创建,然后复制所有数据
  • 在服务器上的文件中设置下一个日期

对此有何想法?

Edit2

最后,我采用了上述概念,只是我使用数据库存储了下一个备份日期,因为据我了解,从文件中读取/写入,通过PHP,慢一些,然后访问数据库。人们会对此争论不休,因为数据库文件实际上也是硬盘上的普通文件,但是无论如何。解决了。​​

2 个答案:

答案 0 :(得分:2)

从没有SSH访问权的角度推断,其他人正在为您托管吗?要求他们根据需要执行备份脚本,然后将其放入crontab中。

希望他们已经在运行某种备份系统,否则请考虑尽快切换到其他地方。

此外,(暂时戴上我的操作帽)如果您要将月度数据的完整副本累积到数据库中,他们当然很感兴趣。同样出于这个原因,明智的做法是先咨询他们。

答案 1 :(得分:1)

另一种选择是编写一个可通过URL调用的备份脚本,并对该URL使用.htaccess基本身份验证保护,以便其他人无法调用它。

然后使用cron-job.org之类的服务,该服务每天调用一次此URL。