14
2024
06
15:46:56

线上服务器数据备份工具Rsync几种备份方式及应用场景实例(含SHELL脚本)

一.关于Rsync 服务

rsync 是 Unix 系统的文件传输程序。rsync 使用“rsync 算法”,它提供了一种非常快速的方法来使远程文件同步。它通过仅通过链接发送文件中的差异来做到这一点,而无需事先将两组文件都存在于链接的一端。

Rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份和增量备份,因此非常适合用于架构集中式备份或异地备份等应用。

Rsync官方地址:https://rsync.samba.org/
Rsync监听端口:873
Rsync运行模式:C/S

Rsync已支持跨平台,可以在Windows与Linux间进行数据同步。

总结:

Rsync是一款开源的,快速的,多功能,可实现全量及增量的本地或远程数据同步备份的优秀工具。
1.rsync 的一些特性
  • 可以更新整个目录树和文件系统
  • 可选择保留符号链接、硬链接、文件所有权、权限、设备和时间
  • 无需特殊权限即可安装
  • 内部流水线减少了多个文件的延迟
  • 可以使用 rsh、ssh 或直接套接字作为传输
  • 支持匿名 rsync,非常适合镜像
2.Rsync常见的两种备份方式
1)完全备份

那么什么是完全备份,下面举个例子:

设定一个文件夹,这个文件夹主机A/B都各创建一个,要求主机A的文件夹里面的数据每天传送给主机B一次。

第一天,主机A的文件夹里面有10G数据,通过完全备份的形式传给了主机B。

说明:

A主机一次把文件夹里面的10G数据全部传输给了主机B。

第二天主机A的文件夹里又增加了5G数据;量,今天还需要继续把这些数据传输给主机B一次。

当主机A增加数据量的时候再向主机B发送,还是会把整个15G的文件全部发送过去,主机B又重新把原来有过的和新增的接收一遍,这样导致传输效率极低,造成很多资源上的浪费。

2)增量备份

那么什么又是增量备份呢,第一天,主机A的文件夹里面有10G数据,主机B里面没有任何数据,这时候主机A通过完全(全量)的形式把数据传给了主机B。

图片

第二天主机A的文件夹里又增加了5G数据。今天还需要继续把这些数据传输给主机B一次,这个时候主机B已经有之前的10G数据了,通过增量备份会如何传输呢?


#!/bin/sh

# 此脚本对 rsync 备份服务器进行个人备份。你最终会
# 使用 7 天轮换增量备份。增量会去
# 放入以星期几命名的子目录,以及当前
# 完整备份进入一个名为“current”的目录
# tridge@linuxcare.com

# 备份目录
BDIR=/home/$USER

# 排除文件 - 这包含每行要排除的文件的通配符模式
EXCLUDES=$HOME/cron/excludes

# 备份机器的名字
BSERVER=owl

# 你在备份服务器上的密码
export RSYNC_PASSWORD=XXXXXX


########################################################################

BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES 
      --delete --backup --backup-dir=/$BACKUPDIR -a"


export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# 下面一行清除了上周的增量目录
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir

# 现在实际传输
rsync $OPTS $BDIR $BSERVER::$USER/current

2.备份到备用磁盘

我使用 rsync 在我的几台机器上进行本地备份。我有一个安装了额外的磁盘,可以保存主目录的所有内容磁盘。然后我有一个夜间 cron 作业,将主磁盘备份到备份。这是我在其中一台机器上使用的脚本。

#!/bin/sh

export PATH=/usr/local/bin:/usr/bin:/bin

LIST="rootfs usr data data2"

for d in $LISTdo
 mount /backup/$d
 rsync -ax --exclude fstab --delete /$d/ /backup/$d/
 umount /backup/$d
done

DAY=`date "+%A"`
    
rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY

第一部分在备用磁盘上进行备份。第二部分将关键部分备份到日常目录。我也备份了使用 rsync 通过 ssh 连接到远程机器的关键部分。

3.镜像 vger CVS 树

vger.rutgers.edu cvs 树通过镜像到 cvs.samba.org使用以下脚本匿名 rsync。

#!/bin/bash

    cd /var/www/cvs/vger/
    PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin

    RUN=`lps x | grep rsync | grep -v grep | wc -l`
    if [ "$RUN" -gt 0 ]; then
     echo already running
     exit 1
    fi

    rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog

    sum1=`sum $HOME/ChangeLog`
    sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`

    if [ "$sum1" = "$sum2" ]; then
     echo nothing to do
     exit 0
    fi

    rsync -az --delete --force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
    exit 0

特别注意 ChangeLog 的初始 rsync 以确定是否一切都变了。这可以省略,但这意味着vger 上的 rsyncd 必须建立一个完整的 cvs 区域列表在每次运行。因为大多数时候什么都不会改变,我想如果 ChangeLog 有,则仅通过执行完整的 rsync 来节省 vger改变了。这很有帮助,因为 vger 内存不足,并且通常负载很重,所以在这么大的地方做一个列表每小时一棵树会过分。

4.在家自动备份

我使用 rsync 通过调制解调器链接备份我妻子的主目录夜晚。cron 作业看起来像这样。

    #!/bin/sh
    cd ~susan
    {
    echo
    date
    dest=~/backup/`date +%A`
    mkdir $dest.new
    find . -xdev -type f \( -mtime 0 -or -mtime 1 \) -exec cp -aPv "{}"
    $dest.new \;
    cnt=`find $dest.new -type f | wc -l`
    if [ $cnt -gt 0 ]; then
      rm -rf $dest
      mv $dest.new $dest
    fi
    rm -rf $dest.new
    rsync -Cavze ssh . samba:backup
    } >> ~/backup/backup.log 2>&1

请注意,此脚本的大部分内容与 rsync 无关,它只是在 ~susan/backup/ 目录中创建 Susan 工作的每日备份,因此她可以检索上周的任何版本。最后一行确实她的目录的 rsync 通过调制解调器链接到主机桑巴。请注意,我使用的是 -C 选项,它允许我添加.cvsignore 的条目以获取不需要备份的内容。

5.带有远程文件列表的花哨步法

rsync 的一个鲜为人知的特性是,当运行在远程 shell(例如 rsh 或 ssh),您可以将任何 shell 命令指定为远程文件列表。shell 命令由您的遥控器扩展调用 rsync 之前的 shell。例如,看看你是否可以锻炼这是做什么的:

rsync -avR remote:'`find /home -name "*.[ch]"`' /tmp/




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/6636.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: