linux备份任务

客户端需求:

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

服务端需求::

1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
注意:所有服务器的备份目录必须都为/backup

客户端拆解需求

tar命令打包,尽量以相对路径去打包
/etc目录是为了备份系统配置文件,应用配置文件
/var/log是为了备份所有应用程序得日志

以后见到需求,某任务,要写入定时任务

把其他所有的事全搞定了,最后再去写入定时任务

1,需求创建/backup目录
[root@nfs-31 ~]#mkdir /backup


打包文件目录
[root@nfs-31 ~]#cd / && tar -zcf /backup/etc.tgz etc
[root@nfs-31 /]#cd / && tar -zcf /backup/log.tgz var/log
[root@nfs-31 /]#ll -h /backup/
total 11M
-rw-r--r-- 1 root root 9.4M Apr 21 16:25 etc.tgz
-rw-r--r-- 1 root root 741K Apr 21 16:26 log.tgz


#文件夹命令

客户端备份数据必须存放到以 主机名_ip地址_当前年月日 命名得目录中
如:nfs-31_10.0.0.31_2022-04-21

提取主机名
[root@nfs-31 /]#hostname
nfs-31


提取ip地址
[root@nfs-31 /]#ip addr show eth1 |awk -v FS='[ /]*' 'NR==3{print $3}'
172.16.1.31
[root@nfs-31 /]#ifconfig eth0 |awk 'NR==2{print $2}'
10.0.0.31



提取时间
[root@nfs-31 /]#date +%F
2022-04-21


拼接在一起
[root@nfs-31 /]#mkdir -p /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")



检查客户端目录
[root@nfs-31 /]#ls /backup/
etc.tgz  log.tgz  nfs-31_10.0.0.31_2022-04-21



备份etc和log数据,到这个目录中
[root@nfs-31 /]#cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/etc.tgz  etc


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



查看备份文件夹
[root@nfs-31 /]#tree /backup/
/backup/
└── nfs-31_10.0.0.31_2022-04-21
    ├── etc.tgz
    └── log.tgz

1 directory, 2 files




#校验文件,生成校验值得文件

[root@nfs-31 ~]#md5sum /backup/$(hostname)_$(ifconfig eth0 |awk 'NR==2{print $2}')_$(date "+%F")/*.tgz > /backup/$(hostname)_$(ifconfig eth0 |awk 'NR==2{print $2}')_$(date "+%F")/mk5zhi.txt



[root@nfs-31 ~]#ls /backup/nfs-31_10.0.0.31_2022-04-21/
etc.tgz  log.tgz  mk5zhi.txt


[root@nfs-31 /backup]#cat nfs-31_10.0.0.31_2022-04-21/mk5zhi.txt 
c4998f19a73e7f343334ad389b37c7d2  /backup/nfs-31_10.0.0.31_2022-04-21/etc.tgz
7b8aa8480d81be05e44828a59cba7d25  /backup/nfs-31_10.0.0.31_2022-04-21/log.tgz

#传输文件

客户端最后通过rsync命令推送本地打包得备份文件到rsync服务器

把/backup目录下得数据,发给备份服务器
去看看rsync服务端得账户密码

客户端得添加密码
[root@nfs-31 /]#export RSYNC_PASSWORD=123456

备份过去
[root@nfs-31 /]#rsync -avzP /backup/  rsync_backup@rsync-41::backup


[root@rsync-41 /]#tree /backup/
/backup/
└── nfs-31_10.0.0.31_2022-04-21
    ├── etc.tgz
    └── log.tgz

1 directory, 2 files







#删除过期文件

客户端服务器本地保留最近7天的数据,避免浪费磁盘空间

[root@nfs-31 /]#find /backup -type f -mtime +7 -delete

#整合脚本

把客户端的所有部署操作,写成脚本,待会交给定时任务执行即可

把上述拆解的过程,写成一个脚本、批量执行。



#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

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}')

export RSYNC_PASSWORD=123456
rsync -avzP /backup/  rsync_backup@rsync-41::backup

find /backup -type f -mtime +7 -delete



#可以调试脚本

只显示执行过程,不会真的执行,
bash -x 能让你看到脚本执行过程,用于调试脚本,不会真的产生数据变动,只会看到执行得过程日志

[root@nfs-31 ~]#bash -x rsync.sh 

#定时任务

确保crond是否运行
[root@nfs-31 ~]#systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-04-21 15:07:53 CST; 2h 16min ago
 Main PID: 655 (crond)
   CGroup: /system.slice/crond.service
           └─655 /usr/sbin/crond -n

Apr 21 15:07:53 nfs-31 systemd[1]: Started Command Scheduler.
Apr 21 15:07:53 nfs-31 systemd[1]: Starting Command Scheduler...
Apr 21 15:07:53 nfs-31 crond[655]: (CRON) INFO (RANDOM_DELAY will be scaled w....)
Apr 21 15:07:53 nfs-31 crond[655]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.

写定时任务
crontab -e
0 1 * * * /bin/bash  /root/rsync.sh
最后再执行

服务端拆解需求

#rsyncd服务端部署脚本

服务端部署rsync服务,用于接收客户端推送过来得备份数据
安装rsync服务
yum install rsync -y


[root@rsync-41 ~]#cat rsync.sh 
#!/bin/bash

cat >/etc/rsyncd.conf <<EOF
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd 
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = yuchaoit.cn about rsync
path = /backup

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

mkdir -p /{backup,data}
chown -R www:www /backup
chown -R www:www /data

touch /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

echo "rsync_backup:123456"

systemctl restart rsyncd



给脚本添加执行权限

[root@rsync-41 ~]#chmod u+x rsync.sh 
[root@rsync-41 ~]#./rsync.sh 

也可以不添加,直接bash执行
[root@rsync-41 ~]#bash rsync.sh 

服务端仅保留6个月的备份数据,其余都删除

[root@rsync-41 ~]#find /backup -type f -mtime +7 -delete

#校验数据的完整性

服务端需要每天校验客户端推送过来的数据是否完整
再rsync服务端,可以通过md5sum命令校验文件完整性

[root@rsync-41 ~]#md5sum -c /backup/nfs-31_10.0.0.31_2022-04-21/mk5zhi.txt 
/backup/nfs-31_10.0.0.31_2022-04-21/etc.tgz: OK
/backup/nfs-31_10.0.0.31_2022-04-21/log.tgz: OK

邮件通知

让脚本执行的结果,告诉运维,它正确的执行了,数据备份也是没问题的
如果有问题,运维看到邮件也会立即去处理

运维在公司里,每天第一件事就是打开邮箱,看看其他组的同事是否发来故障邮件,然后根据邮件解决问题
回复邮件

服务端需要每天校验的结果通知福安李渊

安装配置mailx
[root@rsync-41 ~]#yum install mailx -y


邮箱配置文件,给自己的信息
你的邮箱的smtp协议,需要打开你的qq,163邮箱的smtp功能
如下的信息,改为你自己的即可
邮箱的授权码,需要自己去获取

[root@rsync-41 ~]#cat /etc/mail.rc 
set from=635568448@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=635568448@qq.com
set smtp-auth-password= 2333333
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/


服务端生成备份数据校验结果文件,把这些信息发个邮件给运维的邮箱
[root@rsync-41 ~]#md5sum -c /backup/nfs-31_10.0.0.31_2022-04-21/mk5zhi.txt > /backup/nfs-31_10.0.0.31_2022-04-21/check_md5_result.txt


校验发送命令,把这个结果发给自己的qq邮箱
语法 mail -s "邮件主题" 邮箱 < 邮件正文

[root@rsync-41 ~]#mail -s "0224-chech-rsync-$(date +%F)" 635568448@qq.com < /backup/nfs-31_10.0.0.31_2022-04-21/chech_md5_result.txt 
[root@rsync-41 ~]#Error in certificate: Peer's certificate issuer has been marked as not trusted by the.




mail -s "0224-chech-rsync-$(date +%F)" 635568448@qq.com < /backup/nfs-31_10.0.0.31_2022-04-21/check_md5_result.txt

服务端仅保留6个月的备份数据,其余都删除

[root@rsync-41 ~]#find /backup -type f -mtime +7 -delete

#服务端生成脚本

[root@rsync-41 ~]#cat youxiang.sh 
#!/bin/bash
# 1. 对备份的数据校验,生成校验文件
md5sum -c /backup/nfs-31_10.0.0.31_$(date +%F)/mk5zhi.txt > /backup/nfs-31_10.0.0.31_2022-04-21/check_md5_result.txt

# 2.发邮件
mail -s "0224-chech-rsync-$(date +%F)" 635568448@qq.com < /backup/nfs-31_10.0.0.31_2022-04-21/chech_md5_result.txt

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

#写入定时任务

客户端
0 1 * * * /bin/bash /root/rsync.sh

服务端
0 1 * * * /bin/bash /root/youxiang.sh

总结

能手敲,千万别复制

posted @ 2022-04-21 21:05  并不是那么牛  阅读(97)  评论(0)    收藏  举报