VPS定时自动备份终极指南

2012年05月21日 Linux服务器 评论 9 条 阅读 11,576 views 次

闲话不多说,大家都知道数据的重要性。下面直接进入正题。
假设网站所在的VPS为A,存储备份的VPS为B,系统均为 CentOS 备份方法为 B 定时向 A 拉数据来备份。

 

一、VPS A 上面的具体部署

 

1. 安装 rsync

yum -y install rsync

把rsync加入开机启动

echo 'rsync --daemon' >> /etc/rc.d/rc.local

 

2. 设置rsync密码

echo '你的用户名:你的密码' > /etc/rsyncd.scrt
chmod 600 /etc/rsyncd.scrt

这里的用户名和密码,在VPS B上将会用到

 

3. 配置rsync

vim /etc/rsyncd.conf

放入以下内容, #后面是我的注释

uid = root
gid = root
use chroot = no
read only = yes
max connections = 10

port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
#log file = /var/log/rsync.log # 偶不想记录log
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

[www]
path = /var/www/
comment = 21andy.com
ignore errors
read only = yes
list = no
auth users = andy
secrets file = /etc/rsyncd.scrt
#exclude = 21andy.com/blog/cache/ #不需要备份的目录,我使用exclude from方法来排除
exclude from = /etc/rsync_exclude.txt
hosts allow = 备份服务器的IP
hosts deny = *

4. 排除不备份的目录

 

vim /etc/rsync_exclude.txt

输入不备份的目录,每行一个,不可以用绝对路径,而必须用上面配置文件中path的相对路径,如

21andy.com/blog/cache/
21andy.com/manual/

5. 制作一个重启rsync的脚本

 

vim /root/rsyncd_restart.sh

放入以下内容

kill -9 `cat /var/run/rsyncd.pid`
rm -f /var/run/rsyncd.pid
rm -f /var/run/rsyncd.lock
rsync --daemon

然后执行

chmod 600 /root/rsyncd_restart.sh
chmod +x /root/rsyncd_restart.sh

现在直接用 /root/rsyncd_restart.sh 来重新启动 rsync 进程

6. 备份 MySQL 的脚本

 

此脚本可同时备份多个数据库,并进行gzip压缩,按日期目录保存,3天之前的备份将被自动删除

vim /root/mysql_backup.sh
由于代码在发布的过程中,有一些被过滤掉了,所以现在以附件的形式上传
下载地址http://www.opsers.org/shell/mysql_backup.sh
chmod 600 /root/mysql_backup.sh
chmod +x /root/mysql_backup.sh

好了,加入 crontab 每天00:00定时自动备份

00 00 * * * /root/mysql_backup.sh

至此,网站所在VPS A上的部署已经都完成了!接下来在备份VPS B上进行设置来拉备份。

二、VPS B 上面的具体部署

 

1. 安装 rsync

yum -y install rsync

这里不需要加入开机启动了,因为是客户端,不是服务端

 

2. 设置rsync密码

echo '你在A上设置的密码' > /etc/rsync.pass
chmod 400 /etc/rsync.pass

 

3. 测试一下同步

rsync -avzP --delete --password-file=/etc/rsync.pass 用户名@192.168.0.100::www /var/rsync/21andy.com/

这条命令,我说明一下几个要点,-avzP是啥,自己搜索相关参数说明

--delete 是为了比如A上删除了一个文件,同步的时候,B会自动删除那个文件

--password-file 刚才设置那个密码,要和A上的一样,这样cron运行的时候,就不需要密码了

4. 加入crontab每天00:30同步

30 00 * * * rsync -avzP --delete --password-file=/etc/rsync.pass 用户名@192.168.0.100::www /var/rsync/21andy.com/ > /dev/null 2>&1

OK!至此大功告成!不怕丢数据了,天天自动备份!

如果还要再保险一点,再加个VPS C

C来同步B,双重备份,哪个挂了都不怕!转自:http://www.21andy.com/blog/20120520/2026.html

9 条留言  访客:5 条  博主:4 条

  1. 这个不错可以以后用到真实环境,但是不知道老板舍不舍得花钱买那么多服务器用来备份~~

  2. avatar shixinyu

    貌似MySQL那个备份脚本有点问题,执行备份的命令应该用mysqldump,另外那个小于号应该是大于号,不然就是导入恢复数据的动作了。

    • 由于代码在发布的过程中,有一些被过滤掉了,所以现在以附件的形式上传
      下载地址http://www.opsers.org/shell/mysql_backup.sh
      感谢提醒!!

  3. 楼主,这个文章中的代码显示十分清晰实用,请问用的是什么插件?谢谢

    • 没有用任何的插件,只是我自己写的一段代码。
      把文章中的代码放到< pre >然后对pre进行CSS定义一下就可以了!

  4. 羽飞兄,文章写的很好额,交换个友链吧,你的我已经加上了。。

  5. avatar 此生注定漂泊

    羽飞老师你好,看你的文章很久了,不知道为什么你的网站加载有点慢,不够流畅.

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录