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

50 lines
2.3 KiB
Markdown

# MySQL 8.4 备份与恢复
## 策略
- 由 1Panel 每日执行一次完整备份,保留 30 天;备份写入与应用主机隔离的对象存储。
- MySQL 启用 binary log,至少保留 7 天,用于完整备份后的时间点恢复。
- 数据库备份和对象存储均启用加密;备份账号只授予备份所需权限。
- 每月至少在隔离环境恢复一次,并记录恢复点、耗时和校验结果。未做恢复演练的备份不能视为可用。
- 发布含 Flyway 迁移的镜像前,先完成一次可验证的备份。Flyway 迁移只向前执行。
## 命令行完整备份
先用 `mysql_config_editor` 为受限备份账号建立本机登录路径,避免把密码写入命令行或脚本:
```bash
mysql_config_editor set --login-path=osg-backup \
--host=127.0.0.1 --user=osg_backup --password
```
在只允许管理员读取的目录执行一致性备份:
```bash
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 实例,不能覆盖生产库:
```bash
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。