合 PG备份之pg_basebackup工具简介--该工具不会备份TEMPORARY和 UNLOGGED表
简介
官网:http://postgres.cn/docs/13/app-pgbasebackup.html
pg_basebackup被用于获得一个正在运行的PostgreSQL数据库集簇的基础备份。获得这些备份不会影响数据库的其他客户端,并且可以被用于时间点恢复(见第 25.3 节)以及用作一个日志传送或流复制后备服务器的开始点(见第 26.2 节)。
pg_basebackup对数据库群集的文件进行精确复制,同时确保服务器自动进入和退出备份模式。备份总是从整个数据库集簇获得,不可能备份单个数据库或数据库对象。关于选择性备份,必须使用一个像pg_dump的工具。
备份通过一个使用复制协议常规PostgreSQL连接制作。该连接必须由一个具有REPLICATION
权限(详见第 21.2 节)或者具有超级用户权限的用户ID建立,并且pg_hba.conf
必须允许该复制连接。该服务器还必须被配置,使max_wal_senders设置得足够高以提供至少一个walsender用于备份以及一个用于WAL流(如果使用流)。
在同一时间可以有多个pg_basebackup
运行,但是从性能的角度来说,只进行一次备份并且复制结果通常更好。
pg_basebackup不仅能从主控机也能从后备机创建一个基础备份。要从后备机获得一个备份,设置后备机让它能接受复制连接(也就是,设置max_wal_senders
和hot_standby,并且适当配置其pg_hba.conf
)。你将也需要在主控机上启用full_page_writes。
注意在来自后备机的备份中有一些限制:
- 不会在被备份的数据库集簇中创建备份历史文件。
- 如果正在使用
-X none
,不保证备份所需的所有 WAL 文件在备份结束时被归档。 - 如果在备份期间后备机被提升为主控机,备份会失败。
- 备份所需的所有 WAL 记录必须包含足够的全页写,这要求你在主控机上启用
full_page_writes
并且不使用一个类似pg_compresslog的工具以archive_command
从 WAL 文件中移除全页写。
每当pg_basebackup进行基本备份时,服务器的pg_stat_progress_basebackup
视图将报告备份的进度。有关详细信息,请参见第 27.4.5 节。
选项
下列命令行选项控制输出的位置和格式:
-D *
directory*
--pgdata=*
directory*
设置目标目录以将输出写入。如果该目录不存在,pg_basebackup将创建该目录(以及所有丢失的父目录)。如果已经存在,则必须为空。当备份处于 tar 模式中,目标目录可以被指定为
-
(破折号),从而将 tar 文件写入stdout
。这个选项是必需的。-F *
format*
--format=*
format*
为输出选择格式。
format
可以是下列之一:p
plain
把输出写成平面文件,使用和源服务器数据目录和表空间相同的布局。当集簇没有额外表空间时,整个数据库将被放在目标目录中。如果集簇包含额外的表空间,主数据目录将被放置在目标目录中,但是所有其他表空间将被放在它们位于源服务器上的相同的绝对路径中。这是默认格式。t
tar
将输出作为tar文件写入目标目录中。 主数据目录的内容将被写入名为base.tar
的文件,而其他表空间将被写入以该表空间的OID命名的单独的tar文件。如果将目标目录指定为-
(破折号),则tar内容将被写入标准输出,该标准输出适用于管道传输至gzip(例如)。 只有当集簇没有额外表空间并且没有使用WAL流时才允许这样做。-R
--write-recovery-conf
创建一个
standby.signal
文件,并将连接设置附加到目标目录(或使用tar格式的基本存档文件中)的postgresql.auto.conf
文件中。 这样可以简化使用备份结果设置备用服务器的过程。postgresql.auto.conf
文件将记录连接设置(如果有)以及pg_basebackup所使用的复制槽,这样流复制后面就会使用相同的设置。-T *
olddir*=*
newdir*
--tablespace-mapping=*
olddir*=*
newdir*
在备份期间将目录
olddir
中的表空间重定位到newdir
中。为使之有效,olddir
必须与源服务器上定义的表空间的路径规范完全匹配。(但如果备份中没有包含olddir
中的表空间也不是错误)。同时,newdir
是接收主机文件系统中的目录。与主目标目录一样,newdir
不必已经存在,但是如果确实存在,则必须为空。olddir
和newdir
必须是绝对路径。如果一个路径凑巧包含了一个=
符号,可用反斜线对它转义。对于多个表空间可以多次使用这个选项。如果以这种方法重定位一个表空间,主数据目录中的符号链接会被更新成指向新位置。因此新数据目录已经可以被一个所有表空间位于更新后位置的新服务器实例使用。--waldir=*
waldir*
指定用于预写式日志目录的位置。
waldir
必须是绝对路径。只有当备份是平面文件模式时才能指定事务日志目录。 设置要写入WAL(预写日志)文件的目录。 默认情况下,WAL文件将放置在目标目录的pg_wal
子目录中,但是此选项可用于将它们放置在其他位置。waldir
必须是绝对路径。与主目标目录一样,waldir
不必已经存在,但是如果确实存在,则必须为空。只有当备份是平面文件模式时才可以指定此选项。-X *
method*
--wal-method=*
method*
在备份中包括所需的WAL(预写式日志)文件。这包括所有在备份期间产生的预写式日志。除非指定了方法
none
,可以在目标目录中启动postmaster而无需参考日志归档,从而使输出成为完全独立的备份。支持下列收集预写式日志的方法
:n
none
不要在备份中包括预写式日志。f
fetch
在备份末尾收集预写式日志文件。因此,有必要把源服务器的???参数设置得足够高,这样在备份末尾之前需要的日志数据不会被移除。如果所需的日志数据在传输之前已被回收,则备份将失败并且无法使用。如果使用tar格式,预写式日志文件将被包含在base.tar
文件。s
stream
在进行备份时,流式传输预写式日志数据。将开启一个到服务器的第二连接并且在运行备份时并行开始流传输预写式日志。因此,它将需要两个复制连接,而不仅仅是一个。 只要客户端可以跟上预写式日志数据,使用此方法就不需要在源服务器上保存额外的预写式日志。如果使用tar格式,预写式日志文件被写入到一个单独的名为pg_wal.tar
的文件(如果服务器的版本超过10,该文件将被命名为pg_xlog.tar
)。这个值是默认值。-z
--gzip
启用对 tar 文件输出的 gzip 压缩,使用默认的压缩级别。只有使用 tar 格式时压缩才可用,并且会在所有tar文件名后面自动加上后缀
.gz
。-Z *
level*
--compress=*
level*
启用对 tar 文件输出的 gzip 压缩,并且制定压缩机别(0 到 9,0 是不压缩,9 是最佳压缩)。只有使用 tar 格式时压缩才可用,并且会在所有tar文件名后面自动加上后缀
.gz
。
下列命令行选项控制备份的生成和程序的调用: