day34笔记(4月21日)

备份任务实战

客户端

客户端需求:
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=nhhipsnnzyfkbfcf
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 2022-04-23 18:51  Cloud~Commander  阅读(40)  评论(0编辑  收藏  举报