继续前文 使用 gobackup 自动将 MySQL 数据库备份到七牛云私有空间,在本地测试了 gobackup 的基本功能之后,今天在几台线上服务器,包括阿里云和腾讯云的各种服务器,依次部署了 gobackup 备份服务。这里记录一下一些踩坑的地方。
消息通知设置
用 163 邮箱设置了邮件通知,测试失败日志如下:
2025/10/27 09:32:58 [Notifier] Running 1 Notifiers
2025/10/27 09:33:18 [Notifier] EOF
从 github issue 看,似乎是不支持 TLS:
When send mail via port 465, the error EOF will occur.
https://github.com/gobackup/gobackup/pull/288
对提交看是支持了的,但是我测试了几次,都是 EOF 错误。
所以,我决定,还是换成 webhook 方式吧,我在自己服务器上写一个接收接口,然后在自己的服务器上发邮件通知。
Webhook 通知实现
https://gobackup.github.io/configuration/notifiers/webhook
只需要处理 gobackup 发过来的 json 数据即可,格式如下:
{
"title": "This is title",
"message": "This is message"
}
果然,改成 webhook 方式后,测试成功了。邮件格式如下图:

但是,如果每天备份成功都发邮件的话,未免太多了。
The on_success, on_failure option (default: true) for toggle when backup has been successfully or failed.
可以独立设置成功和失败的通知开关:
on_success: true
on_failure: true
还是都开启吧。我担心如果真失败了,而且邮件服务也出问题了,那就麻烦了。
线上新建一个七牛云私有空间
专门用于存储数据库备份文件,并且不允许外部访问下载。选了个离我最近的机房,对应的 region id:
- 华东-浙江 cn-east-1
- 华东-浙江2 cn-east-2
不能给独立的空间设置 access key 和 secret key,这个地方的体验不太好。
yaml 的注释语法
yaml 的注释是用 # 符号开头的,后面的内容都会被忽略掉。
可以方便的在配置文件中添加注释,解释每个配置项的作用和用法。或者存档一些废弃的配置项,以备后续参考。
配置文件放哪里
两个位置任选其一,如下:
~/.gobackup/gobackup.yml
/etc/gobackup/gobackup.yml
感觉第一种更方便一点。毕竟也用不到 root 权限,直接使用非 root 用户即可。
注意需要把文件权限修改,防止其他用户读取:
chmod 600 gobackup.yml
安装 gobackup
将本地的 gobackup 可执行文件 scp 上传到服务器上即可。
做成 Makefile 任务更方便一些。
.PHONY: deploy_gobackup
deploy_gobackup:
scp -P $(SSH_PORT) /usr/local/bin/gobackup $(SERVER_USER)@$(SERVER_HOST):~/
然后登录服务器,移动到 /usr/local/bin 目录下即可。
sudo mv gobackup /usr/local/bin/
确认
$ which gobackup
/usr/local/bin/gobackup
mysql 单实例多个数据库的配置
参考:
https://github.com/gobackup/gobackup/issues/193
my_db_default: &my_db_default
type: mysql
host: localhost
port: 3306
username: root
password: root
args: --single-transaction --quick
models:
my_app:
databases:
my_db1:
<<: *my_db_default
database: my_db1
my_db2:
<<: *my_db_default
database: my_db2
my_db3:
<<: *my_db_default
database: my_db3
yaml 的配置还是太灵活了,怪不得 rasa 也是用的 yaml 配置。
禁用 Web 功能
https://gobackup.github.io/configuration#webconfig
没有禁用 web 功能,所以,干脆设置一个非常复杂的账号和密码吧。
同时阿里云的防火墙也阻止了 2703 端口的访问。
甚至直接不用 gobackup start 服务,改成 crontab 系统定时任务。
先放到系统计划任务里跑着
crontab -e
每天凌晨 0 点跑一次:
0 0 * * * /usr/local/bin/gobackup perform >> ~/.gobackup/gobackup.log
crontab 没有执行,如何排查
Ubuntu 系统下,可以查看系统日志:
less /var/log/syslog
搜索 cron
Oct 27 14:41:01 localhost CRON[2698]: (ubuntu) CMD (/usr/local/bin/gobackup perform >> ~/.gobackup/gobackup.log)
看到 gobackup 的执行日志:
2025/10/27 14:41:01 [Config] Load config from default path.
2025/10/27 14:41:01 [Config] Load gobackup config failed: While parsing config: yaml: control characters are not allowed
2025/10/27 14:41:01 [Config] While parsing config: yaml: control characters are not allowed
这个问题,很诡异,发现 yaml 配置文件并没有任何问题。改成 root 用户的 crontab 后,就可以正常执行了。 看起来并不是权限的问题。而且不同用户的加载目录不同,而非 root 用户的目录下有一个我没有删除的 gobackup 可执行文件, 估计是把这个文件当成配置文件去加载了,导致报错。删除掉这个文件后,就可以正常执行了。
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式