php - 如何在没有 cron 的情况下自动化数据库表备份
问题描述
所以我有一个 web 应用程序,每个月都应该备份一个 MYSQL 数据库表以用于历史目的。表名将是它的名称,然后是当前年份,以及它应该代表的月份,如table_201811
ortable_201901
等,你明白了。
我没有 SSH 访问权限,所以没有经典的 cron 工作可能性。
我认为,一种方法是,由于 PHP 并非一直运行,因此在每次页面加载时,我会:
- 获取最新的表名
- 从中获取年份和月份
- 将其与当前年份和月份进行比较
- 检查当前年份和月份表是否存在
- 如果没有,则创建,并复制所有数据
现在,这并没有什么问题,我认为,但是,每个人都可以看到这不是一个最佳解决方案,因为至少涉及 2 个 MYSQL 请求。
我该如何改进这个过程?还有另一种更好的方法吗?
编辑: 实现这一目标的一种可能方法,尽管不是最优雅的方法:
- 将下一个备份日期保存在服务器上的文件中
- 在每次页面加载时,将该日期与当前日期进行比较
- 如果相等或更大,检查表是否已经创建
- 如果没有,则创建,并复制所有数据
- 在服务器上的文件中设置下一个日期
对此有什么想法吗?
编辑2
所以最后我采用了上述概念,除了我使用数据库来存储下一个备份日期,因为据我所知,通过 PHP读取/写入文件比访问数据库要慢。有人会对此提出异议,因为数据库文件也是物理上位于硬盘上的普通文件,但无论如何。这解决了。
解决方案
从没有 SSH 访问权限的角度推断,其他人正在为您进行托管?要求他们按照您的意愿执行备份脚本,并将其放入 crontab。
他们希望已经有某种备份系统在运行,如果没有,请考虑尽快切换到其他地方。
此外,(暂时戴上我的操作帽子)如果您要将每月数据的完整副本累积到数据库中,他们肯定会感兴趣。出于这个原因,最好先咨询他们。
推荐阅读
- android - .iml 文件可以在没有相应 gradle 依赖项的情况下将数据拉入项目吗?
- dapper - 简洁的一对多映射逻辑
- r - 使用重复循环的斐波那契数
- django - django 在 url 模板标签中使用引号
- ms-media-foundation - 使用 Media Foundation 编码的 AVI 索引损坏或丢失
- swift - 如何在 SwiftUI 中的所有选项卡视图之间共享状态
- python - 现在无法在 macOS Big Sur 上使用 setup.py 进行安装
- html - 内联 SVG 增加了父元素的高度 - 为什么以及如何防止它?
- sql - 如何执行存储在另一个表中的准备好的 SQL 语句
- vba - Vba Numberformat 多个条件来格式化单元格值