1. Backup是什么?
Backup是一个ruby的gem,是一个强大的、开源的数据库和文件备份工具。它能备份你的数据库,例如MongoDB, MySQL,PostgreSQL,还有备份你系统上的目录或文件,例如,可以备份一些重要的配置文件等。备份完之后,它能够支持上传到相应的存储介质,例如本地文件系统,或者通过ftp、ssh等协议连接的远程服务器,亦或是Dropbox、S3等存储服务器中。备份好的数据支持用压缩工具压缩容量,节约传输和存储资源。还有一点是,它支持通知机制,备份完数据后,它能够通过一些机制,例如slack、HipChat、电子邮件等形式来通知。Backup结合linux系统的crontab服务可以实现按时备份。backup这个是其官网,它的源码放于此backup。
2. 备份过程
下面就以的实战过程来讲解,我用的是阿里云主机,数据库是PostgreSQL,还有一些配置文件来备份,备份的存储位置就放在主机上的一个目录下,配合crontab服务在凌晨一点自动备份。
2.1 第一步,安装backup这个gem。
gem install backup
2.2 第二步,生成Backup配置文件
backup help generate:model
这个指令可以查看具体的参数使用方法。
backup generate:model --trigger rails365_pg \
--archives --storages='local' --compressor='gzip'
运行完这个命令之后,会在当前目录下产生Backup目录。
编辑新生成的配置文件vim Backup/models/rails365_pg.rb。
Model.new(:rails365_pg, 'Description for rails365_pg') do
# 备份文件
archive :my_archive do |archive|
# Run the `tar` command using `sudo`
# archive.use_sudo
archive.add "/home/yinsigan/Backup/models/rails365_pg.rb"
archive.add "/etc/nginx/conf.d/rails.conf"
archive.add "/etc/redis/redis.conf"
end
# 保持15个备份
store_with Local do |local|
local.path = "~/backups/"
local.keep = 15
end
# 使用Gzip压缩备份的数据
compress_with Gzip
# 备份PostgreSQL数据库
database PostgreSQL do |db|
# To dump all databases, set `db.name = :all` (or leave blank)
db.name = "rails365_pro"
db.username = "postgres"
db.password = "xxxxxxx"
db.host = "localhost"
db.port = 5432
db.socket = "/var/run/postgresql/"
# When dumping all databases, `skip_tables` and `only_tables` are ignored.
# db.skip_tables = ["skip", "these", "tables"]
# db.only_tables = ["only", "these", "tables"]
db.additional_options = ["-xc", "-E=utf8"]
end
end
2.3 执行备份
backup perform --trigger rails365_pg
可能你会发现备份的过程中老是不成功。报的是关于PostgreSQL的认证方面的错。
我是参数这篇文章getting-error-peer-authentication-failed-for-user-postgres-when-trying-to-ge解决的。
找到这个文件
find /etc/postgresql | grep pg_hba.conf
编辑它,把local all postgres peer
这一行中的peer改成md5
最后,记得重启postgresql服务器
$ sudo service postgresql restart
3.4 使用crontab按时备份
crontab在unix或linux是很常见的服务,相当于windows的计划任务,就是可以指定时间运行一些程序或任务。
crontab -e
执行此命令进入crontab编辑页面。添加下面一行。
0 1 * * * /bin/bash -l -c 'backup perform --trigger rails365_pg'
重启crontab服务sudo service cron restart
。
这样就会每天的1点时分进行备份。
关于具体的crontab语法可以自行google。
这里要提到一个技巧。
我们需要debug或测试crontab的效果,你总不能等待一点钟来测试吧。
我们先临时改成每分钟备份一次。
* * * * * /bin/bash -l -c 'backup perform --trigger rails365_pg'
改完后,重启crontab服务sudo service cron restart
。
执行以下命令观察是否有正确的信息输出。
tail -f /var/log/syslog | grep CRON
再查看backups/rails365_pg
是否有相应的目录或文件产生。如果有,说明成功了。
再把时间改回凌晨一点,然后重启crontab就OK了。
完结。