周期性定时备份:
每天晚上00点整在Web服务器A上打包备份网站程序目录并通过rsync命令推送到服务器B上备份保留。
具体要求如下:
1、Web服务器A和备份服务器B的备份目录必须都为backup
2、Web服务器站点目录为(/var/www/html)
3、Web服务器仅保留7天内的备份
4、备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱
5、备份服务器上每周六的数据保留,其他备份仅保留180天备份
#rsync服务端和客户端配置自动化配置脚本http://blog.51cto.com/ygtq666/2061975
#简单安装NFS服务端和客户端http://blog.51cto.com/ygtq666/2063025
#1、实现推送(A端推送到B端),关于rsync和NFS服务器的就可以查看我的前2篇博文
[root@nfs01 ~]# cd /backup/
[root@nfs01 backup]# ls #检查nfs客户端backup目录里面的文件
html_2018-02-02_00.gz.tar html_2018-02-02_01.gz.tar old.txt
[root@nfs01 backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password #推送到backup服务端
sending incremental file list
./
html_2018-02-02_00.gz.tar
html_2018-02-02_01.gz.tar
old.txt
sent 529 bytes received 68 bytes 1194.00 bytes/sec
total size is 322 speedup is 0.54
[root@backup backup]# ls #backup服务器检查是否推送到位
html_2018-02-02_00.gz.tar html_2018-02-02_01.gz.tar old.txt
#2、打包、推送、删除、定时任务脚本(A端)
IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}')
Path=/backup
if [ $(date +%w) -eq 0 ]
then
Time="week_$(date +%F_%w -d "-1day")"
else
Time=$(date +%F -d "-1day")
fi
mkdir $Path/$IP/ -p
cd / &&\
tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
rsync -az $Path/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password &&\
find /backup/ -type f -mtime +7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs rm -f
脚本理解:
IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}')
取出IP作为变量表示
Path=/backup
backup目录作为一个变量
Time=$(date +%F)
时间段做一个变量
mkdir $Path/$IP/ -p
脚本开始前创建backup目录里面创建一个IP地址目录
cd / && \
tar zcfh $Path/$IP/backup$Time.gz.tar var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs && \
#变量表示$Path表示#/backup目录,$IP表示IP地址的目录,$Time表示时间段
把var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs这4个目录加上时间段打包到/backup目录的IP地址目录下
md5sum $Path/$IP/backup$Time.gz.tar>$Path/$IP/flag_$Time.log && \
这条命令是上面执行完打包文件后有了打包文件之后在把打包文件加上指纹存放到日志里面
rsync -avz $Path/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password && \
最后把backup目录里面的内容推送到备份服务器上
find $Path -type f -name ".gz.tar" -name ".log" -mtime +7|xargs rm -f
本地服务器删除7天以前的打包文件和日志
#3、保留每周6数据,删除180天以前的数据,发邮件给管理员(B端)
[root@backup scripts]# /etc/init.d/postfix start #B端开启邮件队列,否则无法发送。
[root@backup scripts]# vi /etc/mail.rc #B端配置邮件把下面的配置命令放到这个文件的最后一行
set from=发送邮件的邮箱@163.com smtp.163.com smtp-auth-user=邮箱的客户端授权码 smtp-auth-password=bmw665889 smtp-auth=login
B端服务器发送邮件脚本
#编写脚本:
IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}')
Path=/backup
if [ $(date +%w) -eq 0 ]
then
Time="week_$(date +%F_%w -d "-1day")"
else
Time=$(date +%F -d "-1day")
fi
LANG=en &&\
/bin/find /backup -type f -name "flag_${Time}*.log"|xargs md5sum -c >>$Path/${Time}_result.log 2>&1
/bin/mail -s "$Time bak result" 接受邮件的邮箱@qq.com <$Path/${Time}_result.log && \
/bin/find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f
脚本理解:
Path=/backup =》把backup目录赋值给Path变量
if [ $(date +%w) -eq 0 ] =》判断语句如果
then
Time="week$(date +%F%w -d "-1day")" =》如果是周日文件加上week_减少一天的日期
else
Time=$(date +%F -d "-1day") =》否则不加文件名还是减少一天的日期
fi =》语句结束
LANG=en &&\ =》英文字符
/bin/find /backup -type f -name "flag_${Time}.log"|xargs md5sum -c >>$Path/${Time}result.log 2>&1
#/bin/find /backup -type f -name "flag${Time}.log" =》查找以flag_时间格式的log文件
xargs md5sum -c >>$Path/${Time}_result.log 2>&1 =》排成一行用md5sum验证后把结果放到以backup目录下以时间开头_result.log文件中
/bin/mail -s "$Time bak result" 157245227@qq.com <$Path/${Time}_result.log && \ =》把md5sum验证的结果发送邮件到157245227@qq.com这个邮箱中
/bin/find /backup/ -type f -mtime +180 ! -name "week_6*"|xargs rm -f =》删除180天以前的备份文件,保留每周6的文件
接触Linux不久的小白个人理解,大神级别可以无视
转载至http://blog.51cto.com/ygtq666/2064935