ByteNoteByteNote

字节笔记本

2026年9月6日

GoBackup:一条命令把数据库备份到云存储,一次部署跑数年

API中转
¥120

服务器上的数据库备份,最怕的不是没做,而是做了没人管:脚本跑没跑成功没人知道,存储满了没人清,几个月后要用的时候才发现早就坏了。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:

shell
curl -sSL https://gobackup.github.io/install | sh

macOS 上也可以用 Homebrew:

shell
brew install gobackup

快速开始

配置文件放两个位置之一:~/.gobackup/gobackup.yml/etc/gobackup/gobackup.yml。一个典型的配置长这样:

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 定义压缩方式。

手动执行一次备份:

bash
$ gobackup perform

定时备份与 Web UI

定时任务有两种写法,直接用 cron 表达式,或者用更直白的间隔加时间点:

yml
models:
  my_backup:
    schedule:
      cron: "5 4 * * sun"   # 每周日 04:05
  other_backup:
    schedule:
      every: "1day"
      at: "04:05"           # 每天 04:05

模型还支持 before_scriptafter_script,备份前后可以挂自定义脚本,比如先通知应用进入维护模式。

启动守护进程,调度和 Web UI 一起跑:

bash
$ 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。

项目链接

分享: