一步一个脚印
分类: LINUX
2013-04-23 23:44:37
目的:使用rsync定时自动增量备份远程服务器上的数据,包括网站目录、数据库。
为什么要这么做:
一般只有一台服务器,万一出现故障,那就彻底玩完了。当然,如果你有预算,那再加一台做双机互备最好不过了!但是如果你没有,本地备份也算个折中的办法!
LUM的备份功能,这个功能貌似很强大,可以问问度娘,因为我没有闲置的FTP。本地做FTP,又没有固定IP。
1、安装srync服务端(我的是centos,如果你是BSD,使用ports安装)
# 先搜索一下rsync具体的名字是什么
yum search rsync
# 搜索结果会显示完整的rsync名,接下来安装他,安装很快。
yum install rsync.x86_64
2、配置服务端 rsync
rsyncd.conf 是rsync服务器主要配置文件。
rsyncd.passwd是登录rsync服务器的密码文件。
# 编辑 /etc/rsyncd.conf(没有就建一个)
vi /etc/rsyncd.conf# 输入如下内容
# 通用配置(指定传输文件UID,pid文件存放位置,日志存放位置)
uid = root
gid = root
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
# 以下是所有的模块,每一个模块指定一个需要备份的目录(客户端备份时只需指定模块名就可以了)
[web1] #此为模块名称
path = /home/ftp/1520/web1-xxx/ #指定需要备份的目录
ignore errors
read only = true #是否只读
list = false
hosts allow = 223.21.39.41 #允许连接的客户端IP
auth users = backup #指定用于连接验证的用户名
secrets file = /etc/rsync.passwd #密码校验文件
[date1]
path = /home/mysql_data/sql1/
ignore errors
read only = true
list = false
hosts allow = 121.18.126.142
auth users = backup
secrets file = /etc/rsync.passwd# 需要说明的两个配置
# hosts allow 如果客服端在内网,请填写外网IP。注释掉将允许任何连接,这时请设置一个相对复杂的密码(不建议注释!)
# auth users 网上很多资料说这里设置的用户名必须是系统真实存在的,经过测试,这里和系统用户一点关系没有,可以随便指定!只用来做客户端的验证!
3、建立密码校验文件 rsync.passwd
vi /etc/rsync.passwd # 按如下格式输入用户名密码
backup:123456 #这里建议输入一个较为复杂的密码
4、设置此密码文件所属用户和组都为 root,且权限必须为600
chown root:root /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
5、重启rsync
# centos使用xinetd方式运行rsync,所以重启xinetd就OK了。
chkconfig rsync on
service xinetd restart
# 这里如果出现错误,大多数是因为没有xinetd。安装一下就ok了。
yum search xinetdyum install xinetd.x86_64 #重新执行重启xinetd命令
# 到这里服务端的配置就已经完成了,处于等待连接的状态!下面进行客户端的安装和配置!
6、随便找一台闲置电脑,安装任意系统(我这里安装的centos,rsync有WIN版本,也是可以的)
7、客户端安装rsync
# 安装步骤同上
8、建立密码文件/etc/rsync.passwd
# 客户端不需要配置文件,仅一个密码文件就可以了,且密码文件中只包含密码,没有用户名。
vi /etc/rsync.passwd# 内容如下 (与服务端backup密码一致)
123456
9、修改rsync.passwd 用户权限和组
chown root:root /etc/rsync.passwd
chmod 600 /etc/rsync.passwd #权限必须为600
10、执行同步命令
/usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd backup@xxx.xxx.xxx.xxx::web1 /home/ftp/1520/web1-xxx/
# /usr/local/rsync/bin/rsync 为rsync命令所在的路径 服务器环境不同路径可能不同 通过 find -name rsync 命令查找正确的路径 做相应的调整
# backup@xxx.xxx.xxx.xxx::web1,backup为服务端设置的用户名,@后为远程服务器IP地址,web1为服务端配置文件中设置的模块名。
# --delete 表示如果远程服务器删除某文件,同步时也将本地此文件删除,保证文件一致性。
# --password-file 指定客户端密码文件存放位置
# 最后的路径为 将远程文件备份至本地的路径。
# 更多的命令参数可以google一下,能找到很多!
11、编辑一个shell脚本,备份的时候执行,或加入计划任务!
# 脚本可以放在任何位置,这里为了方便管理,统一放在 /usr/local/LuNamp/cmd
cd /usr/local/
mkdir shell
cd shell
vi web_backup.sh # 脚本内容
#!/bin/sh
/usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd backup@xxx.xxx.xxx.xxx::web1 /home/ftp/1520/web1-xxx/
SYC_STAT=$?
if [ "$SYC_STAT" != 0 ];then
echo"web1 backup error!"
echo $(date +%Y"-"%m"-"%d" "%H":"%M":"%S) ' backup error' >> /var/log/web_backup.log
else
echo "web1 backup ok!"
echo $(date +%Y"-"%m"-"%d" "%H":"%M":"%S) ' backup ok' >> /var/log/web_backup.log
fi
用ll 看看刚写的shell 有没有可执行权限 如果没有 就执行下面这句
chmod u+x web_backup.sh
# 给这个文件加 可执行权限 ,因为默认 vi 写的一个文件 只是 读和写的权限 ,没有 x ,即执行的权限 x --- execute u -- user ,文件拥有者
# 如果你有多个模块,可以拷贝以上代码,增加到下面,修改一下模块名称及备份到本地的目录,还有提示信息就可以了。shell是顺序执行的。
# 脚本里的echo xxx>> /var/log/web_backup.log 是将备份的时间和是否成功的记录存放到一个日志里。方便检查。
12、建立脚本中的日志文件
cd /var/log/
vi web_backup.log# 以后所有备份的记录都放在这里,方便检查
# 日志只有两个状态,一个OK,一个ERROR,其他的我也不会写。哦而看看,能知道哪天没有备份成功就可以了。
13、手动执行备份任务,或者加入计划任务
# 不想加入计划任务的。每次手动执行一下这个脚本就可以了。
/usr/local/shell/web_backup.sh
# 加入计划任务,每天凌晨3点进行备份(如下图)。
crontab -e # 计划任务如何写 google一下
0 3 * * * /usr/local/shell/web_backup.sh
14、如果想备份完成后自动关机,在脚本的最后增加一行
shutdown -h now
15、如果想需要备份的时候,备份机自动开机,并在设定的时间备份完成,然后自动关机。
# 使用 网卡网络唤醒,我的本地机器电源没有ATX。所以不行!有的可以自己实验。
这里有网络唤醒的详细介绍:
注: 备份为增量备份,如果数据较大,第一次备份的时间较长,以后就快了,只会备份新增的,或者修改过的文件。
要限制传输速度 不然流量过高.大陆那些鸟机房会认为被攻击. 然后断网...
加个限速参数就可以了 “--bwlimit=100” 限制传输速度100K/s/usr/local/rsync/bin/rsync -vzrtopg --bwlimit=100 --delete --progress --password-file=/etc/rsync.passwd backup@xxx.xxx.xxx.xxx::web1 /home/ftp/1520/web1-xxx/
更多信息可以参考
以上是rsync deamon 方式
rsync ssh 方式参考
rsync 多对一布局 具体的请参考