# 26.2.文件系统级备份

另一种备份策略是直接复制PostgreSQL用于在数据库中存储数据的文件;第19.2节解释这些文件的位置。您可以使用任何您喜欢的方法进行文件系统备份;例如:

tar -cf backup.tar /usr/local/pgsql/data

然而,有两个限制使得这种方法不切实际,或者至少不如pg_转储方法:

  1. 数据库服务器必须为了得到一个可用的备份而被关闭。半途而废的措施,如不允许所有连接将工作(部分原因是焦油类似的工具不会获取文件系统状态的原子快照,但也因为服务器内部的缓冲)。有关停止服务器的信息,请参阅第19.5节。不用说,在恢复数据之前,您还需要关闭服务器。

  2. 如果您已经深入了解了数据库文件系统布局的细节,您可能会尝试从各自的文件或目录中仅备份或还原某些单独的表或数据库。这会因为如果没有提交日志文件,这些文件中包含的信息将不可用,pg_xact/*,其中包含所有事务的提交状态。表格文件仅可用于此信息。当然,也不可能只恢复一个表和相关的pg_xact因为这会使数据库集群中的所有其他表都无用。因此,文件系统备份只适用于整个数据库集群的完整备份和恢复。

    另一种文件系统备份方法是,如果文件系统支持数据目录的“一致快照”(并且您愿意相信它的实现是正确的),则可以创建该数据目录的“一致快照”。典型的过程是对包含数据库的卷创建一个“冻结快照”,然后将整个数据目录(不只是部分,请参见上文)从快照复制到备份设备,然后释放冻结的快照。即使在数据库服务器运行时,这也会起作用。但是,以这种方式创建的备份会将数据库文件保存为数据库服务器未正确关闭的状态;因此,当您在备份的数据上启动数据库服务器时,它会认为前一个服务器实例崩溃,并将重播WAL日志。这不是问题;只需注意它(并确保在备份中包含WAL文件)。你可以表演检查站在拍摄快照之前减少恢复时间。

    如果您的数据库分布在多个文件系统中,可能没有任何方法可以同时获得所有卷的冻结快照。例如,如果数据文件和WAL日志位于不同的磁盘上,或者表空间位于不同的文件系统上,则可能无法使用快照备份,因为快照必须同时进行。在这种情况下,在信任一致性快照技术之前,请仔细阅读文件系统文档。

    如果无法同时进行快照,一个选项是关闭数据库服务器足够长的时间,以建立所有冻结的快照。另一种选择是执行连续存档基本备份(第26.3.2节)因为这样的备份在备份过程中不受文件系统更改的影响。这需要在备份过程中实现连续归档;恢复是使用连续存档恢复完成的(第26.3.4节).

    另一个选项是使用rsync执行文件系统备份。这是通过在数据库服务器运行时首先运行rsync来完成的,然后关闭数据库服务器足够长的时间,以执行以下操作:rsync——校验和. (--校验和因为远程同步文件修改时间粒度仅为1秒。)第二个rsync将比第一个更快,因为它要传输的数据相对较少,并且由于服务器关闭,最终结果将是一致的。此方法允许以最少的停机时间执行文件系统备份。

    请注意,文件系统备份通常比SQL转储大。(pg)_dump不需要转储索引的内容,例如,只需要重新创建索引的命令。)但是,进行文件系统备份可能会更快。