数据备份运维
详情介绍
一、插件简介
数据备份插件为站长提供站点数据安全保障:支持仅数据库、仅上传文件或完整备份,后台一键创建/下载/恢复/删除,并可配置定时自动备份(命令行或 Web 访问触发)。
| 入口 | 路径 |
|---|---|
| 后台管理 | /admin/backup |
| Web 定时任务 | GET /backup/cron?key=密钥 |
| CLI 定时任务 | php think backup:run |
| 配置 | 应用中心 → 数据备份 → 配置 |
URL 后缀说明:Web cron 示例 /backup/cron.html?key=xxx;后缀继承社区 url_suffix(默认 html)。
二、核心能力
| 能力 | 说明 |
|---|---|
| 备份类型 | 完整备份、仅数据库、仅上传文件 |
| 一键创建 | 后台手动触发,记录写入 backup_record |
| 下载备份 | 导出备份包到本地 |
| 一键恢复 | 从备份包还原(可选恢复前自动备份) |
| 自动清理 | 按保留数量与保留天数删除旧备份 |
| mysqldump | 可选指定路径加速数据库导出 |
| 定时备份 | 应用中心配置间隔与类型,CLI 或 Web cron 触发 |
| 恢复前备份 | 恢复操作前自动创建完整备份便于回滚 |
三、依赖与安装
- 无硬依赖其他插件;完整备份包含数据库与
public/storage等上传目录。 - 安装执行
install.sql,创建backup_record表。 - 注册后台菜单「数据备份」及创建/下载/删除/恢复权限。
- 备份文件存储在插件配置的备份目录(由
BackupService管理,通常在runtime/backup或 storage 下)。 - 恢复操作风险极高,务必在测试环境验证后再用于生产。
四、应用中心基础配置
字段来自 BackupPlugin::configSchema():
| 配置项 | 类型 | 说明 |
|---|---|---|
最多保留备份数 max_backups | 数字 | 超出后删最旧;0 不限制数量 |
备份保留天数 retention_days | 数字 | 超期自动清理;0 不按天数清理 |
mysqldump 路径 mysqldump_path | 文本 | 可选,留空自动检测 |
启用定时备份 auto_enabled | 开关 | 开启后可通过计划任务或 Web 触发 |
定时备份类型 auto_type | 下拉 | full 完整 / db 仅数据库 / files 仅上传文件 |
定时间隔(小时) auto_interval_hours | 数字 | 两次自动备份最小间隔,建议 24 |
定时任务密钥 cron_key | 文本 | 访问 /backup/cron?key=密钥;留空禁用 Web 入口 |
恢复前自动备份 restore_pre_backup | 开关 | 恢复前先创建完整备份 |
内部字段 last_auto_time 记录上次自动备份时间,由系统自动维护。
五、后台/重点配置
后台 数据备份(/admin/backup):
| 操作 | 路径 | 说明 |
|---|---|---|
| 备份列表 | GET backup/list | 查看历史备份记录 |
| 创建备份 | POST backup/create | 选手动类型创建 |
| 下载 | GET backup/download | 下载指定备份包 |
| 恢复 | POST backup/restore | 从备份还原(高风险) |
| 删除 | POST backup/delete | 删除备份记录及文件 |
备份类型说明
- 完整备份:数据库 SQL + 上传文件打包
- 仅数据库:导出 MySQL 数据
- 仅上传文件:打包用户上传的静态/附件目录
六、前台用户流程
普通用户无前台界面。仅站长通过以下方式触发自动备份:
Web Cron
GET /backup/cron?key={cron_key}需 auto_enabled 开启且 cron_key 非空;满足 auto_interval_hours 间隔后执行 auto_type 指定类型备份。
CLI
php think backup:run适合服务器 crontab,不依赖 Web 密钥。
七、后台审核与运维
| 场景 | 建议 |
|---|---|
| 日常运维 | 每周至少一次完整备份,重大升级前手动备份 |
| 定时任务 | 服务器 crontab 调用 CLI 比 Web cron 更安全 |
| 恢复演练 | 定期在测试环境验证备份可恢复 |
| 异地存储 | 下载备份到本地或对象存储,勿仅存服务器 |
| 磁盘空间 | 关注 max_backups 与 retention_days,避免占满磁盘 |
| 恢复操作 | 确认 restore_pre_backup 开启;低峰期执行 |
八、特殊说明
路由
| 类型 | 路径 | 控制器 |
|---|---|---|
| 前台 | backup/cron | Cron@run |
| 后台 | backup/* | admin\Index |
服务类
BackupService:创建、打包、清理逻辑RestoreService::restore():执行恢复并记录操作者
ensureSchema / ensureMenus
已安装站点启动时自动补表、补菜单。
安全
cron_key应使用足够长的随机字符串,勿泄露- 留空
cron_key可禁用 Web 触发,仅保留 CLI
九、推荐上线清单
- 安装 backup 插件
- 配置保留数量与保留天数
- 手动创建一次完整备份并下载到本地
- 在测试环境试恢复,确认流程可行
- 配置 crontab:
php think backup:run或 Web cron - 设置强随机
cron_key(若用 Web) - 开启「恢复前自动备份」
- 若有 mysqldump,填写路径加速备份
十、常见问题
Q:备份失败或数据库导出很慢? 填写正确的 mysqldump_path;检查 PHP exec 权限与磁盘空间。
Q:Web cron 无反应? 确认 auto_enabled 开启、cron_key 匹配、距上次备份已超过 auto_interval_hours。
Q:恢复后站点异常? 使用恢复前自动生成的备份回滚;恢复会覆盖当前数据,务必先备份。
Q:备份文件存在哪? 查看 backup_record 表中路径字段;一般在 runtime 或 storage 备份目录。
Q:能否只备份社区数据? 当前版本按全库或全上传目录备份,不支持按表自选;可仅用数据库备份后手动筛选 SQL。
Q:CLI 与 Web cron 冲突? 共用 last_auto_time 与间隔限制,任一方式触发后另一方式在间隔内不会重复执行。
更新记录 (1)
-
v1.0.1
2026-08-24
首次发布