之前,我曾经写过一片《Backup - 备份你的服务器环境》
同时 Ruby China 以及一些其他的场景我也在持续用它备份我需要维护的服务器,但是,久了你回发现,部署 Backup 其实很麻烦,运行也会因为 Ruby 的版本迭代导致一些小问题。
于是我想着用 Go 来写一个类似的东西,简化备份这件事情。
GoBackup 是一个类似 backup/backup 的一站式备份工具,为中小型服务器/个人服务器而设计,配合 Crontab 以实现定时备份的目的。
使用 GoBackup 你可以通过一个简单的配置文件,一次(执行一个命令)将服务器上重要的(数据库、配置文件)东西导出、打包压缩,并备份到指定目的地(如:本地路径、FTP、云存储...)。
.tar.gz
mode: sync/copy
基于 tar
命令将多个文件/文件夹打包在一个 .tar
文件里面,支持排除特定文件。
$ curl -sSL https://git.io/gobackup | bash
等上面执行成功以后,会把 gobackup
安装在 /usr/local/bin/gobackup
路径,然后你可以:
$ gobackup -v
gobackup 0.4.0
GoBackup 会自动在下面的地方寻找配置文件:
你可以参考一下下面的配置:
# 基本节点,描述有多少个备份方案
models:
gitlab:
# 备份打包
compress_with:
# 压缩方式
type: tgz
# 存储
store_with:
# 通过 scp 存储
type: scp
path: ~/backup
host: your-host.com
private_key: ~/.ssh/id_rsa
username: ubuntu
password: password
timeout: 300
# 需要备份的数据库
databases:
# 别名
gitlab:
# 类型: mysql, postgresql, redis
type: mysql
host: localhost
port: 3306
database: gitlab_production
username: root
password:
gitlab_redis:
type: redis
# 备份前是否要求 Redis 执行 SAVE 命令
invoke_save: true
# redis 的备份方式,远程服务器请用 sync
mode: sync
password:
# 如果 redis 在本地服务器,可以用 copy 模式
# mode: copy
# rdb_path: /var/db/redis/dump.rdb
# 文件备份
archive:
# 需要备份的文件、文件夹
includes:
- /home/git/.ssh/
- /etc/mysql/my.conf
- /etc/nginx/nginx.conf
- /etc/nginx/conf.d
- /etc/redis/redis.conf
- /etc/logrotate.d/
# 需要排除的文件/文件夹
excludes:
- /home/ubuntu/.ssh/known_hosts
- /etc/logrotate.d/syslog
gitlab_repos:
store_with:
type: local
path: /data/backups/gitlab-repos/
archive:
includes:
- /home/git/repositories
$ gobackup perform
2017/09/08 06:47:36 ======== ruby_china ========
2017/09/08 06:47:36 WorkDir: /tmp/gobackup/1504853256396379166
2017/09/08 06:47:36 ------------- Databases --------------
2017/09/08 06:47:36 => database | Redis: mysql
2017/09/08 06:47:36 Dump mysql dump to /tmp/gobackup/1504853256396379166/mysql/ruby-china.sql
2017/09/08 06:47:36
2017/09/08 06:47:36 => database | Redis: redis
2017/09/08 06:47:36 Copying redis dump to /tmp/gobackup/1504853256396379166/redis
2017/09/08 06:47:36
2017/09/08 06:47:36 ----------- End databases ------------
2017/09/08 06:47:36 ------------- Compressor --------------
2017/09/08 06:47:36 => Compress with Tgz...
2017/09/08 06:47:39 -> /tmp/gobackup/2017-09-08T14:47:36+08:00.tar.gz
2017/09/08 06:47:39 ----------- End Compressor ------------
2017/09/08 06:47:39 => storage | FTP
2017/09/08 06:47:39 -> Uploading...
2017/09/08 06:47:39 -> upload /ruby_china/2017-09-08T14:47:36+08:00.tar.gz
2017/09/08 06:48:04 Cleanup temp dir...
2017/09/08 06:48:04 ======= End ruby_china =======
GoBackup 内置了计划任务功能,你可以通过 gobackup.yml 来配置。
详见:https://gobackup.github.io/schedule
TIP: 目前 GoBackup 已经在 Ruby China 的服务器上运作起来了。