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