1. 什么是备份
对一个文件创建副本
2.为什么要做备份
保证数据安全
快速恢复数据
3.备份应该怎么做
增量:效率高,耗时短,占用空间小
全量:效率低,耗时长,占用空间大
4.常用备份工具
cp 本地备份
scp 远程拷贝,全量备份
rsync 远同步,全量和增量备份
5.rsync三大传输模式
1) 本地传输
[root@backup ~]#rsync -avz /etc/ /tmp/
2)远程传输
下载
[root@backup ~]# rsync -avz root@172.16.1.31:/etc/hosts ./
上传
[root@backup ~]#rsync -avz /etc/hostst root@172.16.1.41:./
3)守护进程
配置文件
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync # 运行进程的用户
gid = rsync # 运行进程的用户组
port = 873 # 监听端口
fake super = yes # 不需要rsync已root身份运行,就可以存储文件的完整属性
use chroot = no # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200 # 最大连接数
timeout = 600 # 超时时间
ignore errors # 忽略错误信息
read only = false # 对备份数据可读写
list = false # 不允许查看模块信息
auth users = rsync_backup # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径
[backup] # 定义模块信息
path = /backup # 定义接收备份数据目录
根据配置文件做以下操作
创建进程用户
[root@backup ~]# useradd rsync -M -s /sbin/nologin
创建虚拟用户以及虚拟用户的密码
/etc/rsync.passwd
rsync_backup:1
格式:Username:Password
创建接受备份数据的目录
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
启动服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
检查服务
[root@backup ~]# netstat -lntp
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 22463/rsync
测试
将本地文件或目录推送到服务端
[root@nfs01 ~]# rsync -avz /etc/host rsync_backup@172.16.1.41::backup
把服务端文件或目录下载到本地
[root@nfs01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./
| -| - |
| -a | #详细模式输出, 打印速率, 文件数量等 |
| -z | #传输时进行压缩以提高效率 |
| -r | #递归传输目录及子目录,即目录下得所有目录都同样传输。|
| -t | #保持文件时间信息 |
| -o | #保持文件属主信息 |
| -p | #保持文件权限 |
| -g | #保持文件属组信息 |
| -l | #保留软连接 |
| -P | #显示同步的过程及传输时的进度等信息 |
| -D | #保持设备文件信息 |
| -L | #使用的信道协议,指定替代rsh的shell程序 -e 'ssh' |
| --exclude=PATTERN | #指定排除不需要传输的文件模式 |
| --exclude-from=file | #文件名所在的目录文件 |
| --bwlimit=100 | #限速传输 |
| --partial | #断点续传 |
|--delete | #让目标目录和源目录数据保持一致 |
6. 案列
客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
5.客户端每天凌晨1点定时执行该脚本
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员 (邮件)
4.服务端仅保留6个月的备份数据,其余的全部删除
主机名
[root@backup ~]# hostname
IP地址
[root@backup ~]# ifconfig eth1 | awk '/inet / { print $2 }'
时间
[root@backup ~]# date +%F
mkdir -p /backup/$(hostname)_$(ifconfig eth1 | awk '/inet / { print $2 }')_$(date +%F)
编写脚本
客户端:
[root@backup~]#vim /scripts/client_push_data_server.sh
#!/usr/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PASH=/backup
HOST=$(hostname)
ADDR=$(ifconfig eth1 |awk '/inet / {print $2}')
DATE=$(date +%F)
DEST=$PASH/${HOST}_${ADDR}_${DATE}
#创建对应的备份目录
[ -d $DEST ] || mkdir -p $DEST
#拷贝需要的文件至目录
cd / && \
[ -f $DEST/sys.tar.gz ] || tar czf $DEST/sys.tar.gz etc/passwd etc/fstab etc/hosts && \
[ -f $DEST/other.tar.gz ] || tar czf $dest/other.tar.gz var/spool/cron scripts
#添加标记
[ -f $DEST/flag_${DATE} ] || md5sum $DAST/*.tar.gz > $DEST/flag_${DATE}
#推送
export RSYNC_PASSWORD=1
rsync -avz $PASH/ rsync_backup@172.16.1.41::backup
#保留七天之内的备份文件
find $PASH/ -type d -mtime +7 |xargs rm -rf
服务端:
[root@backup ~]# vim /scripts/chech_data_notify.sh
#!/usr/bin/bash
Path=/backup
Date=$(date +%F)
#校验推送过来的数据
md5sum -c $Path/*/flag_${Date} > $Path/result_${Date}
#通知管理人员结果
mailx -s “校验结果_${Date}” "2872730810@qq.com" <$Path/result_${Date}
定时任务
[root@backup ~]#crontab -e
00 05 * * * sh /scripts/chech_data_notify.sh &>/dev/null