使用Rsync做远程增量(差异)备份笔记
受限于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可以访问就可以了)