rsync实现数据备份

1.简介

rsync(remote synchronization)是一款开源的,快速的,多功能的,可实现全量和增量的的本地或远程数据同步备份的优秀工具。

2.功能

scp、cp、rm、增量备份

  • rsync通过'quick check'算法,它仅同步大小或者最后修改时间发生变化的文件或目录。也可以根据权限,属主等属性变化来同步,但需要指定参数。

3.特性

  1. 支持拷贝特殊文件。如链接文件,设备等
  2. 可以排除指定文件或目录,相当于tar打包中排除命令
  3. 同步时可以保持文件的属性不变(-p)
  4. 可以实现增量备份
  5. 可以使用rcp、rsh、ssh等方式来传输文件(rsync本身对传输不加密
  6. 可以通过socket传输文件或数据(服务器后客户端传输使用的端口是tcp873
  7. 支持匿名或认证的进程模式传输,可实现数据的安全备份

4.用法

4.1语法

  • Local:

    rsync [OPTION...] SRC... [DEST]
  • Access via remote shell:

    Pull: rsync [OPTION] USER@HOST:SRC... [DEST]

    rsync /etc/fstab root@10.1.1.210:/tmp

    Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
  • Access via rsync daemon:

    Pull: rsync [OPTION] USER@HOST::SRC... [DEST]

    rsync [OPTION...]rsync://USER@HOST[:PORT]/SRC... [DEST]

    Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

    rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

4.2选项

选项 作用
-avz 归档,同步时保留属性并压缩
-a archive 归档,用语同步时保留文件属性
-v verbose 同步过程信息
-z compress 压缩
-r recursive 递归
-t time 时间戳
-o owner 属主
-p permissive 权限
-g group属组
-P process 同步进度信息
-D device 保留设备信息
-l link 符号链接
-e 远程shell(默认ssh)
--exclude 排除文件
--bwlimit 带宽限制

5.运用场景

5.1实现两台服务器之间的数据同步cron+rsync

  1. 配置rsyncd服务端
  • 创建配置文件 vim /etc/rsyncd.conf

    id = rsync   #客户端连接到服务端后服务端进程执行者
    gid = rsync #执行组
    use chroot = no #是否chroot
    max connections = 100
    timeout 300
    strict modes = yes
    pid file = /var/run/rsyncd.pid #pid文件
    lock file = /var/run/rsyncd.lock #锁文件,保持文件一致性
    log file = /var/log/rsyncd.log #日志文件 [bak] #模块名称
    path = /bakup #备份目录
    comment = bakup file #模块说明
    ignore errors #忽略错误
    read only = no #可写
    hosts allow = * #允许
    hosts deny = 172.16.1.1 #拒绝
    list = false #能否被列表
    auth users = ruser #允许那些用户同步
    secrets file = /etc/rsync.passwd #用户帐号密码文件(权限必须是600)
  • 创建密码文件并修改权限

vim /etc/rsync.passwd
user:12345
chomod 600 /etc/rsync.passwd
  • 创建共享目录并授权
useradd -r rsync #增加系统用户
mkdir /bakup
chown -R rsync,rsync /bakup
  • 加入开机自动启动脚本
vim /etc/rc.local
rsync --daemon
  1. 配置rsync客户端
  • 配置密码文件
vim /etc/rsync.passwd
12345
  • 推送文件
方法一:rsync -avz /etc/hosts ruser@192.168.179.131::bak --password-file=/etc/rsync.passwd
方法二:rsync -avz /etc/hosts rsync://ruser@192.168.179.131/bakup --password-file=/etc/rsync.passwd
  • 将rsync写入shell脚本中,将脚本放到cron中定时运行

永久生效

date #查看时间
vi /etc/crontab #进入该文件
分 时 * * * ./root/copy.sh #写入

临时生效

crontab -e
编辑:分 时 * * * bash /root/copy.sh
cat copy.sh

6.实现实时同步(Inotify)

6.1介绍

  • Inotify,它是在内核 2.6.13 版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。

6.2安装

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
yum install inotify-tools

6.3用法

  • 常见用法:inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib /game/

    选项 作用
    -m monitor,持续监控目标文件/目录
    -r recursive,递归
    -q quiet,静默模式
    --formit %Xe event事件 %w目录 %f文件
    -e 监控事件

6.4脚本

0#/bin/bash
/usr/bin/inotifywait -mrq --format '%w%f'-e create,close_write,delete /backup |while read file #发生更改的文件列表都接收到file 然后循环,但有什么鬼用呢?下面的命令都没有引用这个$file 下面做的是全量rsync
do
cd /backup && rsync -az --delete /backup/ rsync_backup@192.168.24.101::backup/--password-file=/etc/rsync.password
done

执行脚本

chomd +x rsync.sh
./rsync.sh

优化版

0#!/bin/bash
src=/data/ # 需要同步的源路径
des=data # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsyncd.passwd # rsync验证的密码文件
ip1=192.168.0.18 # 目标服务器1
ip2=192.168.0.19 # 目标服务器2
user=root # rsync --daemon定义的验证用户名
cd ${src} # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
/usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把监控到有发生更改的"文件路径列表"循环
do
INO_EVENT=$(echo $file | awk '{print $1}') # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
INO_FILE=$(echo $file | awk '{print $2}') # 把inotify输出切割 把文件路径部分赋值给INO_FILE
echo "-------------------------------$(date)------------------------------------"
echo $file
#增加、修改、写入完成、移动进事件
#增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判断事件类型
then
echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && # INO_FILE变量代表路径哦 -c校验文件内容
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
fi
#删除、移动出事件
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
echo 'DELETE or MOVED_FROM'
rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。
fi
#修改属性事件 指 touch chgrp chmod chown等操作
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB'
if [ ! -d "$INO_FILE" ] # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
then
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
fi
fi
done

rsync实现数据备份的更多相关文章

  1. 开源服务专题之-------rsync数据备份

    RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据.可以镜像保存整个目录 ...

  2. rsync命令(同步/备份数据)

    rsync命令rsync命令是一个远程数据同步工具,可通过 lam/wan快速同步多台主机间的文件.rsync使用所谓的 "rsync算法"来使用本地和远程两个主机之间的文件达到同 ...

  3. rsync+inotify实现全网自动化数据备份-技术流ken

    rsync简介 “rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步” rsync的功能和特点 ...

  4. rsync用于数据迁移/备份的几个细节

    上周我们的一个GitLab服务频繁出现web页面卡死问题,得重启虚拟机才可恢复,但重启之后没多久又会卡死.后来发现是虚拟机的磁盘大小超过了2T,而虚拟机管理那层的文件系统是ext3,最大单文件只能支持 ...

  5. (转)rsync数据备份方案

    rsync数据备份方案 原文:http://blog.51cto.com/irow10/1826458 最近整理了下公司的数据备份情况.以下是部分操作的过程 1.rsync数据备份,具体备份过程就不详 ...

  6. Linux基础学习-数据备份工具Rsync

    数据备份工具rsync 作为一个系统管理员,数据备份是非常重要的,如果没有做好备份策略,磁盘损坏了,那么你的数据将全部丢失,所以在日常的维护工作中,一定要时刻牢记给数据做备份. rsync不仅可以可以 ...

  7. centos7 rsync+inotify软件实现集群服务的数据备份(一)

    一.rsync软件的说明: 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达 ...

  8. linux之rsync远程数据同步备份

    rsync服务是一种高效的远程数据备份的工具,该服务的port号为873, 是Liunx下的一种非独立服务.由xinetd超级服务管理,取代监听873port. 长处: 1.rsync能够利用ssh和 ...

  9. Linux系统备份还原工具4(rsync/远程数据同步工具)

    rsync即是能备份系统也是数据同步的工具. 在Jenkins上可以使用rsync结合SSH的免密登录做数据同步和分发.这样一来可以达到部署全命令化,不需要依赖任何插件去实现. 命令参考:http:/ ...

随机推荐

  1. [日常] C语言中指针变量

    CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址.编译和链接过程的一项重要任务就是找到这些名称所对应的 ...

  2. 设计模式之模板方法模式(TemplateMethod)

    模板方法模式使用继承来实现模式的功能,在基类使用一个方法来定义算法的各个步骤,这些步骤(方法)的具体实现会放到子类中,通过这样来实现不同算法对象的算法拼合,完成该对象整体算法的实现. 作用 模板方法中 ...

  3. Python 最佳实践指南 2018 学习笔记

    基础信息 版本 Python 2.7 Python 3.x Python2.7 版本在 2020 年后不再提供支持,建议新手使用 3.x 版本进行学习 实现 CPython:Python的标准实现: ...

  4. 10种JavaScript开发者必备的VS Code插件

    摘要: 好的代码插件可以让工作效率翻倍,心情也更加舒畅! 原文:10 Must-have VS Code Extensions for JavaScript Developers 作者:Michael ...

  5. HTML meta头部小结

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. photoshop使用笔记-制作古代印章

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 第一步:新建图层400x400像素,白色背景的图层,并且复制图层 第二步:设置前景色为R230,G30,B30 第三步:选择圆角 ...

  7. WEB服务器、HTTP服务器、应用服务器、IIS

    转载:https://www.cnblogs.com/brant/p/7209042.html Web服务器: 基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL.与 ...

  8. Python 列表增删改查排序统计

    列表的查 a = ["klvchen", "tom", "jack", "james", "lily" ...

  9. ajax文件上传-FormData()

    HTML: <form action=""> <input type="file" id="file1" name=&qu ...

  10. sqlserver配置实践

    对于一套新的sqlserver服务器,我们首先要对它做一些必要的优化配置,确保在生产上比较长的时间段内可以比较稳定的,良好的运行. 新的sqlserver服务器上安装的sqlserver版本,可以选择 ...