Files
OSGAccountServer/docs/BACKUP.md
Rocky 0af35d44f4 Establish secure account and managed AI backend
Provide the production foundation for Apple identity, immutable credits, referrals, integrity checks, managed providers, and hardened Docker deployment.
2026-08-16 14:46:23 +08:00

2.3 KiB

MySQL 8.4 备份与恢复

策略

  • 由 1Panel 每日执行一次完整备份,保留 30 天;备份写入与应用主机隔离的对象存储。
  • MySQL 启用 binary log,至少保留 7 天,用于完整备份后的时间点恢复。
  • 数据库备份和对象存储均启用加密;备份账号只授予备份所需权限。
  • 每月至少在隔离环境恢复一次,并记录恢复点、耗时和校验结果。未做恢复演练的备份不能视为可用。
  • 发布含 Flyway 迁移的镜像前,先完成一次可验证的备份。Flyway 迁移只向前执行。

命令行完整备份

先用 mysql_config_editor 为受限备份账号建立本机登录路径,避免把密码写入命令行或脚本:

mysql_config_editor set --login-path=osg-backup \
  --host=127.0.0.1 --user=osg_backup --password

在只允许管理员读取的目录执行一致性备份:

umask 077
mysqldump --login-path=osg-backup \
  --single-transaction --quick --routines --triggers --events \
  --set-gtid-purged=OFF --default-character-set=utf8mb4 \
  osg_account | gzip -9 > "osg_account-$(date -u +%Y%m%dT%H%M%SZ).sql.gz"

备份任务应在上传后生成 SHA-256 校验值,并按保留策略删除过期副本。不要将备份、登录路径文件或校验清单提交到 Git。

隔离恢复演练

恢复目标必须是新建的隔离 MySQL 8.4 实例,不能覆盖生产库:

mysql --login-path=osg-restore -e \
  "CREATE DATABASE osg_account_restore CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci"
gzip -dc osg_account-YYYYMMDDTHHMMSSZ.sql.gz | \
  mysql --login-path=osg-restore osg_account_restore
mysql --login-path=osg-restore osg_account_restore -e \
  "SELECT version, success FROM flyway_schema_history ORDER BY installed_rank"

恢复后执行应用只读验收、表行数抽样、外键检查和邀请查询测试。时间点恢复应先还原完整备份,再仅回放目标时间之前的 binary log。确认结果后销毁隔离实例及明文恢复文件。

1Panel

1Panel 的数据库备份任务使用相同的每日频率、异地存储、加密和保留期。启用任务成功/失败通知,并每月下载一份备份到隔离 MySQL 8.4 完成恢复演练。1Panel 面板、工单和截图中不得出现数据库密码、Apple 私钥或供应商 API Key。