DANGER

本页由 AI 工具参考代码编写,尚未经过人工审核,内容仅供参考。如果无法解决问题或需要协助部署,可邮箱联系:kuohu233@qq.com

备份与复制

AstraSchedule 提供完整的数据库备份和配置复制功能,帮助管理员安全地保存数据、在不同数据库之间迁移、以及在班级之间快速复用配置。

完整备份导出

完整备份导出功能将数据库中全部配置数据导出为一个 JSON 文件,涵盖以下七张数据表:

表名内容
schedules所有班级的课表数据
client_configs客户端通用设置(横幅文字、天气预警、温度颜色、倒计时目标等)
timetables作息时间表数据
subjects科目简称与全称的映射关系
data_versions数据版本号(用于客户端增量更新判断)
autorun_records自动任务记录(调休、作息调整等)
countdown_records倒数日日程数据

导出的 JSON 文件包含以上七张表的结构化数据,采用统一的 JSON 格式,可读性强,便于必要时手动编辑。在管理端的"实用工具"页面点击"完整导出"即可下载备份文件。

完整备份导入

导入备份文件时,系统提供两种导入模式:

  • 覆盖模式(Overwrite):对于备份文件中的每条记录,如果数据库中已存在相同主键的记录,则更新该记录的内容。适用于需要完整替换现有配置或合并新旧数据的场景。
  • 跳过模式(Skip):对于备份文件中的每条记录,如果数据库中已存在相同主键的记录,则忽略该条记录不做修改。适用于仅导入数据库中不存在的增量数据的场景。

导入过程在一个数据库事务中执行,保证全部七张表要么全部成功导入,要么全部回滚,不会出现部分导入的中间状态。在管理端的"实用工具"页面选择备份文件、指定导入模式后上传即可。

跨数据库迁移

备份导出导入机制是实现跨数据库类型迁移的标准途径。由于导出的 JSON 文件是与数据库类型无关的通用格式,可以:

  1. 从 SQLite 数据库导出完整备份 JSON。
  2. 在服务端配置中将数据库类型从 sqlite 切换为 mysql(修改 config.toml 中的 db.type 和相关连接参数)。
  3. 重启服务端,此时新的 MySQL 数据库为空。
  4. 在管理端导入之前导出的备份 JSON,选择覆盖模式。

反之亦然(MySQL 迁移到 SQLite)。此过程不依赖任何数据库特定的导出工具,完全由系统自身处理。

配置复制

管理端的"实用工具"页面提供班级间配置复制功能。复制操作涵盖以下内容:

  • 科目配置(简称、全称映射)
  • 作息时间表
  • 课表数据
  • 通用设置(横幅、天气、倒计时等)

操作步骤:

  1. 选择来源班级:通过级联下拉框选择学校、年级、班级(需已存在完整配置)。
  2. 输入目标班级标识:手工输入目标班级的完整标识(格式如 39/2023/2)。
  3. 确认来源与目标不相同后,执行复制。

复制操作由服务端处理,确保所有相关配置表的数据一致复制。此功能极大简化了新建班级时的配置工作——只需在一个班级中配置完毕,即可一键复制到所有同年级班级,之后再针对各班差异微调即可。复制成功或失败均有明确的提示信息。

手动备份 SQLite

对于使用 SQLite 数据库的部署场景(包括传统部署和 Serverless 部署中的 SQLite 模式),可以进行文件级的手动备份。SQLite 数据库为单个 .db 文件(默认路径由 config.toml 中的 db.sqlite.path 指定),直接复制该文件即可完成备份:

# 传统部署示例
cp /opt/astra/astra.db /backup/astra-backup-$(date +%Y%m%d).db

手动备份适用于自动化运维脚本、定时任务等场景。由于 SQLite 文件在服务端运行时可能正在被写入,建议在备份前先停止服务端,或使用支持文件快照的文件系统。

对于使用 MySQL 的部署场景,建议使用管理端的完整备份导出功能或 MySQL 自身的 mysqldump 工具。