阿里云CentOS 的自动备份方案 — rsync + crontab
时间:2014-08-26 23:12 来源:linux.it.net.cn 作者:it
备份是保证系统安全设置的重要环节, 不同的VPS提供商都提供一定程度的备份服务,比如DigitalOcean本身就提供 Snapshot和 Backup的两种备份服务,但并不是免费的,要另外付费的,其中Backup服务是一种异地自动备份的服务,非常实用! 阿里云目前只提供 快照(Snapshot)的备份服务,没有提供自动备份的功能。
不管怎么样,除了服务商提供的服务外,我们最好还是自己也有个备份的措施更放心些。
对于我来说,如果整个VPS仅仅用作Wordpress的博客,最简单的方法就是用Wordpress的一些备份插件,把WordPress的网站和数据库每天定时备份到自己云空间中(比如Google Drive或者Dropbox上)。
如果是其他类型的网站,则需要好好规划一下备份的方案。下面就以备份阿里云VPS中的数据为例来说明一下。
1. 需要备份哪些数据
一般来讲,如果要备份整个磁盘镜像,仍然需要使用服务商提供snapshot之类的功能比较好。
我们自己的备份,为了减少备份的负担和带宽的消耗,无需备份系统和软件,只需要备份 网站,数据库,配置文件,个人数据等。
主要有下面几个:
-
/etc 目录,虽然这里面有些内容实际上是无需备份的,但我个人也懒得把哪些需要备份的仔细挑出来, 而且这个目录的大小最多也就几十M。干脆就直接备份下来吧。
-
/home目录, 这个目录是用户个人的数据存放位置,当然要备份! 但需要注意的是,这个目录 下 有很多cache, history, log, download 之类的东西,这些其实都是无需备份的。 我的解决方法是找到具体需要备份的目录,比如 /home/aaa/mygitdata, /home/bbb/mydocs 等,仅仅备份这几个具体的目录,这样比用排除法更容易些。
-
/var/www目录, 这是web服务器的主目录,肯定是要备份的。 要备份整个目录,但是要注意:这里面有些程序或者插件会产出大量的日志/备份/缓存类的数据,这些要排除,否则备份的数据量会太大!
-
/var/spool/mail 目录,如果你开启了mail服务,备份整个目录
-
/var/lib/mysql 目录,数据库文件所在地, 整个备份!
备份了上面的数据,基本上就差不多了。
2. 完全备份还是增量备份
完全备份的方式,就是把上面的数据通过tar来打包,然后传送到具体的备份的地方。可以写个script, 只保留最近两次的备份。 这个方法在异地备份的情况下有个很大的问题,每次都要把上百兆的数据传送出去,严重消耗系统资源和带宽。不推荐。
增量备份,就是采用Linux自带的那个rsync命令, 每次只备份改动过的数据,这种方案对于远程备份来说是更好的选择
3. 本地还是异地备份
由于阿里云的主机的磁盘分为系统盘和数据盘,如果规划合理的话,可以把所有的需要备份的数据(/etc,/var , /home )都放在数据盘,备份时可以把这些数据备份到系统盘!
一般情况下,最好还是异地备份,比如把DigitalOcean的数据备份到阿里云上,把阿里云的数据备份到自己的工作机上。
3. 如何自动执行备份计划
利用系统的cron可以让备份每天晚上2:00左右自动执行。
解决了上面的问题以后, 自动异地增量备份的具体步骤如下:
假定我们要把主机A的数据定时备份到主机B上。
1) 检查在主机A和B上是否都安装了rsync,如果没有,用yum install rsync 来安装。
2)在主机B,用root用户登录(因为用到crontab系统的服务,最好还是用root比较方便),创建相应的目录
1
mkdir -p /var/VPSbackup/aliyun
3) 生成SSH密钥
1
ssh-keygen
执行完这个命令后,在/root/.ssh中会生成id-rsa(私钥文件), id_rsa.pub (公钥文件)
把id_rsa.pub这个文件上传到主机A上
1
scp /root/.ssh/id_rsa.pub root@A.com:/root/id_rsa.pub
在主机A上,把公钥文件附加到authorized_keys上 , 因为备份这个也涉及到权限问题,我们在主机A上也采用root用户
1
//如果在主机A上authorized_keys文件不存在,需要执行下面的命令
2
3
#mkdir -p /root/.ssh
4
5
#chmod 700 /root/.ssh
6
7
#touch /root/.ssh/authorized_keys
8
9
#chmod 600 /root/.ssh/authorized_keys
10
11
//追加公钥
12
13
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys.
这样的话,我们以后用scp 或者rsync来进行数据复制或同步的时候,就不需要输入密码了!
4)在主机B上 修改 /etc/crontab文件
1
SHELL=/bin/bash
2
3
PATH=/sbin:/bin:/usr/sbin:/usr/bin
4
5
MAILTO=youremail@domain.com
6
7
HOME=/
8
9
# For details see man 4 crontabs
10
11
# Example of job definition:
12
# .---------------- minute (0 - 59)
13
# | .------------- hour (0 - 23)
14
# | | .---------- day of month (1 - 31)
15
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
16
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
17
# | | | | |
18
# * * * * * user-name command to be executed
19
20
0 14 * * * root bash backup.sh #每天下午2点中自动执行备份的脚本
其中backup.sh的内容如下:
1
#!/bin/sh
2
3
/usr/bin/rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub" root@A.com:/etc /var/VPSbackup/aliyun
4
/usr/bin/rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa.pub" root@A.com:/home/someone/gitdata /var/VPSbackup/aliyun
5
/usr/bin/rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa.pub" root@A.com:/home/someone/projects /var/VPSbackup/aliyun
6
/usr/bin/rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub" --exclude mysite/updraft --exclude mysite/.cache root@A.com:/var/www /var/VPSbackup/aliyun</pre>
7
/usr/bin/rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub" root@A.com:/var/lib/mysql /var/VPSbackup/aliyun</pre>
说明一下:
–exclude: 指明不需要备份的东西。 这里的路径是针对于source的, 也就是说 –exclude mysite/updraft 是不备份 主机A上的 /var/www/mysite/updraft这个目录
–delete: 如果A主机某个文件删除了,备份时从B主机那里也删除这个文件
-e “ssh -i /root ….”: 选择采用ssh这个shell来在A和B之间通信和登录。 ssh -i identity-file: 指明用证书的方式来登录,而不是密码。
至此,通过rsync和cron来配置自动增量备份已经完成,你可以根据自己的情况在上面的脚本的基础上进行修改。
(责任编辑:IT)
备份是保证系统安全设置的重要环节, 不同的VPS提供商都提供一定程度的备份服务,比如DigitalOcean本身就提供 Snapshot和 Backup的两种备份服务,但并不是免费的,要另外付费的,其中Backup服务是一种异地自动备份的服务,非常实用! 阿里云目前只提供 快照(Snapshot)的备份服务,没有提供自动备份的功能。 不管怎么样,除了服务商提供的服务外,我们最好还是自己也有个备份的措施更放心些。 对于我来说,如果整个VPS仅仅用作Wordpress的博客,最简单的方法就是用Wordpress的一些备份插件,把WordPress的网站和数据库每天定时备份到自己云空间中(比如Google Drive或者Dropbox上)。 如果是其他类型的网站,则需要好好规划一下备份的方案。下面就以备份阿里云VPS中的数据为例来说明一下。 1. 需要备份哪些数据 一般来讲,如果要备份整个磁盘镜像,仍然需要使用服务商提供snapshot之类的功能比较好。 我们自己的备份,为了减少备份的负担和带宽的消耗,无需备份系统和软件,只需要备份 网站,数据库,配置文件,个人数据等。 主要有下面几个:
备份了上面的数据,基本上就差不多了。 2. 完全备份还是增量备份 完全备份的方式,就是把上面的数据通过tar来打包,然后传送到具体的备份的地方。可以写个script, 只保留最近两次的备份。 这个方法在异地备份的情况下有个很大的问题,每次都要把上百兆的数据传送出去,严重消耗系统资源和带宽。不推荐。 增量备份,就是采用Linux自带的那个rsync命令, 每次只备份改动过的数据,这种方案对于远程备份来说是更好的选择 3. 本地还是异地备份 由于阿里云的主机的磁盘分为系统盘和数据盘,如果规划合理的话,可以把所有的需要备份的数据(/etc,/var , /home )都放在数据盘,备份时可以把这些数据备份到系统盘! 一般情况下,最好还是异地备份,比如把DigitalOcean的数据备份到阿里云上,把阿里云的数据备份到自己的工作机上。 3. 如何自动执行备份计划 利用系统的cron可以让备份每天晚上2:00左右自动执行。
解决了上面的问题以后, 自动异地增量备份的具体步骤如下: 假定我们要把主机A的数据定时备份到主机B上。 1) 检查在主机A和B上是否都安装了rsync,如果没有,用yum install rsync 来安装。 2)在主机B,用root用户登录(因为用到crontab系统的服务,最好还是用root比较方便),创建相应的目录
3) 生成SSH密钥
执行完这个命令后,在/root/.ssh中会生成id-rsa(私钥文件), id_rsa.pub (公钥文件) 把id_rsa.pub这个文件上传到主机A上
在主机A上,把公钥文件附加到authorized_keys上 , 因为备份这个也涉及到权限问题,我们在主机A上也采用root用户
这样的话,我们以后用scp 或者rsync来进行数据复制或同步的时候,就不需要输入密码了! 4)在主机B上 修改 /etc/crontab文件
其中backup.sh的内容如下:
说明一下: –delete: 如果A主机某个文件删除了,备份时从B主机那里也删除这个文件 -e “ssh -i /root ….”: 选择采用ssh这个shell来在A和B之间通信和登录。 ssh -i identity-file: 指明用证书的方式来登录,而不是密码。 至此,通过rsync和cron来配置自动增量备份已经完成,你可以根据自己的情况在上面的脚本的基础上进行修改。 (责任编辑:IT) |