受限于HK的小水管,每次整站备份花费的时间太长,而且备份失败的几率也非常大,于是学习了一下rsync,以后就增量备份了,适当的时候再做整站备份。已制作成脚本,方便下次使用。

cd ~
yum remove rsync -y
wget https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz
tar -zxvf rsync-3.1.2.tar.gz
cd rsync-3.1.2
./configure --prefix=/usr/local/rsync
make && make install
mkdir -p /usr/local/rsync/etc /usr/local/rsync/var/run /usr/local/rsync/var/log
cat > /usr/local/rsync/etc/rsyncd.motd<<EOF
++++++++++++++++++++++++++++++++++++
Welcome to the Remote Backup Server!
++++++++++++++++++++++++++++++++++++
EOF
cat > /usr/local/rsync/etc/rsyncd.conf<<EOF
# Configuration file for rsync daemon
# https://download.samba.org/pub/rsync/rsyncd.conf.html
port = 873
uid = root
gid = root
use chroot = false
read only = false
write only = false
hosts allow = *
max connections = 5
log format = %t %a %m %f %b
syslog facility = local3
secrets file = /usr/local/rsync/etc/rsyncd.secrets
motd file = /usr/local/rsync/etc/rsyncd.motd
pid file = /usr/local/rsync/var/run/rsyncd.pid
log file = /usr/local/rsync/var/log/rsyncd.log
list = false
ignore errors = true
ignore nonreadable = false
timeout = 600

[server_1]
path = /home/backup/server_1
auth users = account
EOF
echo 'account:password'>/usr/local/rsync/etc/rsyncd.secrets
chmod 600 /usr/local/rsync/etc/rsyncd.secrets

至此,rsync服务端(备份机)已经安装完毕,并且创建了一个用户名为account,密码为password,目录为/home/backup/server_1的账户

服务端rsync需要一直后台运行,以备客户端同此机器联系。

/usr/local/rsync/bin/rsync --daemon  --config=/usr/local/rsync/etc/rsyncd.conf

开机启动

echo "/usr/local/rsync/bin/rsync --daemon  --config=/usr/local/rsync/etc/rsyncd.conf" >>/etc/rc.local

关闭rsync的方法

kill -HUP `cat /usr/local/rsync/var/run/rsyncd.pid`  //每次修改配置文件都需要重启rsync

也需要此服务器上安装rsync,安装方法同服务端一样(软件也一样,只是不用再添加用户),不多说。

如何使用呢?在客户端运行

rsync -avzP /home/wwwroot/ account@host::server_1
然后输入密码(输入密码不可见,故没有变化,输入完成直接回车),第一次会全备份,第二次再执行该命令的时候就只备份有变化的文件

如果需要服务端和客户端数据一致(即当客户端删除文件,服务端也随着删除),需要添加参数--delete,命令为

rsync -avzP --delete /home/wwwroot/ account@host::server_1
某些特殊情况下,无法手动输入密码,我们可以通过制定密码文件,让软件自己读取,命令如下:
echo 'password'>/root/shell/rsync.password #写入密码到文件供rsync读取
chmod 600 /root/shell/rsync.password #修改密码文件权限
rsync -avzP --password-file=/root/shell/rsync.password /home/wwwroot/ account@host::server_1

如果再配合定时任务(Crontab),就可以自动备份了

一般,数据库文件都不大,天天全备份应该没有啥问题,再附加一个带mysql备份(客户端执行)的

#!/bin/bash
BAK_DIR=/home/wwwroot/db.backup/
MYSQL_USER=root
MYSQL_PASS=passwd
#======================================================================
timestamp=`date +%s`; mydate=`date +%Y%m%d`; BakName=${mydate}_${timestamp}.tar.gz
if [ ! -d $BAK_DIR ]; then mkdir -p $BAK_DIR; fi;
#------------------------Tar Db to backup dir--------------------------
mysql -u${MYSQL_USER} -p${MYSQL_PASS} -B -N -e 'SHOW DATABASES' | xargs > ${BAK_DIR}mysqldata
sed -i 's/information_schema//g' ${BAK_DIR}mysqldata; sed -i 's/performance_schema//g' ${BAK_DIR}mysqldata; sed -i 's/mysql//g' ${BAK_DIR}mysqldata
for db in `cat ${BAK_DIR}mysqldata`; do (mysqldump -u$MYSQL_USER -p$MYSQL_PASS --lock-all-tables --databases ${db} | gzip -9 - > ${BAK_DIR}${db}.sql.gz); done;
tar zcvf ${BAK_DIR}sql_${BakName} -C ${BAK_DIR} --exclude=*.tar.gz --exclude=mysqldata .
rm -rf ${BAK_DIR}*.sql.gz
#------------------------Del old files---------------------------------
find $BAK_DIR -mtime +30 -type f | xargs rm -rf
rsync -avzP --password-file=/root/shell/rsync.password /home/wwwroot/ account@host::server_1
定时任务
0 0 * * * sh /root/shell/backup.sh

根据情况,自行修改一下就可以使用了

参考:http://www.cnblogs.com/mchina/p/2829944.html

后续:

为什么使用root用户?因为某些用户创建的文件,匿名用户权限不够,无法读写以及上传等

配置文件中,仅仅使用hosts allow = ip 就可以,host deny不用配置(使用仅仅允许指定IP可以访问就可以了)