pg_basebackup被用于获得一个正在运行的PostgreSQL数据库集簇的基础备份。获得这些备份不会影响连接到该数据库的其他客户端,并且可以被用于时间点恢复(见Section 24.3)以及用作一个日志传送或流复制后备服务器的开始点(见Section 25.2)。
pg_basebackup建立数据库集簇文件的一份二进制副本,同时保证系统进入和退出备份模式。备份总是从整个数据库集簇获得,不可能备份单个数据库或数据库对象。关于个体数据库备份,必须使用一个像pg_dump的工具。
备份通过一个常规PostgreSQL连接制作,并且使用复制协议。该连接必须由一个超级用户或者一个具有REPLICATION权限(Section 20.2)的用户建立,并且pg_hba.conf必须显式地允许该复制连接。该服务器还必须被配置,使max_wal_senders设置得足够高以留出至少一个会话用于备份。
在同一时间可以有多个pg_basebackup运行,但是从性能的角度来说最好只做一个备份并且复制结果。
pg_basebackup不仅能从主控机也能从后备机创建一个基础备份。要从后备机获得一个备份,设置后备机让它能接受复制连接(也就是,设置max_wal_senders和hot_standby,并且配置基于主机的认证)。你将也需要在主控机上启用full_page_writes。
注意在来自后备机的在线备份中有一些限制:
不会在被备份的数据库集簇中创建备份历史文件。
不保证备份所需的所有 WAL 文件在备份结束时被归档。如果你计划将该备份用于一次归档恢复并且想要确保所有所需文件在那个时刻都可用,你需要通过使用-x将它们包括在备份中。
如果在在线备份期间后备机被提升为主控机,备份会失败。
备份所需的所有 WAL 记录必须包含足够的全页写,这要求你在主控机上启用full_page_writes并且不使用一个类似pg_compresslog的工具以archive_command从 WAL 文件中移除全页写。
下列命令行选项控制输出的位置和格式。
将输出写到哪个目录。如果必要,pg_basebackup将创建该目录及任何父目录。该目录可能已经存在,但是如果该目录已经存在并且非空就是一个错误。
当备份处于 tar 模式中并且目录被指定为-(破折号)时,tar 文件将被写到stdout。
这个选项是必需的。
为输出选择格式。format可以是下列之一:
把输出写成平面文件,使用和当前数据目录和表空间相同的布局。当集簇没有额外表空间时,整个数据库将被放在目标目录中。如果集簇包含额外的表空间,主数据目录将被放置在目标目录中,但是所有其他表空间将被放在它们位于服务器上的相同的绝对路径中。
这是默认格式。
将输出写成目标目录中的 tar 文件。主数据目录将被写入到一个名为base.tar的文件中,并且其他表空间将被以其 OID 命名。
如果值-(破折号)被指定为目标目录,tar 内容将被写到标准输出,适合于管道输出到其他程序,例如gzip。只有当集簇没有额外表空间时这才是可能的。
The maximum transfer rate of data transferred from the server. Values are in kilobytes per second. Use a suffix of M to indicate megabytes per second. A suffix of k is also accepted, and has no effect. Valid values are between 32 kilobytes per second and 1024 megabytes per second.
The purpose is to limit the impact of pg_basebackup on the running server.
This option always affects transfer of the data directory. Transfer of WAL files is only affected if the collection method is fetch.
在输出目录中(或者当使用 tar 格式时再基础归档文件中)写一个最小的recovery.conf来简化设置一个后备服务器。
Relocate the tablespace in directory olddir to newdir during the backup. To be effective, olddir must exactly match the path specification of the tablespace as it is currently defined. (But it is not an error if there is no tablespace in olddir contained in the backup.) Both olddir and newdir must be absolute paths. If a path happens to contain a = sign, escape it with a backslash. This option can be specified multiple times for multiple tablespaces. See examples below.
If a tablespace is relocated in this way, the symbolic links inside the main data directory are updated to point to the new location. So the new data directory is ready to be used for a new server instance with all tablespaces in the updated locations.
Specifies the location for the transaction log directory. xlogdir must be an absolute path. The transaction log directory can only be specified when the backup is in plain mode.
使用这个选项等效于和方法fetch一起使用-X。
在备份中包括所需的事务日志文件(WAL 文件)。这将包括所有在备份期间产生的事务日志。如果这个选项被指定,可以在抽取出的目录中直接启动一个 postmaster,而不需要参考日志归档,因此使得这是一个完全独立的备份。
我们支持下列收集事务日志的方法:
在备份末尾收集事务日志文件。因此,有必要把wal_keep_segments参数设置得足够高,这样在备份末尾之前日志不会被移除。如果在要传输日志时它已经被轮转,备份将失败并且是不可用的。
在备份被创建时流传送事务日志。这将开启一个到服务器的第二连接并且在运行备份时并行开始流传输事务日志。因此,它将使用最多两个由max_wal_senders参数配置的槽。只要客户端能保持接收事务日志,使用这种模式不需要在主控机上保存额外的事务日志。
启用对 tar 文件输出的 gzip 压缩,使用默认的压缩级别。只有使用 tar 格式时压缩才可用。
启用对 tar 文件输出的 gzip 压缩,并且制定压缩机别(1 到 9,9 是最佳压缩)。只有使用 tar 格式时压缩才可用。
下列命令行选项控制备份的生成和程序的运行。
将检查点模式设置为 fast 或 spread(默认)(见Section 24.3.3)。
为备份设置标签。如果没有指定,将使用一个默认值"pg_basebackup base backup"。
启用进度报告。启用这个选项将在备份期间发表一个大致的进度报告。由于数据库可能在备份期间改变,这仅仅是一种近似并且可能不会刚好在100%结束。特别地,当 WAL 日志被包括在备份中时,总数据量无法预先估计,并且在这种情况中估计的目标尺寸会在它经过不带 WAL 的总估计后增加。
当这个选项被启用时,备份开始时会列举整个数据库的尺寸,并且接着回头开始发送实际的内容。这可能使备份需要多花一点点时间,并且它在发送第一个数据之前花费的时间更长。
启用冗长模式。将在启动和关闭期间输出一些额外步骤,并且如果进度报告也被启用,还会显示当前正在被处理的确切文件名。
下列命令行选项控制数据库连接参数。
以一个连接字符串的形式指定用于连接到服务器的参数。详见Section 31.1.1。
为了和其他客户端应用一致,该选项被称为--dbname。但是因为pg_basebackup并不连接到集簇中的任何特定数据库,连接字符串中的数据库名将被忽略。
指定运行服务器的机器的主机名。如果该值以一个斜线开始,它被用作 Unix 域套接字的目录。默认值取自PGHOST环境变量(如果设置),否则会尝试一个 Unix 域套接字连接。
指定服务器正在监听连接的 TCP 端口或本地 Unix 域套接字文件扩展。默认用PGPORT环境变量中的值(如果设置),或者一个编译在程序中的默认值。
指定发送回服务器的状态包之间的秒数。这允许我们更容易地监控服务器的进度。一个零值完全禁用这种周期性的状态更新,不过当服务器需要时还是会有一个更新会被发送来避免超时导致的断开连接。默认值是 10 秒。
要作为哪个用户连接。
从不发出一个口令提示。如果服务器要求口令认证并且没有其他方式提供口令(例如一个.pgpass文件),那儿连接尝试将失败。这个选项对于批处理任务和脚本有用,因为在其中没有一个用户来输入口令。
强制pg_basebackup在连接到一个数据库之前提示要求一个口令。
这个选项不是必不可少的,因为如果服务器要求口令认证,pg_basebackup将自动提示要求一个口令。但是,pg_basebackup将浪费一次连接尝试来发现服务器想要一个口令。在某些情况下值得用-W来避免额外的连接尝试。
其他选项也可用:
打印pg_basebackup版本并退出。
显示有关pg_basebackup命令行参数的帮助并退出。
备份将包括数据目录和表空间中的所有文件,包括配置文件以及第三方放置在该目 录中的任何附加文件。但是只复制常规文件和目录。符号链接(除了用于表空间的) 和特殊的设备文件会被跳过(细节见Section 49.3)。
表空间默认将以普通格式备份到与它们在服务器上相同的路径中,除非使用了 --tablespace-mapping选项。如果没有这个 选项并且表空间正在使用,在同一台服务器上进行普通格式的基础备份将无法 工作,因为备份必须要写入到与原始表空间相同的目录位置。
pg_basebackup可以和具有相同或较低主版本的服务器一起工作,最低是 9.1。但是,WAL 流模式(-X 流)只能和版本为 9.3 及以上版本的服务器一起工作。
要创建服务器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 | bzip2 > backup.tar.bz2
(如果在该数据库中有多个表空间,这个命令将失败)。
要创建一个本地数据库的备份,其中/opt/ts 中的表空间被重定位到./backup/ts:
$ pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts