Appearance
MySQL 备份到 GitHub
方案说明
在 发布 jy-site 时顺带把 blog_site 全库备份到 GitHub 私有仓库的 mysql-backup 分支。
| 问题 | 答案 |
|---|---|
| 什么时候备份? | 管理端点 「构建并部署」、或 Actions 手动跑 Build and deploy jy-site 时(构建成功后、上传静态站之前) |
| 会过期吗? | 不会。备份在 Git 分支里,不用 Actions Artifact。 |
| 会越积越多吗? | 不会。每次 git push -f 覆盖,分支上只有最新一份 blog_site.sql.gz。 |
| 存在哪? | 私有仓库 jianyi241/jy-site 的 mysql-backup 分支 |
没有单独的 24 小时定时任务,避免无意义的 Actions 开销。若只改了数据库、暂时不发布站点,可手动跑 Backup MySQL (manual)。
流程
text
构建并部署(deploy-jy-site.yml)
1. pnpm build:static(读库生成静态站)
2. mysqldump → 推到 mysql-backup 分支 ← 备份
3. scp 静态站到服务器脚本:.github/scripts/mysql-backup-push.sh
前提
- jy-site 仓库必须是 private
- GitHub Secrets 已配置:
DATABASE_*(与构建相同) - Actions 能连上 MySQL
分支内容
mysql-backup/
├── blog_site.sql.gz
└── LAST_BACKUP_UTC.txt手动只备份(不发布)
GitHub → jy-site → Actions → Backup MySQL (manual) → Run workflow
下载最新备份
bash
git clone --depth 1 -b mysql-backup git@github.com:jianyi241/jy-site.git jy-site-backup
cat jy-site-backup/mysql-backup/LAST_BACKUP_UTC.txt
ls -lh jy-site-backup/mysql-backup/blog_site.sql.gz恢复
bash
gunzip -c mysql-backup/blog_site.sql.gz | mysql -h<主机> -P3306 -u blog -p blog_site先在测试环境验证,再覆盖生产库。
安全注意
- 禁止把 dump 提交到
master/main - 仓库保持 private
- 长期建议收紧
3306公网访问
与静态站的关系
| 内容 | 何时更新 |
|---|---|
| MySQL(源数据) | 每次「构建并部署」时备份到 mysql-backup |
| 静态 HTML | 同一次 workflow 部署到 /opt/web/jysite |
两者在同一轮发布里对齐,备份内容与当时上线的站点一致。