posts - 30,  comments - 0,  views - 9449

day34笔记(4月21日)

备份任务实战

今天的任务主要以实际备份任务入手,完成综合练习,完成对rsync的综合运用。
先思考、再学习

目标:
0.不要去看任何其他人的答案、思路,自己独立思考,这就是你今天领导突然给你的一个任务,自己独立尝试解决。
1.看问题、拆解这个需求
2.没学过的知识点可以先放着,基本是全学过的
3.只需要考虑,如何通过命令,解决每一步的需求。
4.做好的,或者做差不多的,可以发在各自小组里,截图即可。

客户端

客户端需求:
1.客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录) 
2.客户端备份的数据必须存放至以 "主机名_ip地址_当前时间" 命名的目录中
3.客户端最后通过rsync推送本地已经打包好的备份文件至backup服务器 
4.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间


1.思路:由于备份命令过长,建议使用脚本的形式交给定时任务执行

systemctl   start   crond
crontab  -e   
00  01  *  *  *  /my_crontab.sh
每天凌晨1点

2.思路:分别取出需求中的值,可以有两种写法$()或者``,注意添加的目录需求是/backup/目录下

#主机名取值  
$(hostname)
`hostname`

#ip取值    
$(ifconfig  eth0 | awk  'NR==2{print $2}')
`ifconfig  eth0 | awk  'NR==2{print $2}'`

#当前时间取值    
$(date '+%F')
`date '+%F'`

#创建/backup目录
mkdir -p  /backup`hostname`_`ifconfig  eth0 | awk  'NR==2{print $2}'`_`date '+%F'`

#进入目录后再打包,防止出现斜线(有歧义)
cd / tar  -zcf   /backup/`hostname`_`ifconfig  eth0 | awk  'NR==2{print $2}'`_`date '+%F'`/etc.tgz  etc  
cd / tar  -zcf   /backup/`hostname`_`ifconfig  eth0 | awk  'NR==2{print $2}'`_`date '+%F'`/log.tgz  var/log


3.思路,使用rsyncd服务备份数据到指定机器(推送)
注意密码文件或密码变量,密码文件的虚拟用户和密码要与服务端指定的一致
注意虚拟用户传输的语法:rsync 参数  源文件  虚拟用户@主机名或ip::模块名

systemctl   start   rsyncd
ps  -ef  | grep  rsync
netstat   -tunlp | grep rsync

rsync -avzP --password-file=/etc/rsync.password   /backup/    rsync_backup@10.0.0.41::backup


4.有两中写法
写法一:
find   /backup/     -mtime  +7  |xargs  -i rm -rf  {}
写法二:
find  /backup/     -mtime  +7  -delete


总体流程:
1、安装rsync
yum  install  rsync  -y


2、将需求写成脚本
vim   /my_crontab.sh
#!/bin/bash

# 主动在脚本中,定义path变量,防止命令无法执行
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#创建指定的backup目录,并打包
mkdir -p /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")

cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/etc.tgz  etc

cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/log.tgz  var/log

#生成校验码
md5sum /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/*.tgz > /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/all_data_md5.txt

#打开rsyncd服务,并将登录密码写入文件
systemctl   start   rsyncd
echo  '123123' >/etc/rsync.password
rsync  -aczP --password-file=/etc/rsync.password /backup/   rsync_backup@10.0.0.41::backup
find  /backup/     -mtime  +7  -delete

3、赋予脚本执行权限
chmod  u+x   /my_crontab.sh

4、开启定时任务,设定定时任务
systemctl   start   crond
crontab  -e
00 01 * * *  /bin/bash  /my_crontab.sh

5、调试脚本
bash  -x  /my_crontab.sh

服务端

服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据 
#安装rsync
yum install  rsync  -y

#修改配置文件/etc/rsync.conf
uid = rsync
gid = rsync
fake super = yes # 无需让rsync以root身份运行即可保存文件完整属性
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.178.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup]
comment = This is  backup!
path = /backup/

[data]
comment = this is secord backup dir,to website data..
path = /data

#根据rsyncd.conf中定义的目录,创建目录、用户
useradd   rsync   -s  /sbin/nologin  -M  
mkdir -p /data/   /backup/
chown -R rsync.rsync /backup/
chown -R rsync.rsync /data/

#配置用于Rsync复制的账户、密码、文件权限,在Rsync备份服务端创建
echo  'rsync_backup:123123'  >  /etc/rsync.password   #客户端向rsync服务器推送数据用的账号密码

chmod 600 /etc/rsync.password  #这一步,非常重要,rsync要求降低密码文件的权限,且必须是600

#启动rsync服务
systemctl    start rsyncd
systemctl   restart  rsyncd   #如果已开启需要重启服务

2.服务端需要每天校验客户端推送过来的数据是否完整 
md5sum -c /backup/nfs-31_10.0.0.31_$(date "+%F")/all_data_md5.txt  

3.服务端需要每天校验的结果通知给管理员 
yum  install   mailx  -y
vim  /etc/mail.rc
set from=915082263@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=915082263@qq.com
set smtp-auth-password=邮箱验证密码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

#服务端生成校验结果文件:
md5sum -c /backup/nfs-31_10.0.0.31_$(date "+%F")/all_data_md5.txt  > /backup/nfs-31_10.0.0.31_$(date "+%F")/check_md5_result.txt

#校验发送命令,把校验结果发给指定的qq邮箱
# 语法 mail -s "邮件主题" 邮箱 < 邮件正文

mail -s "check-rsync-$(date +%F)" 9150822263@qq.com < /backup/nfs-31_10.0.0.31_$(date "+%F")/check_md5_result.txt

4.服务端仅保留6个月的备份数据,其余的全部删除 
注意:所有服务器的备份目录必须都为/backup
客户端需求拆解
find  /backup/   -type f  +mtime +180  -delete


-------------------------------------------------------------------
写一个脚本,设置定时任务,完成2、3、4需求
vim  /my_check.sh
#!/bin/bash
#生成校验后的数据
md5sum -c /backup/nfs-31_10.0.0.31_$(date "+%F")/all_data_md5.txt  > /backup/nfs-31_10.0.0.31_$(date "+%F")/check_md5_result.txt

#发邮件
mail -s "check-rsync-$(date +%F)" 915082263@qq.com < /backup/nfs-31_10.0.0.31_$(date "+%F")/check_md5_result.txt

#删除旧资料
find /backup/ -type f -mtime +180 -delete


#授权
chmod  u+x  /my_check.sh

#设置一个定时任务
crontab   -e
* * * * *  /bin/bash  /my_check.sh
posted on   Cloud~Commander  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示