rsync服务:
rsync备份方式:
全备:完全备份
增备:差异备份
rsync备份模式:
1.本地备份:(类似于cp)
rsync [option...] SRC DEST
#传目录下文件文件
[root@nfs ~]# rsync -a test/ /tmp/
#连带目录传输
[root@nfs ~]# rsync -a test /tmp/
2.异地备份(远程备份,类似于scp)
#推 push: rsync [option...] SRC [USER@]HOST:DEST
#推送目录下文件:
[root@nfs ~]# rsync -avz test/ root@172.16.1.41:/tmp/
#推送目录:
[root@nfs ~]# rsync -avz test root@172.16.1.41:/tmp/
#拉 pull: rsync [option...] [USER@]HOST:SRC DEST
#拉取目录下文件
[root@nfs ~]# rsync -avz root@172.16.1.41:/tmp/ ./
#连带目录及文件都拉取
[root@nfs ~]# rsync -avz root@172.16.1.41:/tmp ./
注意:带 '/' 与 不带 '/' 的区别
带 '/' :拉去或推送目录下文件
不带 '/' :拉取或推送目录及下面的文件
3.守护进程
**服务端:**
1> 下载安装
[root@backup ~]# yum install -y rsync
2> 配置文件
#运行服务的用户id
uid = rsync
#运行服务的用户组id
gid = rsync
#服务的端口
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 = welcome to oldboyedu backup!
#备份的真实地址
path = /backup
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = yes
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
######################################
[data]
path = /data
3> 创建系统用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M
4> 创建虚拟用户的密码文件
#指定虚拟用户
auth users = rsync_backup
#指定虚拟用户的密码文件
secrets file = /etc/rsync.passwd
[root@backup ~]# echo 'rsync_backup:123456' > /etc/rsync.passwd
####授权####
[root@backup ~]# chmod 600 /etc/rsync.passwd
5> 创建备份目录
[root@backup ~]# mkdir /backup
#授权
[root@backup ~]# chown -R rsync.rsync /backup/
6> 启动服务
[root@nfs backup]# systemctl start rsyncd
#检验服务启动
[root@nfs backup]# netstat -lntp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7582/rsync
tcp6 0 0 :::873 :::* LISTEN 7582/rsync
[root@nfs backup]#
**客户端:**
1> 下载安装
[root@backup ~]# yum install -y rsync
2> 配置密码文件
[root@nfs ~]# echo '123456' > /etc/rsync_passwd
####授权####
[root@nfs ~]# chmod 600 /etc/rsync_passwd
**客户端演示推送方法:**
1> 拉 pull:
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /backup
2> 推 push:
#推目录下文件
[root@nfs backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup
#连带目录推送
[root@nfs backup]# rsync -avz /backup rsync_backup@172.16.1.41::backup
3> 推送拉取数据使用密码文件
[root@nfs backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync_passwd
4> 推送拉取数据使用环境变量
[root@nfs backup]# export RSYNC_PASSWORD=123456
[root@nfs backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup
[root@nfs ~]# cat ~/.bashrc
export RSYNC_PASSWORD=123456
#保持文件属性
fake super = yes
传输文件属性没变
#保持文件属性
fake super = no
传输文件属性变化
#不能跳出传送指定目录
use chroot = true
#是否可以查看模块列表
list = false
[root@nfs backup]# rsync -avzL rsync_backup@172.16.1.41::
#是否可以查看模块列表
list = true
[root@nfs backup]# rsync -avzL rsync_backup@172.16.1.41::
backup welcome to oldboyedu backup!
[root@nfs backup]# rsync -avzL rsync_backup@172.16.1.41::
backup welcome to oldboyedu backup!
data welcome to linux7 backup!
传输报错排查:
1> 查看服务端配置文件模块名
2> 查看服务端密码文件格式 rsync_backup:123456
3> 服务端密码文件权限是否为 600
4> 服务是否启动
5> 客户端密码文件格式是否为 123456
6> 客户端密码文件权限是否为 600
7> 客户端推的时候,服务端备份目录权限是否为 rsync.rsync
8> 防火墙,selinux是否关闭
rsync选项:
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件
1> 限速传输
--bwlimit=100
#平均速率为1M
[root@nfs backup]# rsync -avzP --bwlimit 1 /backup/ rsync_backup@172.16.1.41::backup
[root@nfs backup]# rsync -avzP --bwlimit=1 /backup/ rsync_backup@172.16.1.41::backup
sending incremental file list
./
test.txt
135,266,304 25% 1.01MB/s 0:06:17
2> 让目标目录和源目录数据保持一致(无差异同步)
--delete
#保持传输数据与源文件相同
[root@nfs backup]# rsync -avzP --bwlimit=1024 /backup/ rsync_backup@172.16.1.41::backup --delete
sending incremental file list
deleting dir{1.10}/
deleting dir2/
deleting dir10/
deleting dir1/
./
sent 183 bytes received 76 bytes 518.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs backup]#
#拉取时:
[root@nfs backup]# rsync -avzP rsync_backup@172.16.1.41::backup /backup --delete
receiving incremental file list
deleting dir2/
deleting dir1/
deleting 123/
./
sent 34 bytes received 183 bytes 144.67 bytes/sec
total size is 0 speedup is 0.00
[root@nfs backup]#
3> 指定排除不需要传输的文件模式
--exclude=PATTERN #指定排除不需要传输的文件模式
#--exclude=dir3可以不用绝对路径,可用{}同时排除多个文件
[root@nfs backup]# rsync -avzP --exclude=dir3 /backup/ rsync_backup@172.16.1.41::backup
[root@nfs backup]# rsync -avzP --exclude={dir3,dir4} /backup/ rsync_backup@172.16.1.41::backup
--exclude-from=file #文件名所在的目录文件
#--exclude-from=1.txt 需要指定绝对路径
[root@nfs ~]# rsync -avzP --exclude-from=1.txt /backup/ rsync_backup@172.16.1.41::backup
rsync: failed to open exclude file 1.txt: No such file or directory (2)
rsync error: error in file IO (code 11) at exclude.c(1178) [client=3.1.2]
[root@nfs backup]# rsync -avzP --exclude-from=1.txt /backup/ rsync_backup@172.16.1.41::backup
客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据 2.服务端需要每天校验客户端推送过来的数据是否完整 3.服务端需要每天校验的结果通知给管理员 4.服务端仅保留6个月的备份数据,其余的全部删除
Rsync备份案例
客户端需求:
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
#!/bin/bash
#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}
#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
#!/bin/bash
#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}
#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC
#在本地打包备份
cd / && \
tar zcf $SRC/conf.tar.gz etc/rc.local etc/fstab etc/hosts
3.创建校验文件
#!/bin/bash
#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}
#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC
#在本地打包备份
tar zcf $SRC/conf.tar.gz /etc/rc.local /etc/fstab /etc/hosts &>/dev/null
#添加认证文件
md5sum $SRC/conf.tar.gz > $SRC/flag_$DATE
4.客户端最后将备份的数据进行推送至备份服务器
#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}
#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC
#在本地打包备份
tar zcf $SRC/conf.tar.gz /etc/rc.local /etc/fstab /etc/hosts &>/dev/null
#推送至备份服务器
export RSYNC_PASSWORD=123456
rsync -az /backup/ rsync_backup@172.16.1.41::backup
5.客户端每天凌晨1点定时执行该脚本
[root@nfs scripts]# crontab -e
#定时推送备份文件
* * * * * /bin/bash /scripts/client-push.sh
6.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
#修改时间
[root@nfs scripts]# for i in `seq -w 30`;do date -s "201911$i";sh client-push.sh;done
#删除七天前文件
#!/bin/bash
#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}
#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC
#在本地打包备份
tar zcf $SRC/conf.tar.gz /etc/rc.local /etc/fstab /etc/hosts &>/dev/null
#推送至备份服务器
export RSYNC_PASSWORD=123456
rsync -az /backup/ rsync_backup@172.16.1.41::backup
#删除七天前的文件
find /backup/ -type d -mtime +7 | xargs rm -rf
服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
#!/bin/bash
#定义变量
DIR=/backup
DATE=$(date +%F)
#验证文件完整性
md5sum -c $DIR/*_$DATE/flag_$DATE
3.服务端需要每天校验的结果通知给管理员
#安装邮件服务
[root@backup ~]# yum install -y mailx
#配置邮件服务
[root@backup ~]# vim /etc/mail.rc
#写在最下面,只修改QQ号和授权码
set from=123@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=123@qq.com
set smtp-auth-password=gclbfastnbgcbabg
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
#测试发送邮件
mail -s "备份结果" 1240206455@qq.com < $DIR/*_$DATE/check.txt
----------------------------------------------------------------------------
[root@backup ~]# vim /scripts/server-backup.sh
#!/bin/bash
#定义变量
DIR=/backup
DATE=$(date +%F)
#验证文件完整性
md5sum -c $DIR/*_$DATE/flag_$DATE > $DIR/*_$DATE/check.txt
#发邮件给管理员
mail -s "备份结果" 1240206455@qq.com < $DIR/*_$DATE/check.txt
4.服务端仅保留6个月的备份数据,其余的全部删除
#删除七天前的文件
[root@backup ~]# vim /scripts/server-backup.sh
#!/bin/bash
#定义变量
DIR=/backup
DATE=$(date +%F)
#验证文件完整性
md5sum -c $DIR/*_$DATE/flag_$DATE > $DIR/*_$DATE/check.txt
#发邮件给管理员
mail -s "备份结果" 1240206455@qq.com < $DIR/*_$DATE/check.txt
find /backup/ -type d -mtime +180 | xargs rm -rf