#概述#

备份一直是个麻烦的问题。备份到本地担心系统坏了导致数据丢失,备份到远程机器成本又有点高。
我的方法是通过ruby下的一个backup gem,来实现定期将mysql数据库和web程序备份到本地的同时,上传到阿里云的oss上。

##安装##

###ruby安装###

通过rvm来安装ruby,首先安装rvm。参考http://rvm.io 网站

1
\curl -sSL https://get.rvm.io | bash -s stable

rvm安装后,用如下命令安装ruby

1
rvm install ruby

###安装backup gem###

1
gem install backup

###安装backup-aliyun插件###

这个插件主要是给backup gem提供可以备份到阿里云oss的功能。
默认的插件依赖carrierwave-aliyun gem,可以上传到杭州站点下的bucket。不支持上传到青岛站点。

我更新了部分代码,加入了aliyun_area选项。可以支持青岛站点。
安装默认版本

1
gem install backup-aliyun

安装我修改后的版本

1
2
3
4
5
6
7
git clone https://github.com/babodx/backup-aliyun.git
cd backup-aliyun
gem build backup-aliyun.gemspec
gem install backup-aliyun-0.1.1.gem

##配置##

通过backup对数据库和程序文件备份,需要生成配置文件和配置model

1
backup generate:config
1
2
backup generate:model --trigger my_backup \
--archives --storages='local' --compressor='gzip'

编辑Backup/models/my_backup.rb文件,来定义需要备份的内容。具体可以参考http://meskyanichi.github.io/backup/v4/getting-started/ 文档

我的文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# encoding: utf-8
#引入aliyun备份插件
require 'backup-aliyun'
Backup::Model.new(:my_backup, 'Description for my_backup') do
#定义需要备份的目录
archive :my_archive do |archive|
# Run the `tar` command using `sudo`
# archive.use_sudo
archive.add "/data/htdocs/my_backup"
end
#定义需要备份的数据库
database MySQL do |db|
db.name = "db_name"
db.username = "db_user"
db.password = "db_passwd"
db.host = "127.0.0.1"
db.port = 3306
end
#定义备份到本地路径
store_with Local do |local|
local.path = '~/backups/'
local.keep = 5
end
#定义备份到aliyun oss
store_with "Aliyun" do |aliyun|
aliyun.access_key_id = 'access_key_id'
aliyun.access_key_secret = 'access_key_secret'
aliyun.bucket = 'bucket_name'
aliyun.path = 'bucket_path'
aliyun.keep = 10
aliyun.aliyun_internal = 'true'
aliyun.aliyun_area = 'cn-qingdao'
end
#定义开启压缩
compress_with Gzip
end

##执行备份##

1
backup perform -t my_backup