1.什么是备份?
sync -vzrtopg --progress --delete --password-file=/etc/rsyncd.pass rsync@10.10.8.9::zzcbf /data/cmdata >>/opt/apps/'data +%Y-%m-%d'_cmdata.log
就是给源文件 增加 一个 副本.
U盘
D --> E
2.为什么要做备份?
1.数据重要?
2.防止误操作
3.能够快速恢复
3.能不能不做备份?
可以, 不重要的数据可以不用考虑?
4.备份使用什么方式?
全量备份,每次都是完全拷贝,效率低下
增量备份,每次仅拷贝发生变化的文件,效率高
5.备份使用的工具有哪些?
本地备份: cp
远程备份: scp rsync sz rz
6.rsync 远程同步工具
实现主机与主机之间的同步, 实现增量的同步. linux\windows\mac
PS: 如果将rsync当一个服务来使用,则需要知道 rsync 是个 c/s架构
7.rsync 推和拉 两种方式
推
拉
推和拉结合使用
8.rsync传输模式
8.1本地传输模式
1.本地传输 ---> cp
2.远程传输 ---> scp
3.守护进程 --->
#等价于cp命令
Local: rsync [OPTION...] SRC... [DEST]
命令 选项 源 目标
[root@backup ~]# rsync -zvrh test/ ~/me/test
8.2 远程文件同步—shell方式
8.2.1 上传(使用密码简单传输)
上传 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
命令 选项 源 系统用户 主机IP 目标位置
1.我要将我本地的那个文件,推送至那台服务器的那个目录,使用的是什么用户
rsync -avz ./backup_file root@172.16.1.31:/opt/
root@172.16.1.31's password: #输入31的root密码
#
# 从本地传到远端(上传),目标文件会被写成ssh登录用户的属组和属主(如下 www)
[root@sync opt]# rsync -avH /opt/nginx-1.12.1/ www@172.18.50.125:/tmp/nginx/
# 使用 ssh 加密隧道方式传输,保障数据的安全性
[root@sync opt]# rsync -avHe ssh /opt/nginx-1.12.1/ www@172.18.50.125:/tmp/nginx/
8.2.2 下载(使用密码简单传输)
下载 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
命令 选项 系统用户 主机IP
2.我要下载那个主机的那个目录下的文件,使用的是什么系统用户. 然后下载到我本地的那个位置
[root@backup ~]# rsync -avz root@172.16.1.31:/opt/backup_file ./file.txt
root@172.16.1.31's password: #输入31的root密码
# 从远端传到本地(下载),只要对目标文件有读的权限,就可以同步到本地
[root@sync opt]# rsync -avH www@172.18.50.125:/tmp/nginx/ /tmp/nginx/
# 如果远程服务器ssh端口不是默认的22
[root@sync opt]# rsync -avHe "ssh -p 11222" /opt/nginx-1.12.1/ www@172.18.50.125:/tmp/nginx/
8.2.3 目录: /etc/ /etc 区别?
#推送/etc/目录下的所有文件
[root@backup ~]# rsync -avz /etc/ root@172.16.1.31:/opt
#推送/etc目录以及目录下的所有文件
[root@backup ~]# rsync -avz /etc root@172.16.1.31:/opt
8.2.4 Rsync借助SSH协议同步数据存在的缺陷 ( 使用对端主机的用户名和密码 系统 )
1.使用系统用户(不安全)
2.使用普通用户(会导致权限不足情况)
问题:
1.rsync -avz /etc/ root@172.16.1.31:/opt ---> 172.168.1.31
2.路径问题
3.普通用户权限
8.3远程文件同步—daemon方式
注意:使用rsync协议传输必须在服务端和客户端都安装rsync
守护进程模式--->一直在后台持续的运行
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
9.Rsync的安装及配置
安装
9.1 安装方式(yum安装)
[root@backup ~]# yum install rsync -y
2.配置 ( 改变程序运行轨迹 )
9.2安装方式(rpm包安装)
centos7 rsync地址
wget https://mirror.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/rsync-3.1.2-10.el7.x86_64.rpm
rpm -ivh ./*.rpm即可
服务端配置
rsync服务端有一下三个配置文件:/etc/rsyncd.conf
主配置文件,没有就手动生成rsyncd.secrets
密码文件rsyncd.motd
rysnc服务器信息
9.3 配置路径及方式详解
注意:如果默认使用root用于传输,则不需要进行下列9.3.1步骤,设置如下:
[root@backup ~]# cat /etc/rsyncd.conf
uid = root
gid = root
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]
path = /backup
普通用户传输
#先定义整体变量
secrets file = /etc/rsyncd.secrets
motd file = /etc/rsyncd.motd
read only = yes
list = yes
#uid = rsync #nobody 为任何用户
#gid = rsync #nobody 为任何用户组
uid = rsync
gid = rsync
hosts allow = 192.168.0.110 #哪些主机可以访问rsync服务
hosts deny = 192.168.0.0/24 #哪些主机不可以访问rsync服务
max connections = 2
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
#再定义要rsync的目录
[backup]
path = /home/backup
list=yes # 允许列清单
ignore errors
auth users = test,backup
comment = backup log files
exclude = file1/ file2/
如果使用普通用户传输,则一定要保证普通用户对要备份传输的目录具有读写权限
9.3.1 根据配置创建一些初识环境:
3.1创建rsync用户 rsync程序需要rsync这个用户来运行
# groupadd rsync
# useradd -M -s /sbin/nologin rsync -g rsync
# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
3.2 虚拟用户
rsyncd.secrets是存储rsync服务的用户名和密码的,需要自己手动创建,它是一个明文的文本文件,权限设为600,只有属主可以读写,密码文件格式为:user:password
自定义虚拟用户配置文件
/etc/rsync.passwd username:password
# echo "rsync_backup:123456" > /etc/rsync.passwd
使用默认虚拟用户配置文件
/etc/rsyncd.secrets username:password
# chmod 600 /etc/rsync.passwd
3.3 创建一个/backup目录
# mkdir /backup
# chown -R rsync.rsync /backup/
9.9.3 定义rsyncd.motd
rsyncd.motd主要定义用户登录rsync服务的欢迎信息,可以自己根据需求定义,跟FTP登录界面一样如:
#vim /etc/rsyncd.motd
Welcome to use the game log rsync services!
9.4 启动并检测服务是否在运行
centos7 启动rsync
# systemctl start rsyncd
# systemctl enable rsyncd
也可以使用这种方式启动
rsync --daemon --config=/etc/rsync/rsyncd.conf
检测
# netstat -lntp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 8616/rsync
客户端配置
9.5 客户端需配置同步密码,密码需配置为与上面虚拟用户的密码一致
常用参数
-v :展示详细的同步信息
-a :归档模式,相当于 -rlptgoD
-r :递归目录
-l :同步软连接文件
-p :保留权限
-t :将源文件的"modify time"同步到目标机器
-g :保持文件属组
-o :保持文件属主
-D :和--devices --specials一样,保持设备文件和特殊文件
-z :发送数据前,先压缩再传输
-H :保持硬链接
-n :进行试运行,不作任何更改
-P same as --partial --progress
--partial :支持断点续传
--progress :展示传输的进度
--delete :如果源文件消失,目标文件也会被删除
--delete-excluded :指定要在目的端删除的文件
--delete-after :默认情况下,rsync是先清理目的端的文件再开始数据同步;如果使用此选项,则rsync会先进行数据同步,都完成后再删除那些需要清理的文件。
--exclude=PATTERN :排除匹配PATTERN的文件
--exclude-from=FILE :如果要排除的文件很多,可以统一写在某一文件中
-e ssh :使用SSH加密隧
--delete 这个参数 (让目标目录和源目录数据保持一致) 危险?
#推: 源有什么,目标就有什么
[root@nfs ~]# rsync -avz /root/ rsync_backup@172.16.1.41::backup --delete
#拉: 目标主机有什么, 本地就有什么
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup ./ --delete
--bwlimit 限速, 这个参数? 1000兆 125MB/s
虚拟机最高的峰值 25MB/s 5MB/s ---> 取决于实际的情况
单位=KB
10.开始传输
客户端配置
- 从 服务端=>客户端 同步数据
# 会提示输入密码
[root@50_110 ~]# rsync -avzP --delete rsync_backup@192.168.1.125::backup /tmp/sync/
- 从 客户端=>服务端 同步数据
# 会提示输入密码
[root@50_110 ~]# rsync -avzP --delete /tmp/sync/ @192.168.1.125::125to110
注: 如果是 /tmp/sync,则同步sync目录;如果 /tmp/sync/,则同步sync目录下的文件
免密码同步:
提前准备一个文件 (只有密码的文件), 然后使用 --password-file 指定位置
# echo "123456" > /etc/rsync.pass
# chmod 600 /etc/rsync.pass
# rsync -avzP --delete /tmp/sync/ sate@192.168.1.125::125to110 --password-file=/etc/rsync.pass
6.使用
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
[root@nfs ~]# rsync -avz ./anaconda-ks.cfg rsync_backup@172.16.1.41::backup
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt
7.客户端每次都需要使用密码? 免密码同步
1.设定变量 RSYNC_PASSWORD (后面写脚本的时候)
# export RSYNC_PASSWORD=123456
# rsync -avz rsync_backup@172.16.1.41::backup /opt
2.提前准备一个文件 (只有密码的文件), 然后使用 --password-file 指定位置
# echo "123456" > /etc/rsync.pass
# chmod 600 /etc/rsync.pass
# rsync -avz rsync_backup@172.16.1.41::backup /opt --password-file=/etc/rsync.pass
# rsync -avzP --bwlimit=5120 ubuntu-18.04.1-desktop-amd64.iso rsync_backup@172.16.1.41::backup
sending incremental file list
ubuntu-18.04.1-desktop-amd64.iso 159,186,944 8% 5.12MB/s 0:05:41
# rsync -avzP --exclude-from=pc.txt rsync://192.168.0.128/yum ./
参考文章地址:
https://www.cnblogs.com/xiaozi/p/11018496.html
https://blog.csdn.net/u010637366/article/details/108450047
11.配置邮件通知
------------------------------------------------------------------------------
客户端
[root@nfs ~]# mkdir /scripts
[root@nfs ~]# cat /scripts/clinet_push_data_server.sh
------------------------------------------------------------------------------
#!/usr/bin/bash
# variables == 变量 ---> 一个固定的字符串表示一个不固定的值
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Src=/backup
Host=$(hostname)
Addr=$(ifconfig eth1 | awk 'NR==2 {print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
#1.准备对应的备份目录
[ -d $Src/$Dest ] || mkdir -p $Src/$Dest
#2.将文件拷贝至备份目录
cd / && \
[ -f $Src/$Dest/sys.tar.gz ] || tar czf $Src/$Dest/sys.tar.gz etc/fstab etc/hosts etc/passwd && \
[ -f $Src/$Dest/other.tar.gz ] || tar czf $Src/$Dest/other.tar.gz var/spool/cron/ scripts/ && \
#3.添加标记
[ -f $Src/$Dest/flag_${Date} ] || md5sum $Src/$Dest/*.tar.gz > $Src/$Dest/flag_${Date}
#4.推送数据至远程仓库
export RSYNC_PASSWORD=123456
rsync -avz $Src/ rsync_backup@172.16.1.41::backup
#5.保留本地最近7天的数据
find $Src/ -type d -mtime +7 | xargs rm -rf
#批量的模拟数据
[root@nfs ~]# for i in {1..30};do date -s "201909$i"; sh /scripts/clinet_push_data_server.sh ; done
------------------------------------------------------------------------------
服务端
------------------------------------------------------------------------------
#1.服务端配置邮件功能
[root@backup /]# yum install mailx -y
[root@backup /]# vim /etc/mail.rc #跳转至最后一行,然后进入编辑模式
set from=805836539@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=805836539@qq.com
set smtp-auth-password=yvnndztijuambfbh
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
#2.测试一下是否能发送成功
mail -s "测试一下" 收件人@qq.com < /etc/hosts
#3.编写脚本
[root@backup ~]# cat /scripts/check_data_notify.sh
#!/usr/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Src=/backup
Date=$(date +%F)
#1.校验每天客户端推送过来的flag数据
md5sum -c ${Src}/*_${Date}/flag_${Date} >${Src}/result_${Date}
#2.邮件通知管理员
mail -s "Rsync Backup ${Date}" 525501433@qq.com < ${Src}/result_${Date}
#3.保留最近180天的数据
find $Src/ -type d -mtime +180 | xargs rm -rf
------------------------------------------------------------------------------
定时任务是否有问题
------------------------------------------------------------------------------
客户端
[root@nfs ~]# crontab -l
#定时备份数据
*/1 * * * * sh /scripts/clinet_push_data_server.sh &>/dev/null
服务端
[root@backup ~]# crontab -l
#定时校验备份的结果
*/1 * * * * sh /scripts/check_data_notify.sh &>/dev/null
------------------------------------------------------------------------------
如何在增加一台客户端备份
------------------------------------------------------------------------------
[root@web01 ~]# rsync -avz root@172.16.1.31:/scripts /