pg_basebackup

pg_basebackup —对 PostgreSQL 集群进行基本备份

Synopsis

pg_basebackup [ option ...]

Description

pg_basebackup 用于对正在运行的 PostgreSQL 数据库集群进行基础备份。采取这些措施不会影响数据库的其他 Client 端,并且既可以用于时间点恢复(请参阅Section 25.3),又可以用作日志传送或流复制备用服务器(请参阅Section 26.2)的起点。

pg_basebackup 制作数据库集群文件的二进制副本,同时确保系统自动进入和退出备份模式。总是对整个数据库集群进行备份;无法备份单个数据库或数据库对象。对于单个数据库备份,必须使用诸如pg_dump之类的工具。

备份是通过常规 PostgreSQL 连接进行的,并使用复制协议。必须与超级用户或具有REPLICATION权限的用户(请参阅Section 21.2)构建连接,并且pg_hba.conf必须明确允许复制连接。还必须将服务器的max_wal_senders设置得足够高,以使至少一个会话可用于备份,而另一个则用于 WAL 流传输(如果使用)。

可以同时运行多个pg_basebackup,但是从性能的角度来看,最好只备份一个并复制结果。

pg_basebackup 不仅可以从主数据库而且还可以从备用数据库进行基本备份。要从备用数据库中获取备份,请设置备用数据库,使其可以接受复制连接(即,设置max_wal_sendershot_standby,并配置host-based authentication)。您还需要在主机上启用full_page_writes

请注意,备用数据库的联机备份有一些限制:

Options

以下命令行选项控制输出的位置和格式。

当备份处于 tar 模式并且目录指定为-(破折号)时,tar 文件将被写入stdout

此选项是必需的。

这是默认格式。

如果将值-(破折号)指定为目标目录,则 tar 内容将写入标准输出,适用于通过管道传输到例如 gzip。仅当群集没有其他表空间并且不使用 WAL 流时,才有可能这样做。

目的是限制 pg_basebackup 对正在运行的服务器的影响。

此选项始终会影响数据目录的传输。仅当收集方法为fetch时,才会影响 WAL 文件的传输。

如果以这种方式重定位表空间,则主数据目录内的符号链接将更新为指向新位置。因此,新数据目录已准备就绪,可用于具有更新位置中所有表空间的新服务器实例。

支持以下收集预写日志的方法:

使用 tar 格式模式时,预写日志文件将被写入base.tar文件。

使用 tar 格式模式时,预写日志文件将被写入名为pg_wal.tar的单独文件中(如果服务器的版本早于 10,则该文件将名为pg_xlog.tar)。

此值为默认值。

以下命令行选项控制备份的生成和程序的运行。

请注意,无论哪种方式都不会清除表空间目录。

启用此功能后,备份将从枚举整个数据库的大小开始,然后返回并发送实际内容。这可能会使备份花费的时间稍长一些,尤其是在发送第一个数据之前,备份将花费更长的时间。

除非还使用选项-C,否则指定的复制插槽必须存在。

如果未指定此选项,并且服务器支持临时复制插槽(版本 10 及更高版本),则自动将临时复制插槽用于 WAL 流。

如果在使用日志流时未使用选项-S指定插槽名称,则默认情况下会创建临时复制插槽。

此选项的主要目的是允许在服务器没有可用的复制插槽时进行基本备份。几乎总是首选使用复制插槽,因为它可以防止服务器在备份期间删除所需的 WAL。

默认情况下,校验和经过验证,校验和失败将导致退出状态为非零。但是,在这种情况下,基本备份将不会被删除,就像使用了--no-clean选项一样。

以下命令行选项控制数据库连接参数。

为了与其他 Client 端应用程序保持一致,该选项称为--dbname,但是由于 pg_basebackup 没有连接到集群中的任何特定数据库,因此连接字符串中的数据库名称将被忽略。

这个选项从来都不是必须的,因为如果服务器要求密码认证,pg_basebackup 会自动提示 Importing 密码。但是,pg_basebackup 会浪费连接尝试,以发现服务器需要密码。在某些情况下,值得 Importing-W以避免额外的连接尝试。

其他选项也可用:

Environment

与大多数其他 PostgreSQLUtil 一样,该 Util 使用 libpq 支持的环境变量(请参见Section 34.14)。

Notes

在备份开始时,需要在获取备份的服务器上写入一个检查点。尤其是如果不使用选项--checkpoint=fast,这可能要花费一些时间,在此期间 pg_basebackup 似乎是空闲的。

备份将包括数据目录和表空间中的所有文件,包括配置文件以及由第三方放置在目录中的任何其他文件,但由 PostgreSQLManagement 的某些临时文件除外。但是只复制常规文件和目录,只保留用于表空间的符号链接。指向 PostgreSQL 已知的某些目录的符号链接被复制为空目录。其他符号链接和特殊设备文件将被跳过。有关详细信息,请参见Section 53.4

默认情况下,表空间将以纯格式备份到服务器上具有的相同路径,除非使用了选项--tablespace-mapping。如果没有此选项,则在使用表空间的情况下,在与服务器相同的主机上运行纯格式基础备份将不起作用,因为必须将备份写入与原始表空间相同的目录位置。

使用 tar 格式模式时,用户有责任在启动 PostgreSQL 服务器之前解压缩每个 tar 文件。如果还有其他表空间,则需要将它们的 tar 文件解压缩到正确的位置。在这种情况下,服务器将根据base.tar文件中包含的tablespace_map文件的内容为这些表空间创建符号链接。

pg_basebackup 可以使用相同或更低主版本(低至 9.1)的服务器。但是,WAL 流模式(-X stream)仅适用于 9.3 版及更高版本的服务器,而当前版本的 tar 格式模式(--format=tar)仅适用于 9.5 版或更高版本的服务器。

如果在源集群上启用了组权限,pg_basebackup 将以plaintar格式保留组权限。

Examples

要在mydbserver创建服务器的基本备份并将其存储在本地目录/usr/local/pgsql/data中:

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data

要为每个表空间使用一个压缩的 tar 文件创建本地服务器的备份,并将其存储在目录backup中,并在运行时显示进度报告:

$ pg_basebackup -D backup -Ft -z -P

要创建单表空间本地数据库的备份并使用 bzip2 压缩它:

$ pg_basebackup -D - -Ft -X fetch | bzip2 > backup.tar.bz2

(如果数据库中有多个表空间,则此命令将失败.)

要创建本地数据库的备份,其中/opt/ts中的表空间已重定位到./backup/ts

$ pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts

See Also

pg_dump

上一章 首页 下一章