Skip to content

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

前提 ​

  1. jy-site 仓库必须是 private
  2. GitHub Secrets 已配置:DATABASE_*(与构建相同)
  3. 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

两者在同一轮发布里对齐,备份内容与当时上线的站点一致。

JY 项目文档