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

  1. 就是给源文件 增加 一个 副本.
  2. U
  3. 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的安装及配置

导读:一般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 /