Linux服务器利用rsync和crontab自动差异备份整站的方法
摘要:论备份的重要性这个话题已经毋庸再次讨论,相信很多小站长都有体会了,但是每次整站备份花费的时间太长,而且备份失败的几率也非常大(线路不稳定等原因),于是学习了一下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
========================================
再加一个遇到的问题:
如果运行一段时间后发现这个最大连接数限制的问题,
请修改服务器端的rsync配置文件(rsyncd.conf):
把默认最大连接数5改成0:
max connections = 0