Linux服务器利用rsync和crontab自动差异备份整站的方法

魔王先生 建站知识 1年前 7011℃ 0
摘要:

论备份的重要性这个话题已经毋庸再次讨论,相信很多小站长都有体会了,但是每次整站备份花费的时间太长,而且备份失败的几率也非常大(线路不稳定等原因),于是学习了一下rsync,以后就增量备份了,适当的时候...

论备份的重要性这个话题已经毋庸再次讨论,相信很多小站长都有体会了,但是每次整站备份花费的时间太长,而且备份失败的几率也非常大(线路不稳定等原因),于是学习了一下rsync,以后就增量备份了,适当的时候再做整站备份。已制作成脚本,方便下次使用。

服务端配置:(全部复制粘贴到命令行,回车搞定!)

cd ~
yum remove rsync -y
# https://download.samba.org/pub/rsync/ 最新版的来这里找
wget http://download.mr.mw/other/rsync-3.1.3.tar.gz
tar -zxvf rsync-3.1.3.tar.gz
cd rsync-3.1.3
./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 = 0
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
auth users = 用户名
[server_1]
# 客户端1文件的保存路径
path = /home/backup/server_1
[server_2]
# 客户端2文件的保存路径
path = /home/backup/server_2
EOF
echo '用户名:密码'>/usr/local/rsync/etc/rsyncd.secrets
chmod 600 /usr/local/rsync/etc/rsyncd.secrets

至此,rsync服务端(备份机)已经安装完毕,并且创建了一个用户名为***,密码为***的账户(我为了省事每个客户端使用的是同一个账户和密码,如果你不怕麻烦可以单独设定),保存文件目录为/home/backup/server_1 和/home/backup/server_2 。

服务端rsync需要一直后台运行,以备客户端同此机器联系。注如果在删除和安装rsync时错误,可能是因为系统太纯净,会提示缺少相应的gcc文件,则敲上这个:

yum install gcc -y

,再执行安装命令即可。

/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,安装方法同服务端一样(软件也一样,只是不用再添加用户),一般centos上都自带,不用设置。

yum install rsync -y

rsync客户端配置很简单, /root 目录下创建一个shell文件夹,再创建2个文件(分别名为:backup.sh和rsync.password)就OK了。

操作如下:

cd ~
mkdir shell
cd shell
vi backup.sh

编辑,里面粘上以下内容:

#!/bin/bash
BAK_DIR=/home/wwwroot/db.backup/
MYSQL_USER=root
MYSQL_PASS=数据库密码
 
#======================================================================
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 +5 -type f | xargs rm -rf
rsync -avzP --delete --password-file=/root/shell/rsync.password /home/wwwroot/ 用户名@服务端ip::server_1

退出编辑保存,继续创建rsync.password文件:

vi rsync.password

里面输入你服务端创建的那个账号的密码  

退出编辑保存

修改密码文件的权限,这点很重要,否则无法执行。

chmod 600 rsync.password

好了,客户端rsync搞定。

再配合上Centos定时任务就可以实现定时自动备份了。操作如下:

先敲个安装命令看看crontabs安装了没:

yum -y install vixie-cron crontabs

然后依次敲入如下命令测试下定时任务是不是正常工作:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
chkconfig --level 35 crond on //加入开机自动启动:
service crond status //查看crontab服务状态:

下面设定执行计划:

crontab -e

粘上以下内容:

30 1 * * * sh /root/shell/backup.sh

每天凌晨1点30执行任务(如果想设其他频率 可以参考《CentOS使用crontab运行定时任务详解》这篇文章学习一下)

保存退出,

reboot 重启 全部搞定!!

对了,忘了重要的一件事了,如果你开启了iptables防火墙,你必须要把873端口打开,下面给一个简单的防火墙配置:(全部复制粘贴到命令行,回车搞定!)

yum install iptables
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A OUTPUT -j ACCEPT 
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 
iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
iptables -A INPUT -p tcp --dport 873 -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
chkconfig --level 345 iptables on 
service iptables save 
service iptables start
service iptables restart
iptables -L -n

========================================

再加一个遇到的问题:

如果运行一段时间后发现这个最大连接数限制的问题,

Linux服务器利用rsync和crontab自动差异备份整站的方法

请修改服务器端的rsync配置文件(rsyncd.conf):

把默认最大连接数5改成0:

max connections = 0

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。