字节笔记本
2026年9月6日
GoBackup:一条命令把数据库备份到云存储,一次部署跑数年
服务器上的数据库备份,最怕的不是没做,而是做了没人管:脚本跑没跑成功没人知道,存储满了没人清,几个月后要用的时候才发现早就坏了。GoBackup 就是冲着这个场景做的开源备份工具:一条 YAML 配置,把数据库和文件打包压缩,定时推到云存储,一次部署可以安静跑上几年。项目用 Go 写成,无依赖,MIT 协议,目前 2900+ stars。
项目简介
GoBackup 是一个面向应用服务器的备份 CLI 工具,2017 年由 Ruby China 创始人李华顺(huacnlee)发布,灵感来自 Ruby 世界的 backup/backup,但去掉了 Ruby 依赖。它内置计划任务,定时备份数据库、配置文件,导出打包压缩后存储到外部云存储。
最有说服力的还是作者自己给出的生产数据:Ruby China 的应用服务器从 2017 年设计之初就用 GoBackup 每日全量备份到外部云存储,数年持续运行,完全不需要维护。存储用的是阿里云 OSS,文件回收周期一个月,每月成本只要 0.2 元。
它的自我要求写在 README 第一屏:简单易用,一次性部署后能持续运行数年无需任何维护,存储成本低(回收机制),安全可靠(加密压缩)。
核心特性
数据库覆盖够全。 十种内置支持:MySQL、PostgreSQL、Redis、MongoDB、SQLite、Microsoft SQL Server、InfluxDB、MariaDB、etcd、Firebird。Redis 支持直接同步 rdb 文件或触发 save 后打包。
存储目标二十种。 本地、FTP、SFTP、SCP 之外,云存储几乎把国内外主流都收齐了:Amazon S3、阿里云 OSS、腾讯云 COS、Cloudflare R2、Google Cloud Storage、Azure Blob、Backblaze B2、MinIO、七牛 Kodo、华为 OBS、又拍云、WebDAV 等。
备份成败有通知。 支持 SMTP 邮件、Webhook、Discord、Slack、飞书、钉钉、Telegram、AWS SES、Postmark、SendGrid,甚至可以在 GitHub Issue 上留言。备份失败不再静默。
细节功能实用。 归档路径或文件进 tar;大备份文件自动分片;守护进程模式内置调度;自带 Web UI 管理备份。
安装指南
一行脚本装到 /usr/local/bin/gobackup:
curl -sSL https://gobackup.github.io/install | shmacOS 上也可以用 Homebrew:
brew install gobackup快速开始
配置文件放两个位置之一:~/.gobackup/gobackup.yml 或 /etc/gobackup/gobackup.yml。一个典型的配置长这样:
models:
gitlab_app:
databases:
gitlab_db:
type: postgresql
database: gitlab_production
username: gitlab
password:
gitlab_redis:
type: redis
mode: sync
rdb_path: /var/db/redis/dump.rdb
invoke_save: true
storages:
s3:
type: s3
bucket: my_app_backup
region: us-east-1
path: backups
access_key_id: $S3_ACCESS_KEY_Id
secret_access_key: $S3_SECRET_ACCESS_KEY
compress_with:
type: tgz结构一目了然:一个 models 就是一个备份任务,databases 定义要备的库,storages 定义往哪送(支持环境变量引用,密钥不写死在配置里),compress_with 定义压缩方式。
手动执行一次备份:
$ gobackup perform定时备份与 Web UI
定时任务有两种写法,直接用 cron 表达式,或者用更直白的间隔加时间点:
models:
my_backup:
schedule:
cron: "5 4 * * sun" # 每周日 04:05
other_backup:
schedule:
every: "1day"
at: "04:05" # 每天 04:05模型还支持 before_script 和 after_script,备份前后可以挂自定义脚本,比如先通知应用进入维护模式。
启动守护进程,调度和 Web UI 一起跑:
$ gobackup start
2023/03/15 23:00:30 [Config] Load config from default path.
Starting API server on port http://127.0.0.1:2703浏览器打开 http://127.0.0.1:2703 就能看到 Web UI,查看备份记录和文件。不想跑守护进程的话,gobackup run 是前台运行模式,交给 systemd 或 crontab 管也行。
信号处理也照顾到了:kill -HUP 热重载配置,改完配置文件不用重启;kill -QUIT 优雅退出。
写在最后
GoBackup 的定位很清醒:它不追求花哨,就是把"数据库加文件定时送到云存储"这一件事做稳,让人部署一次就可以忘掉。对一个只有几台服务器的小团队来说,比自维护一套备份脚本省心得多。完整配置示例和各数据库、存储的专属参数,官方文档在 gobackup.github.io。
项目链接
- 官网与文档:https://gobackup.github.io
- GitHub 仓库:https://github.com/gobackup/gobackup
- Docker 镜像:https://hub.docker.com/r/huacnlee/gobackup