备份简述¶
什么是备份?
备份是指文件系统或数据库中的数据副本。在发生错误或灾难时,可以及时恢复系统有效数据,并进行正常运行。
有哪些备份方法?
- 完全备份:指一次性地复制硬盘或数据库中的所有文件、文件夹或数据。(优点:最好,恢复数据速度快。缺点:占用较大的硬盘空间。)
- 增量备份:指备份最后一次完全备份或增量备份之后更新的数据。其过程如下,例如第一天完全备份;第二天只备份新增加的数据,相对于第一天;第三天在第二天基础上备份新增加的数据,相对于第二天,依此类推。
- 差异备份:指备份自完全备份以来发生变化的文件。例如,第一天完全备份;第二天备份新增加的数据;第三天备份从第二天到第三天的新增加的数据;第四天备份从第二天到第四天所有新增加的数据,依此类推。
- 选择性备份:指备份系统的一部分。
- 冷备份:指系统在关机或维护状态下进行的备份。备份的数据与此期间系统中的数据完全一致。
- 热备份:指系统正常运行时进行的备份。由于系统中的数据随时都在更新,备份的数据相对于系统的真实数据存在一定的滞后。
- 远程备份:指将数据备份到另一个地理位置,以避免火灾、自然灾害、盗窃等造成的数据丢失和业务中断。
rsync 简介¶
在一台服务器上,我将第一个分区备份到第二个分区,这通常被称为“本地备份”。具体的备份工具是 tar
、dd
、dump
、cp
等都可以实现。虽然数据备份在本服务器上,但如果硬件发生故障导致无法正常启动,数据就无法找回。为了解决本地备份的这个问题,我们引入了另一种备份方式 --- “远程备份”。
有人会说,我不能在第一台服务器上直接使用 tar
或 cp
命令,并通过 scp
或 sftp
将其发送到第二台服务器吗?
在生产环境中,数据量相对较大。首先,tar
或 cp
占用大量时间并占用系统性能。通过 scp
或 sftp
进行传输也占用大量网络带宽,这在实际生产环境中是不允许的。其次,这些命令或工具需要管理员手动输入,并需要结合 crontab
定时任务。但是,crontab
设置的时间不容易把握,如果时间设置得太短或太长,都会导致数据备份不合适。
因此,在生产环境中需要一种数据备份方式,它需要满足以下要求:
- 通过网络传输备份
- 实时数据文件同步
- 占用系统资源少,效率高
rsync
的出现恰好满足了上述需求。它采用 GNU 开源协议,是一个快速的增量备份工具。最新版本是 3.2.3(2020-08-06),更多信息可以访问其 官方网站。
在平台支持方面,它支持大多数类 Unix 系统,无论是 GNU/Linux 还是 BSD。此外,在 Windows 平台下也有相关的 rsync
,例如 cwRsync。
最初的 rsync
由澳大利亚程序员Andrew Tridgell(如图 1 所示)维护,现在则由Wayne Davison(如图 2 所示)维护,你可以去 github 项目地址 获取你想要的信息。
注意
rsync
本身只是一个增量备份工具,不具备实时数据同步的功能(需要其他程序配合)。另外,同步是单向的,如果需要实现双向同步,则需要配合其他工具。
基本原理与特性¶
rsync
是如何实现高效的单向数据同步备份的?
rsync
的核心在于它的 校验和算法。更多信息可以参考 How Rsync works 和 The rsync algorithm。这部分超出了作者的能力范围,就不做过多的赘述了。
rsync
的特点是:
- 可以递归地更新整个目录树;
- 可以有选择地保留文件同步属性,例如硬链接、软链接、所有者、组、对应的权限、修改时间等,并且可以保留其中的某些属性;
- 支持两种传输协议,一种是 ssh 协议,另一种是 rsync 协议。
作者:李天赐
贡献者:Steven Spencer, Ganna Zhyrnova