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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律