备份案例
-
准备:
- 三台服务器,一台做服务(backup)另外两台(web01,nfs01)作为客户机.
-
客户端要求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
5.客户端每天凌晨1点定时执行该脚本
-
根据要求客户端准备
-
1.准备一个目录backup,目录下面文件格式要带上主机名,ip地址,时间
mkdir -p backup
echo “$(hostname)” #打印主机名称
ifconfig eth1 |awk ‘/inet / {print $2}’#取ip地址
echo “$(ifconfig eth1 |awk ‘/inet / {print $2}’)” #打印ip地址
echo “$(date +%F)” #打印时间
-
组合起来:mkdir -p “/backup/KaTeX parse error: Expected group after '_' at position 11: (hostname)_̲(ifconfig eth1 |awk '/inet/ {print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲'|head -1)_(date +%F)” #加-p在/backup目录下创建
-
2.将文件备份到该目录中
cp -r /etc/rc.local /etc/fstab /etc/hosts /上面创建的目录
-
3.使用rsync命令进行运输
rsync -avz /backup/ rsync_backup@172.16.41::backup
-
4.保留最近七天
find /backup -type d -mtime +7 |xargx rm-rf
-
5.编写定时任务
#backup 00 01 * * */usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null
-
编写脚本(将手动执行的12345写成一个脚本)
创建一个目录:mkdir /scripts 编写脚本:vim /scripts/clinet_push_daata.sh #!/usr/bin/bash #客户端推送备份的数据至备份服务器 #0.将目录需要用的主机名,ip,时间,定义为变量,把开头设置为大写避免有冲突.写上PATH的路径 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin Host=$(hostname) Ip=$(ifconfig eth1 |awk '/inet / {print $2}') Sj=$(date +%F) Bfck=/bacup Dirname="${Host}_${Ip}_${Sj}" #1.我们要准备一个目录,使用我们上面设置的变量备份目录 mkdir -p "$Bfck/$Dirname" #2.将文件复制到该目录 cp -r /etc/rc.local /etc/fstab /etc/hosts $Bfck/$Dirname #3.使用rsync命令进行运输,可以给密码设置个变量,不用输入密码 export RSYNC_PASSWORD=123456 rsync -avz $Bfck/ rsync_backup@172.16.1.41::backup #4.保留本地七天的数据 find $bfck -type d -mtime +7 |xargs rm -rf
-
-
服务端要求
-
1.服务端部署rsync,用于接收客户端推送过来的备份数据
已完成(如果没有完成,请自行操作)2.服务端需要每天校验客户端推送过来的数据是否完整
客户端压缩要求:
-
我们如果要将备份的数据加上校验吗就需要用:md5sum对文件进行标识;-c用来验证.
-
对文件进行压缩打包:
tar czf $Bfck/$Dirname/syc.tar.gz etc/rc.local etc/fstab #用czf格式进行压缩;压缩到哪里交什么名字;压缩什么
-
对压缩包标识:
md5sum $Bfck/Dirname/*.tar.gz > $Bdck/Dirname/yanzheng_wenjian_$Sj #压缩标识后将标识信息重定向到yanzheng_wenjian_$Sj
服务端找到当天的验证文件,效验数据是否完整,并将结果存在某个文件(result_$Sj)
find /backup/ -type -f -name "yanzhegn_$Sj" |xargs md5-c >/backup/result_$Sj
3.服务端需要每天校验的结果通知给管理员
mail -s "Rsync Backup $Time" #收件人邮箱 <$Path/result_$Time #-s指定邮件主题(名称);将验证文件输入到里面
4.服务端仅保留6个月的备份数据,其余的全部删除
find $Path -type d -mtime +180 | xargs rm -rf
-
-
编写脚本文件
vim /scripts/check_clinet_data.sh #!/usr/bin/bash #检查客户端推送的数据 #0.将备份用的目录设置为变量,更改备份位置方便,时间也设置变量 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin Sj=$(date +%F) Bdck=/backup #1找到当天的check_flag文件,校验数据是否是完整的,并且将校验结果存储至某个文件中 find $Bdck/ -type f -name "yanzhegn_wenjian_$Sj" |xargs md5sum -c > $Bdck/result_$j #2.将效验的结果通知给管理人员(收件人) mail -s "Rsync Backup $Time" 1350638104@qq.com <$Path/result_$Time #3.服务端紧保留六个月的备份数据,其余全部删除 find $Bdck -type d -mtime +180 |xargs rm -rf
-
配置发件人邮箱账号密码:vim /etc/mail
set from=1350638104@qq.com set smtp=smtps://smtp.qq.com:465 set smtp-auth-user=1350638104@qq.com set smtp-auth-password=wubifsbdjkelidha #qq邮箱授权码 set smtp-auth=login set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/
-
添加定时任务
-
sh命令路径+脚本路径
-
which sh ##/usr/bin/sh
-
/usr/bin/sh /scripts/check_clinet_data.sh
-
将输出打到空:
[root@backup opt]# crontab -l #将验证信息发送到qq邮箱 00 01 * * * /usr/bin/sh /scripts/check_clinet_data.sh &>/dev/null
-
-
-
然后快速备份一台新的机器?
直接备份脚本文件到本机跟下,然后添加定时任务
rsync -avz 172.16.1.31:/scripts /
[root@nfs ~]# crontab -e * * * * * /usr/bin/sh /scripts/clinet_push_data.sh &>/dev/null
-