lt_probackup — 管理LightDB数据库集群的备份和恢复
lt_probackup
version
lt_probackup
help
[command
]
lt_probackup
init
-B
backup_dir
lt_probackup
add-instance
-B
backup_dir
-D
data_dir
--instance
instance_name
lt_probackup
del-instance
-B
backup_dir
--instance
instance_name
lt_probackup
set-config
-B
backup_dir
--instance
instance_name
[option
...]
lt_probackup
set-backup
-B
backup_dir
--instance
instance_name
-i
backup_id
[option
...]
lt_probackup
show-config
-B
backup_dir
--instance
instance_name
[--format=
]format
lt_probackup
show
-B
backup_dir
[option
...]
lt_probackup
backup
-B
backup_dir
--instance
instance_name
-b
backup_mode
[option
...]
lt_probackup
restore
-B
backup_dir
--instance
instance_name
[option
...]
lt_probackup
checkdb
-B
backup_dir
--instance
instance_name
-D
data_dir
[option
...]
lt_probackup
validate
-B
backup_dir
[option
...]
lt_probackup
merge
-B
backup_dir
--instance
instance_name
-i
backup_id
[option
...]
lt_probackup
delete
-B
backup_dir
--instance
instance_name
{ -i
backup_id
| --delete-wal
| --delete-expired
| --merge-expired
} [option
...]
lt_probackup
archive-push
-B
backup_dir
--instance
instance_name
--wal-file-name
wal_file_name
[option
...]
lt_probackup
archive-get
-B
backup_dir
--instance
instance_name
--wal-file-path
wal_file_path
--wal-file-name
wal_file_name
[option
...]
与其他备份解决方案相比,lt_probackup 提供以下优势,有助于您实现不同的备份策略和处理大量数据:
增量备份:有三种不同的增量模式,可以根据数据流计划备份策略。 增量备份可以节省磁盘空间,并加快备份速度,相比于进行完全备份。 使用增量备份恢复集群的速度也比重放 WAL 文件更快。
增量恢复:通过重用 LTDATA 中可用的有效未更改的页面,加速从备份中的恢复。
验证:自动进行数据一致性检查,并可在不进行实际数据恢复的情况下进行按需备份验证。
验证:使用 checkdb
命令,按需验证 LightDB 实例。
保留:根据保留策略管理 WAL 存档和备份。您可以根据恢复时间或要保留的备份数量配置保留策略,还可以为特定备份指定生存时间 (TTL)。过期备份可以合并或删除。
并行处理:在多个并行线程上运行 backup
、restore
、merge
、delete
、validate
和 checkdb
进程。
压缩:将备份数据以压缩状态存储,以节省磁盘空间。
重复数据删除:如果非数据文件(例如 _vm
或 _fsm
)自从它们被复制到这个增量备份链中的一个之后就没有更改,那么在增量备份中排除这些文件,以节省磁盘空间。
远程操作:备份位于远程系统上的 LightDB 实例或远程还原备份。
从备用服务器备份:通过从备用服务器中进行备份,避免在主服务器上额外增加负载。
外部目录:备份位于 LightDB 数据目录(LTDATA
)之外的文件和目录,例如脚本、配置文件、日志或 SQL 转储文件。
备份目录:获取备份列表和相应的元数据信息,以纯文本或 JSON 格式呈现。
档案目录:获取所有 WAL 时间轴和相应的元数据信息列表,以纯文本或 JSON 格式呈现。
部分恢复:仅恢复指定的数据库。
为了管理备份数据,lt_probackup 创建一个 备份目录。这是一个目录,存储所有备份文件及其附加的元数据信息,以及进行时段恢复所需的 WAL 存档。可以在单个备份目录的不同子目录中存储不同实例的备份。
使用 lt_probackup 工具,您可以进行全量或增量备份:
FULL 备份包含恢复数据库集群所需的所有数据文件。
增量备份在页面级别上操作,仅存储与上一次备份不同的数据。它允许您节省磁盘空间,加快备份过程,与全量备份相比。通过应用增量备份来恢复集群也比通过重放WAL文件来恢复快得多。 lt_probackup 支持以下增量备份模式:
DELTA备份。在此模式下,lt_probackup 会读取数据目录中所有数据文件,并仅复制与上一次备份不同的页面。此模式可能会对只读I/O产生与全量备份等价的压力。
PAGE备份。在此模式下,lt_probackup 从上一次全量或增量备份开始扫描归档中的所有WAL文件。新创建的备份仅包含WAL记录中提到的页面。这要求自上一次备份以来的所有WAL文件都存在于WAL归档中。如果这些文件的大小与数据库集群文件的总大小相当,则速度提升较小,但备份仍占用更少的空间。您需要按 设置持续的WAL归档 中所述进行WAL归档配置,以进行PAGE备份。
PTRACK备份。在此模式下,LightDB 实时跟踪页面更改。不需要持续归档即可运行。每次更新关系页面时,此页面都会在特殊的PTRACK位图中标记。跟踪会对数据库服务器操作产生一些轻微的开销,但可以显著加快增量备份速度。
lt_probackup 只能进行物理在线备份,而在线备份需要WAL以进行一致性恢复。因此,无论选择哪种备份模式(FULL、PAGE或DELTA),使用 lt_probackup 进行的任何备份都必须使用以下 WAL传递模式之一:
lt_probackup 目前存在以下限制:
在Unix系统上,只有启动了 LightDB 服务器的同一OS用户才能进行备份。例如,如果 LightDB 服务器由用户 lightdb
启动,则备份命令也必须由用户 lightdb
运行。在使用SSH进行远程备份时,为了满足此要求,必须将 --remote-user
选项设置为 lightdb
。
进行备份的 LightDB 服务器和恢复服务器必须通过 block_size 和 wal_block_size 参数兼容,并且具有相同的主版本号。根据群集配置,LightDB 本身可能会施加其他限制,例如CPU架构或 libc/libicu 版本。
安装了 lt_probackup 后,请完成以下设置:
初始化备份目录。
在备份目录中添加新的备份实例。
配置数据库集群以启用 lt_probackup 备份。
可选地,配置SSH以在远程模式下运行 lt_probackup 操作。
lt_probackup 将所有WAL和备份文件存储在备份目录的相应子目录中。
要初始化备份目录,请运行以下命令:
lt_probackup init -B backup_dir
其中 backup_dir
是备份目录的路径。如果 backup_dir
已经存在,则必须为空。否则,lt_probackup 将返回错误。
启动 lt_probackup 的用户必须对 backup_dir
目录具有完全访问权限。
lt_probackup 创建备份目录 backup_dir
,包含以下子目录:
wal/
— WAL文件目录。
backups/
— 备份文件存放的目录。
初始化备份目录后,您可以添加新的备份实例。
lt_probackup 可以在单个备份目录中存储多个数据库集群的备份。为了设置所需的子目录, 您必须为每个要备份的数据库集群在备份目录中添加备份实例。
要添加新的备份实例,请运行以下命令:
lt_probackup add-instance -Bbackup_dir
-Ddata_dir
--instanceinstance_name
[remote_options
]
其中:
data_dir
是您要备份的集群的数据目录。为了设置和使用
lt_probackup,需要对此目录进行写访问。
instance_name
是将存储此集群的 WAL 和备份文件的子目录的名称。
remote_options 是可选参数,只有当
data_dir
位于远程系统上时才需要指定。
lt_probackup 在备份目录的 backups/
和 wal/
目录下创建
instance_name
子目录。 backups/
目录包含
instance_name
pg_probackup.conf
配置文件,该文件控制此备份实例的
lt_probackup 设置。如果您使用
remote_options 参数运行此命令,则指定的参数将添加到 pg_probackup.conf
文件中。
有关如何微调 lt_probackup 配置的详细信息,请参见 the section called “配置lt_probackup”。
启动 lt_probackup 的用户必须对 backup_dir
目录具有完全访问权限,至少对 data_dir
目录具有只读访问权限。如果您在 BACKUP_PATH
环境变量中指定了备份目录的路径,则运行 lt_probackup 命令时可以省略相应的选项。
建议使用 allow-group-access 特性,以便可以由与集群所有者相同组的任何操作系统用户进行备份。在这种情况下,用户应该对集群目录具有读取权限。
虽然超级用户可以使用 lt_probackup,但建议创建一个具有所选备份策略所需的最小权限的单独角色。在这些配置说明中,backup
角色被用作示例。
执行 backup,需要为角色 backup
分配以下权限,仅需在与 LightDB 服务器建立连接的数据库中分配:
BEGIN; CREATE ROLE backup; GRANT USAGE ON SCHEMA pg_catalog TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup; COMMIT;
在 lt_hba.conf 文件中,
允许代表 backup
角色连接数据库群集。
因为 lt_probackup 需要直接读取群集文件,
lt_probackup 必须由拥有对将要备份的数据目录 (LTDATA
) 中所有文件和目录的读取权限的操作系统用户启动 (或连接到,
如果在远程模式下使用)。
根据您计划进行 单机 或 归档 备份的情况,LightDB 群集配置将有所不同,具体在下面的章节中指定。 要从备用服务器备份数据库集群,请在远程模式下运行 lt_probackup,或创建 PTRACK 备份,需要进行额外设置。
有关详细信息,请参见以下章节: 设置 STREAM 备份、 设置持续 WAL 存档、 设置备用备份、 配置远程模式、 设置部分还原和 设置 PTRACK 备份。
要为 STREAM 备份设置群集,请完成以下步骤:
授权 backup
角色 REPLICATION
权限:
ALTER ROLE backup WITH REPLICATION;
在 lt_hba.conf 文件中,
允许代表 backup
角色进行复制。
确保参数 max_wal_senders 设置足够高,以便至少留出一个会话可用于备份进程。
将参数 wal_level 设置为高于 minimal
。
如果您计划在 STREAM 模式下进行 PAGE 备份或使用 STREAM 备份执行 PITR,则仍需要配置 WAL 存档, 如 设置持续 WAL 存档 章节中所述。
一旦完成了这些步骤,您就可以在 STREAM WAL 模式下开始进行 FULL、PAGE、DELTA 和 PTRACK 备份。
如果您计划在流模式下运行备份,并依赖于
.pgpass
进行身份验证,则 .pgpass 必须包含用于通过复制协议建立连接的 replication
数据库的凭据。例如:
pghost:5432:replication:backup_user:my_strong_password
使用 PAGE 备份模式进行备份、执行 PITR、使用 ARCHIVE WAL 传递模式进行备份以及在时间线切换后运行增量备份都需要启用 持续 WAL 存档。要在群集中设置持续存档,请执行以下步骤:
确保参数 wal_level 高于 minimal
。
如果您在主服务器上配置归档,则必须将 archive_mode 参数设置为 on
或 always
。要在备用服务器上执行存档,请将此参数设置为 always
。
设置 archive_command 参数,如下所示:
archive_command = '"install_dir
/lt_probackup" archive-push -B "backup_dir
" --instanceinstance_name
--wal-file-name=%f [remote_options
]'
这里 install_dir
是你将要使用的 lt_probackup 版本的安装目录,backup_dir
和 instance_name
是此数据库集群已初始化的备份目录实例的引用,remote_options 只需要在远程主机上归档WAL才需要指定。有关所有可能的 archive-push
参数的详细信息,请参阅 archive-push 章节。
完成这些步骤后,您就可以开始使用 ARCHIVE WAL 模式备份、PAGE备份模式备份,以及执行 PITR。
您可以使用 show 命令查看WAL归档的当前状态。有关详细信息,请参阅 the section called “查看WAL归档信息” 章节。
如果您计划从生成少量WAL流量的备用服务器进行PAGE备份和/或使用 ARCHIVE WAL 模式备份,而不需要长时间等待WAL段填充,请考虑在主服务器上设置 LightDB 参数 archive_timeout。此参数的值应略低于 --archive-timeout
设置(默认值为5分钟),以便在备份因 --archive-timeout
而中止之前有足够的时间将旋转的段流式传输到备用服务器并发送到WAL归档。
您可以使用任何其他工具来设置连续归档,只要它将WAL段传递到
目录中。如果使用压缩,则应使用 backup_dir
/wal/instance_name
gzip
,并且文件名中的后缀 .gz
是必需的。而不是使用 lt_probackup 提供的 archive-push 命令。
您可以选择使用 pg_receivewal 实用程序来配置连续归档,而不是通过设置 archive_mode
和 archive_command
参数。在这种情况下,pg_receivewal 的 -D
选项应指向 directory
目录。 lt_probackup 支持由 pg_receivewal 完成的WAL压缩。仅使用 pg_receivewal 才能实现“零数据丢失”归档策略。
backup_dir
/wal/instance_name
对于LightDB,lt_probackup可以从备用服务器上备份。这需要以下额外的设置:
在备用服务器上,将hot_standby参数设置为on
。
在主服务器上,将full_page_writes参数设置为on
。
要在备用服务器上执行独立备份,请完成“设置流备份”一节中的所有步骤。
要在备用服务器上执行归档备份,请完成“设置连续WAL归档”一节中的所有步骤。
完成这些步骤后,您可以从备用服务器开始采用适当的WAL交付模式(归档或流)进行FULL,PAGE,DELTA或PTRACK备份。
从备用服务器备份具有以下限制:
如果在备份期间将备用服务器升级为主服务器,则备份将失败。
备份所需的所有WAL记录必须包含足够的全页写入。这要求您在主服务器上启用full_page_writes
,并且不使用像pg_compresslog这样的工具作为archive_command,以从WAL文件中删除全页写入。
数据库集群的逻辑验证需要以下额外的设置。此处以角色backup
为例:
在集群的每个数据库中安装amcheck:
CREATE EXTENSION amcheck;
在集群的每个数据库中,将以下权限授予backup
角色:
GRANT SELECT ON TABLE pg_catalog.pg_am TO backup; GRANT SELECT ON TABLE pg_catalog.pg_class TO backup; GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO backup; GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup;
如果您计划使用部分恢复,请完成以下额外步骤:
仅在用于连接到LightDB服务器的数据库中,将只读访问权限授予backup
角色以访问pg_catalog.pg_database
:
GRANT SELECT ON TABLE pg_catalog.pg_database TO backup;
lt_probackup支持远程模式,允许远程执行备份,恢复和WAL归档操作。在此模式下,备份目录存储在本地系统上,而要备份和/或恢复的LightDB实例位于远程系统上。目前,唯一支持的远程协议是SSH。
如果您要通过SSH远程模式使用lt_probackup, 请按照以下步骤完成:
在两个系统上都安装lt_probackup:
backup_host
和db_host
。
为了让主机之间进行通信,请在backup_host
上的backup
用户和db_host
上的lightdb
用户之间设置无密码SSH连接:
[backup@backup_host] ssh-copy-id lightdb@db_host
如果您要依赖于
连续的WAL归档,
请在db_host
上的lightdb
用户和backup_host
上的backup
用户之间设置无密码SSH连接:
[lightdb@db_host] ssh-copy-id backup@backup_host
这里:
backup_host
是具有备份目录的系统。
db_host
是具有LightDB集群的系统。
backup
是在backup_host
上运行lt_probackup的操作系统用户。
lightdb
是在db_host
上启动LightDB集群的操作系统用户。
对于LightDB,可以使用更安全的方法,因为可以利用lt_initdb的允许组访问功能。
通过SSH的远程模式下,lt_probackup的工作方式如下:
只有以下命令可以在远程模式下启动: add-instance、 backup、 restore、 archive-push、 archive-get。
在远程模式下操作需要在本地和远程系统上都安装lt_probackup二进制文件。 本地和远程二进制文件的版本必须相同。
当以远程模式启动时,本地系统上的主要lt_probackup进程通过SSH连接到远程系统,
并在远程系统上启动一个或多个代理进程,称为远程代理。
远程代理的数量等于-j
/--threads
设置。
主要lt_probackup进程使用远程代理访问远程文件并在本地和远程系统之间传输数据。
远程代理尽量减少主机之间的网络流量和往返次数。
主进程通常在备份主机
上启动,并连接到数据库主机
,但在使用archive-push
和archive-get
命令时,主进程会在数据库主机
上启动,并连接到备份主机
。
数据传输完成后,远程代理被终止,SSH连接被关闭。
如果远程代理遇到错误条件,则所有代理都会被终止,并且错误详细信息会由主要的 lt_probackup进程报告,该进程会以错误退出。
压缩始终在db_host
上进行,而解压始终在backup_host
上进行。
您可以强制在SSH设置上实施额外限制, 以保护系统在账户遭到妥协的情况下。
LightDB可以使用PTRACK备份模式。可以在此处找到指向PTRACK补丁的链接 here。
PTRACK将在未来直接使用。
如果您将使用PTRACK备份,请完成以下附加步骤。执行PTRACK备份的角色
(在下面的示例中为backup
角色)必须能够访问集群中的所有数据库。
对于LightDB:
创建PTRACK扩展:
CREATE EXTENSION ptrack;
要启用跟踪页面更新,请将ptrack.map_size
参数设置为正整数并重新启动服务器。
为了获得最佳性能,建议将ptrack.map_size
设置为
,其中
N
/ 1024N
是LightDB集群的大小(以MB为单位)。
如果将此参数设置为较低的值,则PTRACK更有可能将多个块映射在一起,
这会导致跟踪更改的块时出现误报,并增加增量备份大小,因为未更改的块也会被复制到增量备份中。
将ptrack.map_size
设置为较高的值不会影响PTRACK操作,但不建议将此参数设置为高于1024的值。
如果更改了ptrack.map_size
参数值,则先前创建的PTRACK映射文件将被清除,
并重新开始跟踪新更改的块。因此,在更改ptrack.map_size
后,在进行增量PTRACK备份之前,
必须重新进行完整备份。
要创建备份,请执行以下命令:
lt_probackup backup -Bbackup_dir
--instanceinstance_name
-bbackup_mode
其中backup_mode
可以取以下值之一:
FULL - 创建包含要恢复的集群的所有数据文件的完整备份。
DELTA - 读取数据目录中的所有数据文件,并为自上次备份以来已更改的页面创建增量备份。
PAGE - 基于自上次完整备份或增量备份以来生成的WAL文件创建增量备份。仅从数据文件中读取已更改的块。
PTRACK - 实时跟踪页面更改,创建增量备份。
当从增量备份恢复集群时,lt_probackup依赖于父完整备份和它们之间的所有增量备份, 这称为备份链。在进行增量备份之前,必须至少创建一个完整备份。
ARCHIVE是默认的WAL传递模式。
例如,要在ARCHIVE模式下进行完整备份,请运行以下命令:
lt_probackup backup -Bbackup_dir
--instanceinstance_name
-b FULL
归档备份依赖于持续归档,以获取在备份时恢复集群所需的WAL段,使其处于一致的状态。
当进行备份时,lt_probackup确保包含Start
LSN
和Stop LSN
之间WAL记录的WAL文件实际上存在于
目录中。 lt_probackup还确保可以解析backup_dir
/wal/instance_name
Start LSN
和
Stop LSN
之间的WAL记录。这项预防措施消除了隐式WAL损坏的风险。
STREAM是可选的WAL传递模式。
例如,要在STREAM模式下进行完整备份,请在之前示例的命令中添加--stream
标志:
lt_probackup backup -Bbackup_dir
--instanceinstance_name
-b FULL --stream --temp-slot
可选的--temp-slot
标志确保在备份完成之前WAL被旋转时,所需的段仍然可用。
与ARCHIVE模式下的备份不同,STREAM备份包括在备份时恢复集群所需的所有WAL段,以使其处于一致的状态。
backup期间,lt_probackup将包含
Start LSN
和Stop LSN
之间WAL记录的WAL文件流式传输到
目录中。
为了消除隐式WAL损坏的风险,
lt_probackup还检查backup_dir
/backups/instance_name
/backup_id
/database/lt_walStart LSN
和Stop LSN
之间的WAL记录是否可以解析。
即使您使用了持续归档,在以下情况下STREAM备份仍然很有用:
STREAM备份可以在无法访问WAL归档的服务器上进行恢复。
STREAM备份使您可以在WAL归档中的WAL文件不再可用的时间点还原集群状态。
在流模式下,可以从生成少量WAL流量的服务器的备用服务器中进行备份,而不需要长时间等待WAL段填满。
如果数据库集群中启用了数据校验和, lt_probackup将使用此信息在备份过程中检查数据文件的正确性。 在读取每个页面时,lt_probackup会检查计算出的校验和是否与存储在页面头部的校验和相符。 这保证了LightDB实例和备份本身没有损坏的页面。 请注意,lt_probackup直接从文件系统中读取数据库文件, 因此在备份过程中,如果存在大量写入负载,它可能会显示错误的校验和不匹配,因为存在部分写入。 如果页面校验和不匹配,则重新读取页面并重复校验和比较。
如果校验和比较失败超过100次,则认为页面已损坏。在这种情况下,备份将被中止。
即使没有启用数据校验和,lt_probackup也始终对页面头执行健全性检查。
要备份位于数据目录之外的目录,请使用可选的--external-dirs
参数,该参数指定此目录的路径。如果您想要添加多个外部目录,则可以在Linux系统上使用冒号将多个路径分隔开。
例如,要将/etc/dir1
和/etc/dir2
目录包含在将存储在Linux的backup_dir
目录下的完全备份中,请运行以下命令:
lt_probackup backup -Bbackup_dir
--instanceinstance_name
-b FULL --external-dirs=/etc/dir1:/etc/dir2
lt_probackup递归地将每个外部目录的内容复制到备份目录中的单独子目录中。由于包含在不同备份中的外部目录不必相同,因此在从增量备份恢复集群时,只会恢复属于此特定备份的目录。存储在先前备份中的任何外部目录都将被忽略。
要在您的实例的每个备份中包含相同的目录,可以使用set-config命令和--external-dirs
选项在pg_probackup.conf
配置文件中指定它们。
要验证LightDB数据库集群未损坏,请运行以下命令:
lt_probackup checkdb [-Bbackup_dir
[--instanceinstance_name
]] [-Ddata_dir
] [connection_options
]
该命令通过运行页面头健全性检查以及块级校验和验证(如果启用了校验和),对指定数据目录中的所有数据文件执行物理验证。如果检测到损坏的页面,则checkdb
将继续集群验证,直到验证集群中的所有页面。
默认情况下,lt_probackup在进行备份时会自动执行类似的页面验证。checkdb
命令使您能够按需执行此类页面验证,而无需创建任何备份副本,即使不使用lt_probackup备份集群。
要执行集群验证,lt_probackup需要连接到要验证的集群。通常,只需指定此集群的备份实例,lt_probackup就可以确定所需的连接选项。但是,如果省略了-B
和--instance
选项,则必须通过环境变量或命令行选项提供data_dir
及其所需的连接选项。
物理验证无法检测到逻辑不一致、缺失或已作废的块和整个文件,或类似的异常情况。扩展amcheck提供了这些问题的部分解决方案。
如果除了进行物理验证之外,您还想使用这些扩展验证所有数据库中的所有索引,可以在运行checkdb命令时指定--amcheck
标志:
lt_probackup checkdb -Ddata_dir
--amcheck [connection_options
]
您可以通过指定--skip-block-validation
标志来跳过物理验证。在这种情况下,您可以省略backup_dir和data_dir选项,只需要提供连接选项即可:
lt_probackup checkdb --amcheck --skip-block-validation [connection_options
]
可以通过使用--heapallindexed
标志更彻底地进行逻辑验证,检查所有应该索引的堆元组是否实际上被索引,但这会以更高的CPU、内存和I/O消耗为代价。
lt_probackup在备份过程中为每个文件计算校验和。 检查备份数据文件的校验和的过程称为备份验证。 默认情况下,验证在备份完成后立即运行,并在恢复之前运行,以检测可能的备份损坏。
如果您想跳过备份验证,可以在运行backup和restore命令时指定--no-validate
标志。
为确保所有必需的备份文件都存在并可以用于恢复数据库集群,可以使用与恢复时相同的恢复目标选项运行validate命令。
例如,要检查您可以将数据库集群从备份副本还原到事务ID 4242,运行以下命令:
lt_probackup validate -Bbackup_dir
--instanceinstance_name
--recovery-target-xid=4242
如果验证成功完成,lt_probackup会显示相应的消息。如果验证失败,您将收到一条错误消息,其中包含恢复的确切时间、事务ID和LSN的信息。
如果通过-i/--backup-id
选项指定backup_id,则仅验证具有指定备份ID的备份副本。如果使用恢复目标选项指定backup_id,validate
命令将检查是否可以将指定备份还原到指定的恢复目标。
例如,要检查您可以将数据库集群从具有备份ID PT8XFX
的备份副本还原到指定的时间戳,请运行以下命令:
lt_probackup validate -Bbackup_dir
--instanceinstance_name
-i PT8XFX --recovery-target-time="2017-05-18 14:18:11+03"
如果您指定了增量备份的 backup_id
,则将验证从完全备份开始的所有父备份。
如果您省略所有参数,则会验证所有备份。
要从备份中恢复数据库集群,请至少使用以下选项运行restore
命令:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
-ibackup_id
其中:
备份目录
是存储所有备份文件和元信息的备份目录。
实例名称
是要恢复的集群的备份实例。
backup_id
指定要从中恢复集群的备份。
如果您省略此选项,lt_probackup会使用指定实例中可用的最新有效备份。
如果您指定要还原的增量备份,lt_probackup会自动还原底层的全备份,
然后依次应用所有必要的增量备份。
一旦完成restore
命令,启动数据库服务。
如果您恢复了归档备份,
执行了PITR,
或者在restore
命令中指定了--restore-as-replica
标志以设置备用服务器,
lt_probackup会在所有数据文件都复制到目标目录后创建恢复配置文件。
此文件包括恢复所需的最小设置,除了primary_conninfo参数中的密码;
您必须手动添加密码或使用--primary-conninfo
选项(如果需要)。
对于LightDB,lt_probackup将这些设置写入probackup_recovery.conf
文件,
然后将其包含在lightdb.auto.conf
中。
如果您正在恢复STREAM备份,则一次完成恢复,
集群将在备份拍摄时返回到自洽状态。
对于归档备份,LightDB会重放所有可用的已归档WAL段,
因此集群将恢复到当前时间轴上可能的最新状态。
您可以使用restore
命令的恢复目标选项更改此行为,
如the section called “执行时间点恢复(PITR)”中所述。
如果要恢复的集群包含表空间,则lt_probackup默认将其恢复到原始位置。
要将表空间恢复到其他位置,请使用--tablespace-mapping
/-T
选项。
否则,在同一主机上恢复集群将失败,因为备份必须写入相同的目录,
而表空间正在使用中。
使用--tablespace-mapping
/-T
选项时,
必须提供旧表空间目录和新表空间目录的绝对路径。
如果路径包含等号(=
),请使用反斜杠进行转义。
该选项可多次指定,用于多个表空间。例如:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
-Ddata_dir
-j 4 -ibackup_id
-T tablespace1_dir=tablespace1_newdir
-T tablespace2_dir=tablespace2_newdir
要在远程主机上恢复集群,请按照the section called “使用远程模式下的 lt_probackup”中的说明操作。
默认情况下,restore
命令会在恢复集群之前验证指定的备份。
如果您定期运行备份验证并希望在恢复集群时节省时间,
可以指定--no-validate
标志来跳过验证并加快恢复速度。
使用带有 增量恢复选项 的 restore 命令,可以通过替换已经存在的 LightDB 数据目录中仅无效和更改的页面,显著提高从备份恢复的速度。
要以增量模式从备份中恢复数据库集群,请使用以下选项运行 restore 命令:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
-Ddata_dir
-Iincremental_mode
其中 incremental_mode
可以采用以下值之一:
CHECKSUM — 读取数据目录中的所有数据文件,验证每个页面的头部和校验和,并仅替换无效页面和具有校验和和LSN与备份中相应页面不匹配的页面。这是最简单,最傻瓜式的增量模式。建议默认使用。
LSN — 读取数据目录中的 lt_control
,以获取重做LSN和重做TLI,从而允许确定历史上的一个点(shiftpoint),在此数据目录状态从目标备份链历史中转移。如果shiftpoint不在备份链历史的范围内,则恢复操作将被中止。如果shiftpoint在备份链历史的范围内,则读取数据目录中的所有数据文件,验证每个页面的头部和校验和,并仅替换无效页面和具有LSN大于shiftpoint的页面。与CHECKSUM相比,此模式提供了更快的速度,但要满足两个条件。首先,在数据目录中必须启用 数据校验和 参数(以避免由提示位引起的损坏)。增量恢复开始时将检查此条件,如果禁用了校验和,则操作将被中止。其次,lt_control
文件必须与数据目录的状态同步。在恢复开始时无法检查此条件,因此用户有责任确保 lt_control
包含有效信息。因此,在无法信任 lt_control
或经过篡改的情况下,不建议在任何情况下使用LSN模式:在执行 pg_resetxlog
后,在没有运行恢复的备份还原之后等。
NONE — 常规恢复,没有任何增量优化。
无论选择哪种增量模式,lt_probackup 都会检查给定目标目录中的 postmaster 是否未运行,并且 system-identifier
与备份中的相同。
假设您想使用LSN模式的增量恢复将旧主服务器作为副本返回,在切换后执行以下操作:
============================================================================================================================================= Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status ============================================================================================================================================= node 12 QBRNBP 2020-06-11 17:40:58+03 DELTA ARCHIVE 16/15 40s 194MB 16MB 8.26 15/2C000028 15/2D000128 OK node 12 QBRIDX 2020-06-11 15:51:42+03 PAGE ARCHIVE 15/15 11s 18MB 16MB 5.10 14/DC000028 14/DD0000B8 OK node 12 QBRIAJ 2020-06-11 15:51:08+03 PAGE ARCHIVE 15/15 20s 141MB 96MB 6.22 14/D4BABFE0 14/DA9871D0 OK node 12 QBRHT8 2020-06-11 15:45:56+03 FULL ARCHIVE 15/0 2m:11s 1371MB 416MB 10.93 14/9D000028 14/B782E9A0 OK lt_probackup restore -B /backup --instance node -R -I lsn INFO: Running incremental restore into nonempty directory: "/var/lib/lightdb-x/12/data" INFO: Destination directory redo point 15/2E000028 on tli 16 is within reach of backup QBRIDX with Stop LSN 14/DD0000B8 on tli 15 INFO: shift LSN: 14/DD0000B8 INFO: Restoring the database from backup at 2020-06-11 17:40:58+03 INFO: Extracting the content of destination directory for incremental restore INFO: Destination directory content extracted, time elapsed: 1s INFO: Removing redundant files in destination directory INFO: Redundant files are removed, time elapsed: 1s INFO: Start restoring backup files. LTDATA size: 15GB INFO: Backup files are restored. Transfered bytes: 1693MB, time elapsed: 43s INFO: Restore incremental ratio (less is better): 11% (1693MB/15GB) INFO: Restore of backup QBRNBP completed.
仅对具有 program_version
大于或等于 2.4.0 的备份才可以进行增量恢复。
如果您在备份之前启用了 部分恢复,则可以使用带有 部分恢复选项 的 restore 命令仅恢复部分数据库。
要仅恢复指定的数据库,请使用以下选项运行 restore 命令:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--db-include=database_name
可以多次指定 --db-include
选项。例如,要仅恢复数据库 db1
和 db2
,请运行以下命令:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--db-include=db1 --db-include=db2
要从恢复中排除一个或多个数据库,请使用 --db-exclude
选项:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--db-exclude=database_name
可以多次指定 --db-exclude
选项。例如,要从恢复中排除数据库 db1
和 db2
,请运行以下命令:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--db-exclude=db1 --db-exclude=db2
部分恢复依赖于 LightDB 恢复进程对截断文件的宽松行为。为了使恢复正常工作,已排除的数据库的文件将作为大小为零的文件进行恢复。成功启动 LightDB 集群后,必须使用 DROP DATABASE
命令删除已排除的数据库。
为了将包含多个数据库的单个集群分解为具有最小停机时间的单独集群,您可以使用 --restore-as-replica
选项对特定数据库进行集群的部分恢复,使其作为备用数据库。
总是会恢复 template0
和 template1
数据库。
如果在进行备份之前启用了 持续WAL归档,则可以使用 recovery目标选项 以任意时间点(恢复目标)恢复集群状态,使用 restore 命令进行恢复。
只要WAL归档从备份开始的时间点可用,您可以同时使用STREAM和ARCHIVE备份进行恢复。
如果省略 -i
/--backup-id
选项,lt_probackup 将自动选择最接近指定恢复目标的备份并开始恢复过程,否则 lt_probackup 将尝试将指定备份还原到指定的恢复目标。
要恢复集群在指定时间点的状态,请使用 --recovery-target-time
选项,以时间戳格式指定时间。例如:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--recovery-target-time="2017-05-18 14:18:11+03"
要将集群状态还原到特定事务ID,请使用 --recovery-target-xid
选项:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--recovery-target-xid=687
要将集群状态还原到特定LSN,请使用 --recovery-target-lsn
选项:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--recovery-target-lsn=16/B374D848
要将集群状态还原到特定的命名还原点,请使用 --recovery-target-name
选项:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--recovery-target-name="before_app_upgrade"
要将备份还原到WAL归档中可用的最新状态,请使用 --recovery-target
选项,并将值设置为 latest
:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--recovery-target="latest"
要将集群还原到最早的一致性点,请使用 --recovery-target
选项,并将值设置为 immediate
:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--recovery-target='immediate'
lt_probackup 支持远程模式,可以通过SSH远程执行备份和恢复操作。 在此模式下,备份目录存储在本地系统上,而要备份的 LightDB 实例位于远程系统上。 您必须在两个系统上都安装 lt_probackup。
lt_probackup 依赖于无密码SSH连接来在主机之间进行通信。
典型的工作流程如下:
在备份主机上,按照安装和设置部分中的说明配置 lt_probackup。对于 add-instance 和 set-config 命令,请确保指定 远程选项,指向带有 LightDB 实例的数据库主机。
如果您想在 PAGE 模式下进行远程备份,或者依赖于 ARCHIVE WAL 传递模式,或者使用 PITR,请按照设置持续的WAL归档部分中的说明,从数据库主机到备份主机配置持续的WAL归档。对于 archive-push 和 archive-get 命令,您必须指定指向备份目录所在的备份主机的 远程选项。
在备份主机上使用 backup 或 restore 命令,并使用 远程选项。lt_probackup 通过 SSH 连接到远程系统,并在本地创建备份或将之前拍摄的备份恢复到远程系统上。
例如,要代表用户lightdb
通过SSH连接通过端口2302
与远程主机地址 192.168.0.2
上的 LightDB 集群创建一个归档全备份,运行:
lt_probackup backup -Bbackup_dir
--instanceinstance_name
-b FULL --remote-user=lightdb --remote-host=192.168.0.2 --remote-port=2302
要代表用户lightdb
通过SSH连接通过端口2302
在远程主机地址 192.168.0.2
上恢复最新可用的备份,运行:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--remote-user=lightdb--remote-host=192.168.0.2 --remote-port=2302
在远程模式下恢复ARCHIVE备份或执行PITR需要额外的信息:目标地址、端口和用户名,用于从具有数据库的主机到备份目录的主机建立SSH连接。 这些信息将由restore_command
用于将WAL段从归档复制到LightDB lt_wal
目录。
要解决这个问题,您可以使用远程WAL归档选项。
例如,要通过 SSH 连接到地址为 192.168.0.2
的主机上的用户 lightdb
,并通过端口号 2302
,以及连接到地址为 192.168.0.3
的备份目录主机上的用户 backup
,使用远程模式还原最新的备份,可以运行以下命令:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--remote-user=lightdb--remote-host=192.168.0.2 --remote-port=2302 --archive-host=192.168.0.3 --archive-port=2303 --archive-user=backup
提供的参数将用于构造restore_command
:
restore_command = '"install_dir
/lt_probackup" archive-get -B "backup_dir
" --instanceinstance_name
--wal-file-path=%p --wal-file-name=%f --remote-host=192.168.0.3 --remote-port=2303 --remote-user=backup'
或者,您可以使用选项--restore-command
来提供整个restore_command
:
lt_probackup restore -Bbackup_dir
--instanceinstance_name
--remote-user=lightdb --remote-host=192.168.0.2 --remote-port=2302 --restore-command='"install_dir
/lt_probackup" archive-get -B "backup_dir
" --instanceinstance_name
--wal-file-path=%p --wal-file-name=%f --remote-host=192.168.0.3 --remote-port=2303 --remote-user=backup'
backup、restore、merge、delete、checkdb和validate进程可以在几个并行线程上执行。 如果有足够的资源(CPU核心、磁盘和网络带宽),这可以显著加快lt_probackup操作。
并行执行由-j/--threads
命令行选项控制。例如,要使用四个并行线程创建备份,请运行:
lt_probackup backup -Bbackup_dir
--instanceinstance_name
-b FULL -j 4
并行恢复仅适用于从备份目录复制数据到集群的数据目录。 启动LightDB服务器时,需要回放WAL记录,这不能并行执行。
一旦初始化备份目录并添加了新的备份实例,您可以使用位于
目录中的backup_dir
/backups/instance_name
pg_probackup.conf
配置文件来微调lt_probackup的配置。
例如,backup和checkdb命令使用常规的LightDB连接。 为了避免每次在命令行上指定连接选项,您可以使用set-config命令在pg_probackup.conf
配置文件中设置它们。
pg_probackup.conf
手动编辑不建议。
最初,pg_probackup.conf
包含以下设置:
LTDATA
— 要备份的集群数据目录的路径。
system-identifier
— LightDB 实例的唯一标识符。
此外,您可以使用set-config
命令定义远程、保留、日志记录和压缩设置:
lt_probackup set-config -Bbackup_dir
--instanceinstance_name
[--external-dirs=external_directory_path
] [remote_options
] [connection_options
] [retention_options
] [logging_options
]
要查看当前设置,请运行以下命令:
lt_probackup show-config -Bbackup_dir
--instanceinstance_name
在运行lt_probackup 命令时,
您可以通过相应的环境变量和/或命令行选项覆盖pg_probackup.conf
中定义的设置。
如果在pg_probackup.conf
配置文件中定义了连接设置,
您可以在所有后续的lt_probackup命令中省略连接选项。
然而,如果相应的环境变量已设置,则它们具有更高的优先级。
命令行提供的选项会覆盖环境变量和配置文件设置。
如果没有给出任何值,则采用默认值。默认情况下,
lt_probackup尝试通过Unix域套接字
使用本地连接,并尝试从LTUSER
环境变量或当前操作系统用户名获取数据库名称和用户名。
使用lt_probackup,您可以从命令行管理备份:
要查看每个实例的现有备份列表,请运行以下命令:
lt_probackup show -B backup_dir
lt_probackup显示所有可用备份的列表。 例如:
BACKUP INSTANCE 'node' ====================================================================================================================================== Instance Version ID Recovery time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status ====================================================================================================================================== node 10 PYSUE8 2019-10-03 15:51:48+03 FULL ARCHIVE 1/0 16s 9047kB 16MB 4.31 0/12000028 0/12000160 OK node 10 P7XDQV 2018-04-29 05:32:59+03 DELTA STREAM 1/1 11s 19MB 16MB 1.00 0/15000060 0/15000198 OK node 10 P7XDJA 2018-04-29 05:28:36+03 PTRACK STREAM 1/1 21s 32MB 32MB 1.00 0/13000028 0/13000198 OK node 10 P7XDHU 2018-04-29 05:27:59+03 PAGE STREAM 1/1 15s 33MB 16MB 1.00 0/11000028 0/110001D0 OK node 10 P7XDHB 2018-04-29 05:27:15+03 FULL STREAM 1/0 11s 39MB 16MB 1.00 0/F000028 0/F000198 OK
对于每个备份,提供以下信息:
Instance
— 实例名称。
Version
— LightDB的主要版本。
ID
— 备份标识符。
恢复时间
— 您可以恢复数据库集群状态的最早时间。
Mode
— 用于进行此备份的方法。可能的值:FULL
,PAGE
,DELTA
,PTRACK
。
WAL模式
— WAL传递模式。可能的值:STREAM
和ARCHIVE
。
TLI
— 当前备份及其父备份的时间线标识符。
Time
— 执行备份所需的时间。
Data
— 此备份中数据文件的大小。此值不包括WAL文件的大小。
对于STREAM备份,备份的总大小可以计算为Data
+ WAL
。
WAL
— 在恢复期间需要应用的未压缩的WAL文件大小,以使备份达到一致的状态。
Zratio
— 压缩比,计算公式为“未压缩字节” / “数据字节”。
Start LSN
— WAL日志序列号对应于备份过程的开始。 LightDB恢复过程的REDO点。
Stop LSN
— WAL日志序列号对应于备份过程的结束。 LightDB恢复过程的一致性点。
Status
— 备份状态。可能的值:
OK
— 备份已完成且有效。
DONE
— 备份已完成,但未经过验证。
RUNNING
— 备份正在进行中。
MERGING
— 正在合并备份。
MERGED
— 备份数据文件已成功合并,但其元数据正在更新过程中。 只有完整备份才能具有此状态。
DELETING
— 正在删除备份文件。
CORRUPT
— 部分备份文件已损坏。
ERROR
— 因为意外错误备份被中止。
ORPHAN
— 备份无效,因为其中一个父备份文件已损坏或丢失。
只有当备份状态为 OK
或 DONE
时才能从备份中恢复集群。
要获取有关备份的更详细信息,请使用备份ID运行 show
命令:
lt_probackup show -Bbackup_dir
--instanceinstance_name
-ibackup_id
示例输出如下所示:
#Configuration backup-mode = FULL stream = false compress-alg = zlib compress-level = 1 from-replica = false #Compatibility block-size = 8192 wal-block-size = 8192 checksum-version = 1 program-version = 2.1.3 server-version = 10 #Result backup info timelineid = 1 start-lsn = 0/04000028 stop-lsn = 0/040000f8 start-time = '2017-05-16 12:57:29' end-time = '2017-05-16 12:57:31' recovery-xid = 597 recovery-time = '2017-05-16 12:57:31' expire-time = '2020-05-16 12:57:31' data-bytes = 22288792 wal-bytes = 16777216 uncompressed-bytes = 39961833 pgdata-bytes = 39859393 status = OK parent-backup-id = 'PT8XFX' primary_conninfo = 'user=backup passfile=/var/lib/lightdb-x/.pgpass port=5432 sslmode=disable sslcompression=1 target_session_attrs=any'
详细输出包含以下附加属性:
compress-alg
— 备份期间使用的压缩算法。可能的值为:zlib
,pglz
,none
。
compress-level
— 备份期间使用的压缩级别。
from-replica
— 此备份是否在备用节点上进行?可能的值为:1
,0
。
block-size
— 备份开始时LightDB集群的设置block_size。
checksum-version
— data
block checksums在LightDB备份集群中是否启用?可能的值为:1
,0
。
program-version
— 用于创建备份的lt_probackup二进制文件的完整版本。
start-time
— 备份开始时间。
end-time
— 备份结束时间。
expire-time
— 根据保留策略,已固定备份可以删除的时间点。此属性仅适用于固定备份。
uncompressed-bytes
— 添加页面头并应用压缩之前的数据文件大小。如果使用了压缩,则可以通过比较uncompressed-bytes
和data-bytes
来评估压缩的有效性。
pgdata-bytes
— 备份时LightDB集群数据文件的大小。可以通过比较pgdata-bytes
和uncompressed-bytes
来评估增量备份的有效性。
recovery-xid
— 备份结束时的事务ID。
parent-backup-id
— 父备份的ID。仅适用于增量备份。
primary_conninfo
— 用于连接到LightDB集群以进行此备份的libpq连接参数。不包括密码。
note
— 附加到备份的文本说明。
content-crc
— backup_content.control
文件的CRC32校验和。用于检测备份元信息的损坏。
您也可以以 JSON 格式获取备份的详细信息:
lt_probackup show -Bbackup_dir
--instanceinstance_name
--format=json -i backup_id
示例输出如下:
[ { "instance": "node", "backups": [ { "id": "PT91HZ", "parent-backup-id": "PT8XFX", "backup-mode": "DELTA", "wal": "ARCHIVE", "compress-alg": "zlib", "compress-level": 1, "from-replica": false, "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.1.3", "server-version": "10", "current-tli": 16, "parent-tli": 2, "start-lsn": "0/8000028", "stop-lsn": "0/8000160", "start-time": "2019-06-17 18:25:11+03", "end-time": "2019-06-17 18:25:16+03", "recovery-xid": 0, "recovery-time": "2019-06-17 18:25:15+03", "data-bytes": 106733, "wal-bytes": 16777216, "primary_conninfo": "user=backup passfile=/var/lib/lightdb-x/.pgpass port=5432 sslmode=disable sslcompression=1 target_session_attrs=any", "status": "OK" } ] } ]
要查看每个实例的WAL归档信息,请运行以下命令:
lt_probackup show -Bbackup_dir
[--instanceinstance_name
] --archive
lt_probackup 显示按时间线分组的所有可用 WAL 文件列表。例如:
ARCHIVE INSTANCE 'node' =================================================================================================================================== TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status =================================================================================================================================== 5 1 0/B000000 00000005000000000000000B 00000005000000000000000C 2 685kB 48.00 0 OK 4 3 0/18000000 000000040000000000000018 00000004000000000000001A 3 648kB 77.00 0 OK 3 2 0/15000000 000000030000000000000015 000000030000000000000017 3 648kB 77.00 0 OK 2 1 0/B000108 00000002000000000000000B 000000020000000000000015 5 892kB 94.00 1 DEGRADED 1 0 0/0 000000010000000000000001 00000001000000000000000A 10 8774kB 19.00 1 OK
对于每个时间线,提供以下信息:
TLI
— 时间线标识符。
Parent TLI
— 该时间线从哪个时间线分支出的标识符。
Switchpoint
— 时间线从其父时间线分支出的时刻的 LSN。
Min Segno
— 属于时间线的第一个 WAL 日志段。
Max Segno
— 属于时间线的最后一个 WAL 日志段。
N segments
— 属于时间线的 WAL 日志段的数量。
Size
— 文件在磁盘上的大小。
Zratio
— 压缩比,计算公式为 N segments
*
wal_segment_size
* wal_block_size
/ Size
。
N backups
— 属于时间线的备份数量。
要获取有关备份的详细信息,请使用 JSON 格式。
Status
— 该时间线的 WAL 存档状态。可能的值有:
OK
— Min Segno
和 Max Segno
之间的所有 WAL 日志段都存在。
DEGRADED
— Min Segno
和 Max Segno
之间的某些 WAL 日志段丢失。
要查找丢失的文件,请使用 JSON 格式查看此报告。
要以 JSON 格式获取有关 WAL 存档的更详细信息,请运行以下命令:
lt_probackup show -Bbackup_dir
[--instanceinstance_name
] --archive --format=json
示例输出如下:
[ { "instance": "replica", "timelines": [ { "tli": 5, "parent-tli": 1, "switchpoint": "0/B000000", "min-segno": "00000005000000000000000B", "max-segno": "00000005000000000000000C", "n-segments": 2, "size": 685320, "zratio": 48.00, "closest-backup-id": "PXS92O", "status": "OK", "lost-segments": [], "backups": [] }, { "tli": 4, "parent-tli": 3, "switchpoint": "0/18000000", "min-segno": "000000040000000000000018", "max-segno": "00000004000000000000001A", "n-segments": 3, "size": 648625, "zratio": 77.00, "closest-backup-id": "PXS9CE", "status": "OK", "lost-segments": [], "backups": [] }, { "tli": 3, "parent-tli": 2, "switchpoint": "0/15000000", "min-segno": "000000030000000000000015", "max-segno": "000000030000000000000017", "n-segments": 3, "size": 648911, "zratio": 77.00, "closest-backup-id": "PXS9CE", "status": "OK", "lost-segments": [], "backups": [] }, { "tli": 2, "parent-tli": 1, "switchpoint": "0/B000108", "min-segno": "00000002000000000000000B", "max-segno": "000000020000000000000015", "n-segments": 5, "size": 892173, "zratio": 94.00, "closest-backup-id": "PXS92O", "status": "DEGRADED", "lost-segments": [ { "begin-segno": "00000002000000000000000D", "end-segno": "00000002000000000000000E" }, { "begin-segno": "000000020000000000000010", "end-segno": "000000020000000000000012" } ], "backups": [ { "id": "PXS9CE", "backup-mode": "FULL", "wal": "ARCHIVE", "compress-alg": "none", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.1.5", "server-version": "10", "current-tli": 2, "parent-tli": 0, "start-lsn": "0/C000028", "stop-lsn": "0/C000160", "start-time": "2019-09-13 21:43:26+03", "end-time": "2019-09-13 21:43:30+03", "recovery-xid": 0, "recovery-time": "2019-09-13 21:43:29+03", "data-bytes": 104674852, "wal-bytes": 16777216, "primary_conninfo": "user=backup passfile=/var/lib/lightdb-x/.pgpass port=5432 sslmode=disable sslcompression=1 target_session_attrs=any", "status": "OK" } ] }, { "tli": 1, "parent-tli": 0, "switchpoint": "0/0", "min-segno": "000000010000000000000001", "max-segno": "00000001000000000000000A", "n-segments": 10, "size": 8774805, "zratio": 19.00, "closest-backup-id": "", "status": "OK", "lost-segments": [], "backups": [ { "id": "PXS92O", "backup-mode": "FULL", "wal": "ARCHIVE", "compress-alg": "none", "compress-level": 1, "from-replica": "true", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.1.5", "server-version": "10", "current-tli": 1, "parent-tli": 0, "start-lsn": "0/4000028", "stop-lsn": "0/6000028", "start-time": "2019-09-13 21:37:36+03", "end-time": "2019-09-13 21:38:45+03", "recovery-xid": 0, "recovery-time": "2019-09-13 21:37:30+03", "data-bytes": 25987319, "wal-bytes": 50331648, "primary_conninfo": "user=backup passfile=/var/lib/lightdb-x/.pgpass port=5432 sslmode=disable sslcompression=1 target_session_attrs=any", "status": "OK" } ] } ] }, { "instance": "master", "timelines": [ { "tli": 1, "parent-tli": 0, "switchpoint": "0/0", "min-segno": "000000010000000000000001", "max-segno": "00000001000000000000000B", "n-segments": 11, "size": 8860892, "zratio": 20.00, "status": "OK", "lost-segments": [], "backups": [ { "id": "PXS92H", "parent-backup-id": "PXS92C", "backup-mode": "PAGE", "wal": "ARCHIVE", "compress-alg": "none", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.1.5", "server-version": "10", "current-tli": 1, "parent-tli": 1, "start-lsn": "0/4000028", "stop-lsn": "0/50000B8", "start-time": "2019-09-13 21:37:29+03", "end-time": "2019-09-13 21:37:31+03", "recovery-xid": 0, "recovery-time": "2019-09-13 21:37:30+03", "data-bytes": 1328461, "wal-bytes": 33554432, "primary_conninfo": "user=backup passfile=/var/lib/lightdb-x/.pgpass port=5432 sslmode=disable sslcompression=1 target_session_attrs=any", "status": "OK" }, { "id": "PXS92C", "backup-mode": "FULL", "wal": "ARCHIVE", "compress-alg": "none", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.1.5", "server-version": "10", "current-tli": 1, "parent-tli": 0, "start-lsn": "0/2000028", "stop-lsn": "0/2000160", "start-time": "2019-09-13 21:37:24+03", "end-time": "2019-09-13 21:37:29+03", "recovery-xid": 0, "recovery-time": "2019-09-13 21:37:28+03", "data-bytes": 24871902, "wal-bytes": 16777216, "primary_conninfo": "user=backup passfile=/var/lib/lightdb-x/.pgpass port=5432 sslmode=disable sslcompression=1 target_session_attrs=any", "status": "OK" } ] } ] } ]
大多数字段与纯格式一致,但有一些例外:
大小以字节为单位。
closest-backup-id
属性包含属于先前时间线之一的最近的有效备份的 ID。
您可以使用此备份执行该时间线的时间点恢复。
如果不存在这样的备份,则此字符串为空。
lost-segments
数组提供关于 DEGRADED
时间线中缺失段的间隔信息。
在 OK
时间线中,lost-segments
数组为空。
backups
数组列出属于时间线的所有备份。
如果时间线没有备份,则此数组为空。
使用 lt_probackup,您可以配置保留策略以删除冗余备份、清理不需要的 WAL 文件, 并钉住指定备份以确保它们在指定时间内保留,如下文所述。 所有这些操作都可以以任何方式组合。
默认情况下,使用 lt_probackup 创建的所有备份副本都存储在指定的备份目录中。 为了节省磁盘空间,您可以配置保留策略以删除冗余备份副本。
要配置保留策略,请通过 set-config 在 pg_probackup.conf
文件中设置以下一个或多个变量:
--retention-redundancy=redundancy
指定在备份目录中保留的 完整备份副本的数量。
--retention-window=window
定义了 lt_probackup 可以完成恢复的最早时间点。该选项是以从当前时刻起的天数来设定的。例如,如果 retention-window=7
,则 lt_probackup 必须保留至少一份早于七天的备份副本,以及所有对应的 WAL 文件和随之而来的备份。
如果同时设置了 --retention-redundancy
和 --retention-window
选项,则在清理备份目录时必须考虑这两个条件。例如,如果设置 --retention-redundancy=2
和 --retention-window=7
,则 lt_probackup 必须保留两个完整备份副本,以及确保最近七天内可恢复性所需的所有备份副本。
lt_probackup set-config -Bbackup_dir
--instanceinstance_name
--retention-redundancy=2 --retention-window=7
要根据保留策略清理备份目录,必须使用 保留标志 运行 delete 命令,如下所示;或者在创建新备份时使用这些标志来处理过时的备份副本,可以使用 backup 命令。
例如,要删除不再满足定义的保留策略的所有备份副本,请使用 --delete-expired
标志运行以下命令:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
--delete-expired
如果您还想删除不再需要用于任何备份的 WAL 文件,则应该指定 --delete-wal
标志:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
--delete-expired --delete-wal
您还可以通过在运行 delete
或 backup
命令时直接指定 --retention-redundancy
和 --retention-window
选项来设置或覆盖当前的保留策略:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
--delete-expired --retention-window=7 --retention-redundancy=2
由于增量备份要求其父全备份和所有之前的增量备份都可用,如果其中任何一个备份过期,则仍然不能删除,只要该链中的至少一个增量备份满足保留策略。为避免保留过期备份以恢复活动增量备份,可以在运行 backup 或 delete 命令时使用 --merge-expired
标志将它们与此备份合并。
假设您已经使用 --retention-window
选项将 node
实例备份到 backup_dir
目录中,并且在 2019 年 4 月 10 日有以下备份可用:
BACKUP INSTANCE 'node' =================================================================================================================================== Instance Version ID Recovery time Mode WAL TLI Time Data WAL Zratio Start LSN Stop LSN Status =================================================================================================================================== node 10 P7XDHR 2019-04-10 05:27:15+03 FULL STREAM 1/0 11s 200MB 16MB 1.0 0/18000059 0/18000197 OK node 10 P7XDQV 2019-04-08 05:32:59+03 PAGE STREAM 1/0 11s 19MB 16MB 1.0 0/15000060 0/15000198 OK node 10 P7XDJA 2019-04-03 05:28:36+03 DELTA STREAM 1/0 21s 32MB 16MB 1.0 0/13000028 0/13000198 OK -------------------------------------------------------retention window-------------------------------------------------------- node 10 P7XDHU 2019-04-02 05:27:59+03 PAGE STREAM 1/0 31s 33MB 16MB 1.0 0/11000028 0/110001D0 OK node 10 P7XDHB 2019-04-01 05:27:15+03 FULL STREAM 1/0 11s 200MB 16MB 1.0 0/F000028 0/F000198 OK node 10 P7XDFT 2019-03-29 05:26:25+03 FULL STREAM 1/0 11s 200MB 16MB 1.0 0/D000028 0/D000198 OK
即使 P7XDHB
和 P7XDHU
备份超出了保留窗口,它们也不能被删除,因为这会使后续的增量备份 P7XDJA
和 P7XDQV
失效,而这些备份仍然是必需的。因此,如果运行带有 --delete-expired
标志的 delete 命令,则只有 P7XDFT
全量备份将被删除。
使用 --merge-expired
选项,P7XDJA
备份与底层的 P7XDHU
和 P7XDHB
备份合并成一个完整备份,因此不再需要保留这些过期备份:
lt_probackup delete -Bbackup_dir
--instancenode
--delete-expired --merge-expired lt_probackup show -Bbackup_dir
BACKUP INSTANCE 'node' ================================================================================================================================== Instance Version ID Recovery time Mode WAL TLI Time Data WAL Zratio Start LSN Stop LSN Status ================================================================================================================================== node 10 P7XDHR 2019-04-10 05:27:15+03 FULL STREAM 1/0 11s 200MB 16MB 1.0 0/18000059 0/18000197 OK node 10 P7XDQV 2019-04-08 05:32:59+03 PAGE STREAM 1/0 11s 19MB 16MB 1.0 0/15000060 0/15000198 OK node 10 P7XDJA 2019-04-03 05:28:36+03 FULL STREAM 1/0 21s 32MB 16MB 1.0 0/13000028 0/13000198 OK
合并后备份的 Time
字段显示了合并所需的时间。
如果您需要保留某些备份的时间比规定的保留政策更长,您可以将它们固定一段任意的时间。例如:
lt_probackup set-backup -Bbackup_dir
--instanceinstance_name
-ibackup_id
--ttl=30d
此命令将指定备份的过期时间设置为从其 recovery-time
属性中指定的时间开始的30天。
您也可以使用 --expire-time
选项显式设置备份的过期时间。例如:
lt_probackup set-backup -Bbackup_dir
--instanceinstance_name
-ibackup_id
--expire-time="2020-01-01 00:00:00+03"
或者,您可以使用 backup 命令的 --ttl
和 --expire-time
选项来固定新创建的备份:
lt_probackup backup -Bbackup_dir
--instanceinstance_name
-b FULL --ttl=30d lt_probackup backup -Bbackup_dir
--instanceinstance_name
-b FULL --expire-time="2020-01-01 00:00:00+03"
若要检查备份是否被固定,运行 show 命令:
lt_probackup show -Bbackup_dir
--instanceinstance_name
-ibackup_id
如果备份已被固定,它将具有 expire-time
属性,显示其过期时间:
... recovery-time = '2017-05-16 12:57:31' expire-time = '2020-01-01 00:00:00+03' data-bytes = 22288792 ...
您可以通过将 --ttl
选项设置为零来取消固定备份:
lt_probackup set-backup -Bbackup_dir
--instanceinstance_name
-ibackup_id
--ttl=0
固定的增量备份隐式固定了其所有父备份。如果您稍后取消固定此类备份,则其隐式固定的父代备份也将自动取消固定。
当启用 连续WAL归档 时,归档的WAL段可能会占用大量磁盘空间。即使您不时删除旧的备份副本,--delete-wal
标志也只能清除那些不适用于备份目录中任何剩余备份的WAL段。但是,如果对于最近的备份而言关键的是时间点恢复,则可以配置WAL归档保留政策,以保留有限深度的WAL归档,并重新获得更多的磁盘空间。
要配置WAL归档保留政策,您必须使用 --wal-depth
选项运行 set-config 命令,指定可用于PITR的备份数。此设置适用于所有时间轴,因此如果可用,则应能够对每个时间轴执行相同数量的备份进行PITR。不包括 固定的备份 在此计数中:如果最新的备份之一被固定,lt_probackup 将确保可以为一份额外的备份进行PITR。
要删除不符合定义的WAL归档保留政策的WAL段,您只需使用 --delete-wal
标志运行 delete 或 backup 命令。对于归档备份,始终保留 Start LSN
和 Stop LSN
之间的WAL段,因此这种备份保持有效,无论 --wal-depth
设置如何,如果需要,仍然可以进行恢复。
您还可以使用 --wal-depth
选项,使用 delete 和 backup 命令覆盖先前定义的WAL归档保留政策,并在运行时清除旧的WAL段。
假设您已经在 backup_dir
目录中备份了 node
实例,并配置了 连续WAL归档:
lt_probackup show -Bbackup_dir
--instancenode
BACKUP INSTANCE 'node' ==================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status ==================================================================================================================================== node 11 PZ9442 2019-10-12 10:43:21+03 DELTA STREAM 1/0 10s 121kB 16MB 1.00 0/46000028 0/46000160 OK node 11 PZ943L 2019-10-12 10:43:04+03 FULL STREAM 1/0 10s 180MB 32MB 1.00 0/44000028 0/44000160 OK node 11 PZ7YR5 2019-10-11 19:49:56+03 DELTA STREAM 1/1 10s 112kB 32MB 1.00 0/41000028 0/41000160 OK node 11 PZ7YMP 2019-10-11 19:47:16+03 DELTA STREAM 1/1 10s 376kB 32MB 1.00 0/3E000028 0/3F0000B8 OK node 11 PZ7YK2 2019-10-11 19:45:45+03 FULL STREAM 1/0 11s 180MB 16MB 1.00 0/3C000028 0/3C000198 OK node 11 PZ7YFO 2019-10-11 19:43:04+03 FULL STREAM 1/0 10s 30MB 16MB 1.00 0/2000028 0/200ADD8 OK
您可以通过运行带有--archive
标志的
show命令来检查WAL存档的状态:
lt_probackup show -B backup_dir
--instance node --archive
ARCHIVE INSTANCE 'node' =============================================================================================================================== TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status =============================================================================================================================== 1 0 0/0 000000010000000000000001 000000010000000000000047 71 36MB 31.00 6 OK
如果没有使用--wal-depth
选项进行WAL清除,则不能取得很大效果,只能删除一个段:
lt_probackup delete -B backup_dir
--instance node --delete-wal
ARCHIVE INSTANCE 'node' =============================================================================================================================== TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status =============================================================================================================================== 1 0 0/0 000000010000000000000002 000000010000000000000047 70 34MB 32.00 6 OK
如果没有使用--wal-depth
选项进行WAL清除,则不能取得很大效果,只能删除一个段:
lt_probackup delete -B backup_dir
--instance node --delete-wal --wal-depth=1
ARCHIVE INSTANCE 'node' ================================================================================================================================ TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status ================================================================================================================================ 1 0 0/0 000000010000000000000046 000000010000000000000047 2 143kB 228.00 6 OK
或者,您也可以使用--wal-depth
选项来运行backup命令:
lt_probackup backup -B backup_dir
--instance node -b DELTA --wal-depth=1 --delete-wal
ARCHIVE INSTANCE 'node' =============================================================================================================================== TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status =============================================================================================================================== 1 0 0/0 000000010000000000000048 000000010000000000000049 1 72kB 228.00 7 OK
随着您进行越来越多的增量备份,备份目录的总大小可能会显著增长。为了节省磁盘空间,您可以运行merge
命令,将增量备份合并到它们的父全量备份中,指定您想要合并的最新增量备份的备份ID:
lt_probackup merge -Bbackup_dir
--instanceinstance_name
-ibackup_id
此命令合并属于公共增量备份链的备份。如果指定了一个全量备份,则它将与其第一个增量备份合并。如果指定了一个增量备份,则它将与其父全量备份一起合并,包括它们之间的所有增量备份。合并完成后,全量备份将包含所有合并的数据,并且增量备份将作为冗余数据被删除。因此,合并操作实际上等同于重新拍摄一个全量备份并删除所有过期的备份,但它可以节省大量时间,特别是对于大数据量的情况,而且如果您使用lt_probackup在远程模式下,还可以节省I/O和网络流量。
在合并之前,lt_probackup会验证所有受影响的备份以确保它们是有效的。您可以通过运行带有备份ID的show命令来检查当前备份的状态:
lt_probackup show -Bbackup_dir
--instanceinstance_name
-ibackup_id
如果合并仍在进行中,则备份状态显示为MERGING
。对于全量备份,还可以在合并的最后阶段更新元数据时显示为MERGED
。合并是幂等的,因此如果合并被中断,您可以重新启动合并。
要删除不再需要的备份,请运行以下命令:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
-ibackup_id
此命令将删除指定的backup_id
备份,以及任何从backup_id
备份派生的增量备份。这样,您可以删除一些最近的增量备份,同时保留底层的全量备份和一些随后的增量备份。
要删除不必要的WAL文件以恢复任何剩余备份,使用--delete-wal
标志:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
--delete-wal
要删除根据当前保留策略已过期的备份,请使用--delete-expired
标志:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
--delete-expired
只要有至少一个基于过期备份的增量备份满足保留策略,就无法删除过期备份。如果您希望最小化仍需要保留的备份数量以保持增量备份的有效性,请在运行此命令时指定--merge-expired
标志:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
--delete-expired --merge-expired
在这种情况下,lt_probackup会查找最早的增量备份,以满足保留策略,并将此备份与底层的全量备份和已过期的增量备份合并,从而将其变为全量备份。合并完成后,剩余的过期备份将被删除。
在合并或删除备份之前,您可以运行带有--dry-run
标志的delete
命令,它会根据当前的保留策略显示所有可用备份的状态,而不执行任何不可逆转的操作。
要删除具有特定状态的所有备份,请使用--status
:
lt_probackup delete -Bbackup_dir
--instanceinstance_name
--status=ERROR
按状态删除备份会忽略已经建立的保留策略。
本节介绍 lt_probackup 命令。可选参数用方括号括起来。 有关详细参数说明,请参见 选项 部分。
lt_probackup version
输出 lt_probackup 版本。
lt_probackup help [command
]
显示 lt_probackup 命令的概要。如果指定了其中一个 lt_probackup 命令,则显示可用于该命令的选项的详细信息。
lt_probackup init -B backup_dir
[--help]
初始化在backup_dir
中存储备份副本、WAL归档和备份数据库集群的元信息的备份目录。如果指定的backup_dir
已经存在,则必须为空。否则,lt_probackup会显示相应的错误消息。
详见初始化备份目录。
lt_probackup add-instance -Bbackup_dir
-Ddata_dir
--instanceinstance_name
[--help]
在备份目录backup_dir
中初始化新的备份实例,并生成控制具有指定data_dir
数据目录的集群的pg_probackup.conf
配置文件,控制lt_probackup的设置。
详见添加新的备份实例。
lt_probackup del-instance -Bbackup_dir
--instanceinstance_name
[--help]
删除与指定实例关联的所有备份和WAL文件。
lt_probackup set-config -Bbackup_dir
--instanceinstance_name
[--help] [--pgdata=pgdata-path
] [--retention-redundancy=redundancy
][--retention-window=window
][--wal-depth=wal_depth
] [--compress-algorithm=compression_algorithm
] [--compress-level=compression_level
] [-ddbname
] [-hhost
] [-pport
] [-Uusername
] [--archive-timeout=timeout
] [--external-dirs=external_directory_path
] [--restore-command=cmdline
] [remote_options
] [remote_wal_archive_options
] [logging_options
]
将指定的连接、压缩、保留、日志和外部目录设置添加到pg_probackup.conf
配置文件中,或修改先前定义的值。
查看所有可用设置,详见选项部分。
不建议手动编辑pg_probackup.conf
。
lt_probackup set-backup -Bbackup_dir
--instanceinstance_name
-ibackup_id
{--ttl=ttl
| --expire-time=time
} [--note=backup_note
] [--help]
将提供的备份特定设置设置到backup.control
配置文件中,或修改先前定义的值。
--note=backup_note
设置备份副本的文本备注。
如果backup_note
包含换行符,则只保存第一个换行符之前的子字符串。
文本备注的最大大小为1 KB。
'none'
值将删除当前备注。
查看所有可用的固定设置,详见固定选项。
lt_probackup show-config -Bbackup_dir
--instanceinstance_name
[--format=plain|json]
显示位于
目录中的backup_dir
/backups/instance_name
pg_probackup.conf
配置文件的内容。您可以指定--format=json
选项以获得JSON格式的结果。默认情况下,将以纯文本形式显示配置设置。
要编辑pg_probackup.conf
,请使用
set-config命令。
lt_probackup show -Bbackup_dir
[--help] [--instanceinstance_name
[-ibackup_id
| --archive]] [--format=plain|json]
显示备份目录的内容。 如果指定了instance_name
和backup_id
,则显示有关此备份的详细信息。 如果指定了--archive
选项,则显示备份目录的WAL归档内容。
默认情况下,备份目录的内容显示为纯文本。 您可以指定
--format=json
选项以获取JSON格式的结果。
lt_probackup backup -Bbackup_dir
-bbackup_mode
--instanceinstance_name
[--help] [-jnum_threads
] [--progress] [-C] [--stream [-S slot_name] [--temp-slot]] [--backup-pg-log] [--no-validate] [--skip-block-validation] [-w --no-password] [-W --password] [--archive-timeout=timeout
] [--external-dirs=external_directory_path
] [--no-sync] [--note=backup_note
] [connection_options
] [compression_options
] [remote_options
] [retention_options
] [pinning_options
] [logging_options
]
创建 LightDB 实例的备份副本。
-b mode
--backup-mode=mode
指定要使用的备份模式。可能的值为:
FULL
— 创建包含要恢复的所有群集数据文件的完整备份。
DELTA
— 读取数据目录中的所有数据文件,并为自上次备份以来更改的页创建增量备份。
PAGE
— 基于自上次完整或增量备份以来更改的 WAL 文件创建增量 PAGE 备份。
PTRACK
— 实时跟踪页面更改,创建增量 PTRACK 备份。
-C
--smooth-checkpoint
将检查点分散在一段时间内。默认情况下,lt_probackup 尝试尽快完成检查点。
--stream
通过复制数据库服务器通过复制协议将所有必需的 WAL 文件流式传输来创建 STREAM 备份。
--temp-slot
为从备份的 LightDB 实例流式传输 WAL 创建临时物理复制槽。如果在备份过程中旋转 WAL,则确保所有所需的 WAL 段仍然可用。此标志只能与 --stream
标志一起使用。默认槽名称为 lt_probackup_slot
,可以使用 --slot
/-S
选项更改。
-S slot_name
--slot=slot_name
指定 WAL 流式传输的复制槽。此选项只能与 --stream
标志一起使用。
--backup-pg-log
将日志目录包含到备份中。此目录通常包含日志消息。默认情况下,日志目录被排除在外。
-E external_directory_path
--external-dirs=external_directory_path
通过递归地将其内容复制到备份目录中的单独子目录中,将指定的目录包含到备份中。此选项对于备份位于数据目录之外的脚本、SQL 转储文件和配置文件非常有用。如果要备份多个外部目录,请在 Unix 上使用冒号分隔它们的路径。
--archive-timeout=wait_time
设置 WAL 段归档和流式传输的超时时间(以秒为单位)。默认情况下,lt_probackup 等待 300 秒。
--skip-block-validation
禁用块级校验和验证以加快备份过程。
--no-validate
在备份完成后跳过自动验证。如果定期验证备份并希望在运行备份操作时节省时间,则可以使用此标志。
--no-sync
不将备份文件同步到磁盘。您可以使用此标志来加快备份过程。使用此标志可能会导致数据损坏,在操作系统或硬件崩溃的情况下会发生数据损坏。如果使用此选项,则建议在备份完成后运行 validate 命令以检测可能的问题。
--note=backup_note
设置备份副本的文本注释。如果 backup_note
包含换行符,则只会保存第一个换行符之前的子字符串。文本注释的最大大小为 1 KB。将值设置为 'none'
可以删除当前注释。
此外,可以使用以下选项:连接选项、保留选项、固定选项、远程模式选项、压缩选项、日志选项 和 常用选项。
有关使用详细信息,请参阅 创建备份 部分。
lt_probackup restore -Bbackup_dir
--instanceinstance_name
[--help] [-Ddata_dir
] [-ibackup_id
] [-jnum_threads
] [--progress] [-TOLDDIR
=NEWDIR
] [--external-mapping=OLDDIR
=NEWDIR
] [--skip-external-dirs] [-R | --restore-as-replica] [--no-validate] [--skip-block-validation] [--force] [--no-sync] [--restore-command=cmdline
] [--primary-conninfo=primary_conninfo
] [-S | --primary-slot-name=slot_name
] [recovery_target_options
] [logging_options
] [remote_options
] [partial_restore_options
] [remote_wal_archive_options
]
从位于 backup_dir
备份目录中的备份副本还原 LightDB 实例。如果指定了 恢复目标选项,lt_probackup 将查找最接近的备份并将其还原到指定的恢复目标。如果未提供备份ID或恢复目标选项,则 lt_probackup 使用最近的备份来执行恢复。
-R
--restore-as-replica
创建一个最小的恢复配置文件,以便设置一个备用服务器。如果复制连接需要密码,则必须在
primary_conninfo
参数中手动指定密码,因为它不会被包含在内。
lt_probackup 将这些设置写入数据目录中的
probackup_recovery.conf
文件中,然后在启动集群时将它们包含到
lightdb.auto.conf
中。
--primary-conninfo=primary_conninfo
将 primary_conninfo
参数设置为指定值。除非指定了 -R
标志,否则将忽略此选项。
例如:--primary-conninfo="host=192.168.1.50 port=5432 user=foo password=foopass"
-S
--primary-slot-name=slot_name
将 primary_slot_name
参数设置为指定值。除非指定 -R
标志,否则将忽略此选项。
-T OLDDIR
=NEWDIR
--tablespace-mapping=OLDDIR
=NEWDIR
将表空间从OLDDIR
移动到 NEWDIR
目录进行恢复。
OLDDIR
和 NEWDIR
必须是绝对路径。
如果路径包含等号(=
),请使用反斜杠进行转义。可以使用此选项多次指定多个表空间。
--external-mapping=OLDDIR
=NEWDIR
将备份中包含的外部目录从 OLDDIR
移动到 NEWDIR
目录进行恢复。
OLDDIR
和 NEWDIR
必须是绝对路径。
如果路径包含等号(=
),请使用反斜杠进行转义。可以使用此选项多次指定多个目录。
--skip-external-dirs
跳过使用 --external-dirs
选项包含的外部目录。这些目录的内容将不会被恢复。
--skip-block-validation
禁用块级校验和验证,以加快验证速度。在恢复之前自动验证期间,只会验证文件级别的校验和。
--no-validate
跳过备份验证。如果您定期验证备份并且希望在运行恢复操作时节省时间,可以使用此标志。
--restore-command=cmdline
将 restore_command 参数设置为指定的命令。
例如:--restore-command='cp /mnt/server/archivedir/%f "%p"'
--force
允许忽略备份的无效状态。如果需要从损坏或无效备份恢复 LightDB 集群,
可以使用此标志。请谨慎使用。
如果 LTDATA
包含具有与要恢复的备份不同的系统 ID 的非空目录,则使用此标志的
增量恢复 将覆盖目录内容(未使用该标志会出现错误)。
如果通过 --tablespace-mapping
选项将表空间重新映射到非空目录中,则会删除此类目录的内容。
--no-sync
不将恢复的文件同步到磁盘。您可以使用此标志加快恢复进程。使用此标志可能会导致数据损坏,如果发生操作系统或硬件崩溃, 您必须再次运行 restore 命令。
另外,可以使用 恢复目标选项、远程模式选项、远程 WAL 存档选项、日志选项、部分恢复选项 和 通用选项。
有关用法的详细信息,请参见 恢复群集 部分。
lt_probackup checkdb [-Bbackup_dir
] [--instanceinstance_name
] [-Ddata_dir
] [--help] [-jnum_threads
] [--progress] [--skip-block-validation] [--amcheck] [--heapallindexed] [connection_options
] [logging_options
]
通过检测物理和逻辑损坏,验证 LightDB 数据库群集的正确性。
--amcheck
如果在检查数据文件时没有发现损坏,将为指定的 LightDB 实例执行索引的逻辑验证。您必须在数据库中安装 amcheck 扩展或 amcheck_next 扩展才能检查其索引。对于没有 amcheck 的数据库,将跳过索引验证。
--skip-block-validation
跳过数据文件的验证。您只能与 --amcheck
标志一起使用此标志,以便仅执行索引的逻辑验证。
--heapallindexed
检查所有应该被索引的堆元组是否实际上被索引。您只能与 --amcheck
标志一起使用此标志。
仅当您使用版本为 3.0 或更高版本的 amcheck 扩展,或任何版本的 amcheck_next 扩展时,才能进行此检查。
有关用法的详细信息,请参见 验证群集 部分。
lt_probackup validate -Bbackup_dir
[--help] [--instanceinstance_name
] [-ibackup_id
] [-jnum_threads
] [--progress] [--skip-block-validation] [recovery_target_options
] [logging_options
]
验证恢复群集所需的所有文件是否存在且未损坏。如果未指定 instance_name
,lt_probackup 将验证备份目录中所有可用的备份。如果您仅指定了 instance_name
,没有任何其他选项,lt_probackup 将验证此备份实例中所有可用的备份。如果您指定了 instance_name
和 恢复目标选项 和/或 backup_id
,lt_probackup 将检查使用这些选项是否可以还原群集。
有关详细信息,请参见 验证备份 部分。
lt_probackup merge -Bbackup_dir
--instanceinstance_name
-ibackup_id
[--help] [-jnum_threads
] [--progress] [--no-validate] [--no-sync] [logging_options
]
合并属于公共增量备份链的备份。如果指定完全备份,则将其与其第一个增量备份合并。如果指定增量备份,则将其与其父完全备份一起合并,以及它们之间的所有增量备份。合并完成后,完全备份收取所有合并的数据,并将增量备份作为冗余项删除。
--no-validate
跳过合并前后的自动验证。
--no-sync
不将合并的文件同步到磁盘。您可以使用此标志加速合并过程。使用此标志可能会导致操作系统或硬件崩溃的数据损坏。
有关详细信息,请参见 合并备份 部分。
lt_probackup delete -Bbackup_dir
--instanceinstance_name
[--help] [-jnum_threads
] [--progress] [--retention-redundancy=redundancy
][--retention-window=window
][--wal-depth=wal_depth
] [--delete-wal] {-ibackup_id
| --delete-expired [--merge-expired] | --merge-expired | --status=backup_status} [--dry-run] [--no-validate] [--no-sync] [logging_options
]
删除指定 backup_id
的备份,或启动保留保留政策不满足的备份和归档 WAL 的清除。
--no-validate
跳过保留合并前后的自动验证。
--no-sync
不将合并的文件同步到磁盘。您可以使用此标志加速保留合并过程。使用此标志可能会导致操作系统或硬件崩溃的数据损坏。
lt_probackup archive-push -Bbackup_dir
--instanceinstance_name
--wal-file-name=wal_file_name
[--wal-file-path=wal_file_path
] [--help] [--no-sync] [--compress] [--no-ready-rename] [--overwrite] [-jnum_threads
] [--batch-size=batch_size
] [--archive-timeout=timeout
] [--compress-algorithm=compression_algorithm
] [--compress-level=compression_level
] [remote_options
] [logging_options
]
将 WAL 文件复制到备份目录的相应子目录中,并通过 instance_name
和 system-identifier
验证备份实例。如果备份实例和群集的参数不匹配,则此命令将失败,并显示以下错误消息:拒绝将 WAL 段 segment_name 推送到归档。实例参数不匹配。
如果要复制的文件已存在于备份目录中,lt_probackup 将计算并比较它们的校验和。如果校验和匹配,则 archive-push
跳过相应的文件并返回成功的执行代码。否则,archive-push
将失败并显示错误。如果您想在校验和不匹配的情况下替换 WAL 文件,请使用 --overwrite
标志运行 archive-push
命令。
每个文件都会复制到具有 .part
后缀的临时文件中。如果临时文件已经存在,则 lt_probackup 将等待 archive_timeout
秒后将其丢弃。复制完成后,执行原子重命名。此算法确保失败的 archive-push
不会阻塞连续归档,并且从多个来源并发归档到单个 WAL 归档没有存档损坏的风险。
为加速归档,您可以指定 --batch-size
选项,以指定批量复制 WAL 段的大小。如果使用了 --batch-size
选项,则还可以指定 -j
选项,以在多个线程上复制 WAL 段批次。
复制到归档的 WAL 段将同步到磁盘,除非使用 --no-sync
标志。
您可以在 archive_command LightDB 参数中使用 archive-push
来设置 连续 WAL 归档。
lt_probackup archive-get -Bbackup_dir
--instanceinstance_name
--wal-file-path=wal_file_path
--wal-file-name=wal_file_name
[-jnum_threads
] [--batch-size=batch_size
] [--prefetch-dir=prefetch_dir_path
] [--no-validate-wal] [--help] [remote_options
] [logging_options
]
将 WAL 文件从备份目录的相应子目录复制到群集的预写日志位置。在使用 WAL 归档恢复备份时,此命令会作为 restore_command
的一部分自动由 lt_probackup 设置。您无需手动设置它。
为加速恢复,您可以指定 --batch-size
选项,以指定批量复制指定大小的 WAL 段。如果使用了 --batch-size
选项,则还可以指定 -j
选项,以在多个线程上复制 WAL 段批次。
有关详细信息,请参见 归档选项 部分。
This section describes command-line options for lt_probackup
commands. If the option value can be derived from an environment
variable, this variable is specified below the command-line
option, in the uppercase. Some values can be taken from the
pg_probackup.conf
configuration file located in the backup
catalog.
详见 the section called “配置lt_probackup”。
如果使用多种方法指定了一个选项,则命令行输入具有最高优先级,而 pg_probackup.conf
设置具有最低优先级。
一般选项列表。
-B directory
--backup-path=directory
BACKUP_PATH
指定备份目录的绝对路径。备份目录是存储所有备份文件和元信息的目录。由于大多数 lt_probackup 命令都需要此选项,建议您在 BACKUP_PATH
环境变量中指定它。在这种情况下,您无需每次在命令行中使用此选项。
-D directory
--pgdata=directory
LTDATA
指定数据库群集数据目录的绝对路径。此选项指仅对 add-instance 命令强制执行。其他命令可以从 LTDATA
环境变量或 pg_probackup.conf
配置文件中获取其值。
-i backup_id
--backup-id=backup_id
指定备份的唯一标识符。
-j num_threads
--threads=num_threads
为 backup
、restore
、merge
、validate
、checkdb
和 archive-push
进程设置并行线程数。
--progress
显示操作的进度。
--help
显示有关可与此命令一起使用的选项的详细信息。
如果已经配置了 连续的 WAL 归档,您可以使用以下选项和 restore 或 validate 命令共同指定必须恢复或验证数据库集群的时间点。
--recovery-target=immediate|latest
定义恢复的停止时间:
当设置为 immediate
时,在恢复到指定备份的一致状态之后,或者当省略了 -i
/--backup-id
选项时,恢复到最新可用的备份后停止。当使用 STREAM 备份时,这是默认行为。
当设置为 latest
时,会一直进行恢复,直到应用存档中的所有 WAL 分段。当使用 ARCHIVE 备份时,这是默认行为。
--recovery-target-timeline=timeline
指定用于恢复的特定时间线。默认情况下,使用指定备份的时间线。
--recovery-target-lsn=lsn
指定写入前日志位置的 LSN,恢复将进行到该位置。
--recovery-target-name=recovery_target_name
指定要恢复集群的命名保存点。
--recovery-target-time=time
指定恢复到的时间戳。如果未指定时区偏移量,则使用本地时区。
例如:--recovery-target-time="2020-01-01 00:00:00+03"
--recovery-target-xid=xid
指定事务 ID,恢复将进行到该事务。
--recovery-target-inclusive=boolean
指定是否在恢复目标点之后立即停止 (true
),还是在目标点之前停止 (false
)。该选项只能与 --recovery-target-name
、--recovery-target-time
、--recovery-target-lsn
或 --recovery-target-xid
选项一起使用。默认行为取决于 recovery_target_inclusive 参数。
--recovery-target-action=pause|promote|shutdown
指定恢复到达恢复目标点时服务器应采取的 操作。
默认设置为 pause
。
你可以与 backup 和 delete 命令一起使用这些选项。
有关配置保留策略的详细信息,请参阅 配置保留策略 部分。
--retention-redundancy=redundancy
指定数据目录中保留完整备份副本的数量。必须是非负整数。零值将禁用此设置。
默认值:0
--retention-window=window
恢复的天数。必须是非负整数。零值将禁用此设置。
默认值:0
--wal-depth=wal_depth
每个时间线上必须保留最近的有效备份的数量,以便执行 PITR。必须是非负整数。零值将禁用此设置。
默认值:0
--delete-wal
删除不再需要的 WAL 文件,以便从任何现有备份还原集群。
--delete-expired
删除不符合 pg_probackup.conf
配置文件中定义的保留策略的备份。
--merge-expired
将最早满足保留策略要求的增量备份与其已过期的父备份合并。
--dry-run
显示所有可用备份的当前状态,而不删除或合并任何过期的备份。
你可以与 backup 和 set-backup 命令一起使用这些选项。
有关备份固定的详细信息,请参阅 备份固定 部分。
--ttl=ttl
指定备份应保持固定的时间。必须是非负整数。零值将取消已固定的备份。支持的单位:ms、s、min、h、d(默认为 s)。
示例:--ttl=30d
--expire-time=time
指定备份将保持固定的时间戳。必须是符合 ISO-8601 标准的时间戳。如果未指定时区偏移量,则使用本地时区。
示例:--expire-time="2020-01-01 00:00:00+03"
你可以与任何命令一起使用这些选项。
--log-level-console=log_level
控制哪些信息级别将被发送到控制台日志。有效值为
verbose
、log
、info
、
warning
、error
和
off
。每个级别包括其后面的所有级别。
级别越靠后,发送的消息越少。 off
级别禁用控制台日志记录。
默认值:info
所有控制台日志消息都会发送到stderr, 因此show和show-config命令的输出不会与日志消息混在一起。
--log-level-file=log_level
控制哪些信息级别将被发送到日志文件。有效值为
verbose
、log
、info
、
warning
、error
和off
。每个级别包括其后面的所有级别。
级别越靠后,发送的消息越少。 off
级别禁用文件日志记录。
默认值:off
--log-filename=log_filename
定义所创建的日志文件的文件名。文件名被视为strftime
模式,因此您可以使用%-转义符指定变化的文件名。
默认值:pg_probackup.log
例如,如果您指定lt_probackup-%u.log
模式,
lt_probackup将为每个星期的每一天生成一个单独的日志文件,其中%u
被相应的十进制数替换:
周一的lt_probackup-1.log
,周二的lt_probackup-2.log
,以此类推。
如果启用了--log-level-file
选项,则此选项会生效。
--error-log-filename=error_log_filename
仅为错误消息定义日志文件的文件名。文件名被视为strftime
模式,因此您可以使用%-转义符指定变化的文件名。
默认值:无
例如,如果您指定error-lt_probackup-%u.log
模式,
lt_probackup将为每个星期的每一天生成一个单独的日志文件,其中%u
被相应的十进制数替换:
周一的error-lt_probackup-1.log
,周二的error-lt_probackup-2.log
,以此类推。
此选项对故障排除和监控非常有用。
--log-directory=log_directory
定义将创建日志文件的目录。必须指定绝对路径。此目录是惰性创建的,在第一条日志消息被写入时创建。
默认值:$BACKUP_PATH/log/
--log-rotation-size=log_rotation_size
单个日志文件的最大大小。如果达到此值,lt_probackup命令启动时会将日志文件轮换一次,除了help
和version
命令外。零值禁用基于大小的轮换。支持的单位:kB、MB、GB、TB(默认为kB)。
默认值:0
--log-rotation-age=log_rotation_age
单个日志文件的最长存活时间。如果达到此值,lt_probackup命令启动时会将日志文件轮换一次,除了help
和version
命令外。上一次日志文件创建的时间存储在$BACKUP_PATH/log/log_rotation
中。零值禁用基于时间的轮换。支持的单位:ms、s、min、h、d(默认为min) 。
默认值:0
您可以将这些选项与backup和 checkdb命令一起使用。
所有 libpq 环境变量都被支持。
-d dbname
--pgdatabase=dbname
LTDATABASE
指定要连接的数据库名称。连接仅用于管理备份进程,因此您可以连接到任何现有的数据库。如果没有在命令行中提供此选项,则 LTDATABASE
环境变量或 pg_probackup.conf
配置文件将尝试从 LTUSER
环境变量中获取此值,如果未设置 LTUSER
变量,则从当前用户名称中获取。
-h host
--pghost=host
LTHOST
指定服务器运行的系统的主机名。如果值以斜杠开头,则将其用作 Unix 域套接字的目录。
默认值: localhost
-p port
--pgport=port
LTPORT
指定服务器用于侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。
默认值: 5432
-U username
--pguser=username
LTUSER
要连接的用户名。
-w
--no-password
禁用密码提示。如果服务器需要密码身份验证,但没有其他可用的密码(例如 .pgpass 文件或 PGPASSWORD
环境变量),连接尝试将失败。此标志可用于批处理作业和脚本,其中没有用户可以输入密码。
-W
--password
强制密码提示。(已过时)
您可以与 backup 和 archive-push 命令一起使用这些选项。
--compress-algorithm=compression_algorithm
定义用于压缩数据文件的算法。可能的值包括 zlib
、pglz
和 none
。如果设置为 zlib
或 pglz
,则启用压缩。默认情况下,压缩已禁用。对于 archive-push 命令,不支持 pglz
压缩算法。
默认值:none
--compress-level=compression_level
定义压缩级别(0 到 9,0 表示无压缩,9 表示最佳压缩)。此选项可以与 --compress-algorithm
选项一起使用。
默认值:1
--compress
--compress-algorithm=zlib
和 --compress-level=1
的别名。
这些选项可以与 archive-push 命令中的 archive_command 设置以及 archive-get 命令中的 restore_command 设置一起使用。
--wal-file-path=wal_file_path
提供 archive_command
和 restore_command
中 WAL 文件的路径。请使用 %p
变量作为此选项的值以进行正确处理。
--wal-file-name=wal_file_name
提供 archive_command
和 restore_command
中 WAL 文件的名称。请使用 %f
变量作为此选项的值以进行正确处理。
--overwrite
覆盖已归档的 WAL 文件。如果备份目录的指定子目录已包含此 WAL 文件并需要用其较新的副本替换它,则与 archive-push 命令一起使用此标志。否则,archive-push
报告 WAL 段已存在,并终止操作。如果要替换的文件未更改,则无论 --overwrite
标志如何,archive-push
都会跳过此文件。
--batch-size=batch_size
设置单个 archive-push
进程复制到归档的文件的最大数量,或设置单个 archive-get
进程从归档中复制的文件的最大数量。
--archive-timeout=wait_time
设置将现有的 .part
文件视为过时的超时时间。默认情况下,lt_probackup 等待 300 秒。此选
--no-ready-rename
不要重命名 archive_status
目录中的状态文件。仅当 archive_command
包含多个命令时才应使用此选项。此选项只能与 archive-push 命令一起使用。
--no-sync
不要将复制的 WAL 文件同步到磁盘。您可以使用此标志以加速归档过程。使用此标志可能导致 WAL 归档损坏,以防操作系统或硬件崩溃。此选项只能与 archive-push 命令一起使用。
--prefetch-dir=path
如果使用 --batch-size
选项,则用于存储预取的 WAL 段的目录。目录必须位于相同的文件系统和相同的挂载点上,LTDATA/lt_wal
也位于该位置。默认情况下,文件存储在 LTDATA/lt_wal/pbk_prefetch
目录中。此选项只能与 archive-get 命令一起使用。
--no-validate-wal
不要在使用之前验证预取的 WAL 文件。如果要提高恢复速度,请使用此选项。此选项只能与 archive-get 命令一起使用。
本节介绍与通过 SSH 远程运行 lt_probackup 操作相关的选项。这些选项可以与 add-instance、set-config、backup、restore、archive-push 和 archive-get 命令一起使用。
有关配置和使用远程模式的详细信息,请参阅 the section called “配置远程模式” 和 the section called “使用远程模式下的 lt_probackup”。
--remote-proto=proto
指定远程操作使用的协议。目前只支持SSH协议。可能的值为:
ssh
启用SSH连接的远程模式。这是默认值。
none
显式禁用远程模式。
如果指定了--remote-host
选项,则可以省略此选项。
--remote-host=destination
指定要连接的远程主机IP地址或主机名。
--remote-port=port
指定要连接的远程主机端口。
默认值:22
--remote-user=username
指定SSH连接的远程主机用户。如果省略此选项,则使用启动SSH连接的当前用户。
--remote-path=path
指定远程系统上lt_probackup的安装目录。
--ssh-options=ssh_options
提供一组SSH命令行选项。例如,可以使用以下选项为lt_probackup打开的SSH连接设置keep-alive
:
--ssh-options="-o ServerAliveCountMax=5 -o ServerAliveInterval=60"
。
有关可能选项的完整列表,请参见
ssh_config
手册页。
本节介绍用于提供archive-get中使用的远程模式选项(远程模式选项)的参数,这些选项在恢复归档备份或执行PITR时在restore_command命令中使用。
--archive-host=destination
提供--remote-host
选项在archive-get
命令中的参数。
--archive-port=port
提供--remote-port
选项在archive-get
命令中的参数。
默认值:22
--archive-user=username
提供--remote-user
选项在archive-get
命令中的参数。如果省略此选项,则使用启动LightDB集群的用户。
默认值: LightDB用户
本节介绍用于增量集群恢复的选项。这些选项可以与restore命令一起使用。
-I incremental_mode
--incremental-mode=incremental_mode
指定要使用的增量模式。可能的值为:
CHECKSUM
— 仅替换校验和和LSN不匹配的页。
LSN
— 仅替换LSN大于分歧点的页。
NONE
— 常规恢复。
本节介绍用于部分集群恢复的选项。这些选项可以与restore命令一起使用。
--db-exclude=dbname
指定要从恢复中排除的数据库的名称。集群中的所有其他数据库都将像往常一样进行恢复,包括template0
和template1
。此选项可以为多个数据库指定多次。
--db-include=dbname
指定要从备份中恢复的数据库的名称。集群中的所有其他数据库都不会被恢复,除了template0
和template1
之外。此选项可以为多个数据库指定多次。
本节介绍与从备用节点备份相关的选项。
从lt_probackup 2.0.24开始,可以在备用节点上进行备份而无需连接到主服务器,因此这些选项不再需要。在较早的版本中,lt_probackup需要连接到主服务器来确定恢复时间,即可以恢复数据库集群的一致状态的最早时间点。
--master-db=dbname
已弃用。指定连接的主服务器上的数据库名称。连接仅用于管理备份过程,因此可以连接到任何现有的数据库。可以使用set-config命令在pg_probackup.conf
中设置。
默认值:postgres
,默认的LightDB数据库。
--master-host=host
已弃用。指定主服务器运行的系统的主机名。
--master-port=port
已弃用。指定主服务器侦听连接的TCP端口或本地Unix域套接字文件扩展名。
默认值:5432
,LightDB默认端口。
--master-user=username
已弃用。要连接的用户名。
默认值:lightdb
,LightDB默认用户名。
--replica-timeout=timeout
已弃用。通过复制等待WAL段流的时间,以秒为单位。默认情况下,lt_probackup等待300秒。您也可以使用set-config命令在pg_probackup.conf
配置文件中定义此参数。
默认值:300 sec
。
以下所有示例均假定通过SSH进行远程操作。如果您计划在本地运行备份和还原操作,请跳过“设置无密码SSH连接”步骤并省略所有选项--remote-*
。
示例基于Centos 7.9、LightDB 22.3和lt_probackup 2.4.15。
backup
— 用于连接到LightDB集群的LightDB角色。
backupdb
— 用于连接到LightDB集群的数据库。
backup_host
— 包含备份目录的主机。
backupman
— 运行所有lt_probackup操作的backup_host
用户。
/mnt/backups
— 存储备份目录的backup_host
目录。
lightdb_host
— 包含LightDB集群的主机。
lightdb
— 在lightdb_host
上启动LightDB集群的用户。
/var/lib/postgresql/11/main
— LightDB
数据目录位于 lightdb_host
上。
该场景演示了如何设置独立的 FULL 和 DELTA 备份。
从 backup_host
到 lightdb_host
设置无密码 SSH 连接:
[backupman@backup_host] ssh-copy-id lightdb@lightdb_host
配置你的 LightDB 集群。
出于安全考虑,建议使用单独的数据库进行备份操作。
lightdb@postgres=# CREATE DATABASE backupdb;
连接到 backupdb
数据库,创建 probackup
角色,并赋予该角色以下权限:
backupdb=# BEGIN; CREATE ROLE backup WITH REPLICATION; GRANT USAGE ON SCHEMA pg_catalog TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup; COMMIT;
初始化备份目录:
[backupman@backup_host]$ lt_probackup init -B /mnt/backups INFO: Backup catalog '/mnt/backups' successfully inited
将实例 node
添加到备份目录中:
[backupman@backup_host]$ lt_probackup add-instance -B /mnt/backups --instance node --remote-host=lightdb_host --remote-user=lightdb -D /var/lib/postgresql/11/main INFO: Instance 'node' successfully inited
进行完全备份:
[backupman@backup_host] lt_probackup backup -B /mnt/backups --instance node -b FULL --stream --remote-host=lightdb_host --remote-user=lightdb -U backup -d backupdb INFO: Backup start, lt_probackup version: 2.4.15, instance: node, backup ID: PZ7YK2, backup mode: FULL, wal mode: STREAM, remote: true, compress-algorithm: none, compress-level: 1 INFO: Start transferring data files INFO: Data files are transferred INFO: wait for pg_stop_backup() INFO: pg_stop backup() successfully executed INFO: Validating backup PZ7YK2 INFO: Backup PZ7YK2 data files are valid INFO: Backup PZ7YK2 resident size: 196MB INFO: Backup PZ7YK2 completed
让我们来看看备份目录:
[backupman@backup_host] lt_probackup show -B /mnt/backups --instance node BACKUP INSTANCE 'node' ================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status ================================================================================================================================== node 13 PZ7YK2 2019-10-11 19:45:45+03 FULL STREAM 1/0 11s 180MB 16MB 1.00 0/3C000028 0/3C000198 OK
以 DELTA 模式进行增量备份:
[backupman@backup_host] lt_probackup backup -B /mnt/backups --instance node -b delta --stream --remote-host=lightdb_host --remote-user=lightdb -U backup -d backupdb INFO: Backup start, lt_probackup version: 2.4.15, instance: node, backup ID: PZ7YMP, backup mode: DELTA, wal mode: STREAM, remote: true, compress-algorithm: none, compress-level: 1 INFO: Parent backup: PZ7YK2 INFO: Start transferring data files INFO: Data files are transferred INFO: wait for pg_stop_backup() INFO: pg_stop backup() successfully executed INFO: Validating backup PZ7YMP INFO: Backup PZ7YMP data files are valid INFO: Backup PZ7YMP resident size: 32MB INFO: Backup PZ7YMP completed
让我们向 lt_probackup 配置文件中添加一些参数,这样你就可以在命令行中省略它们:
[backupman@backup_host] lt_probackup set-config -B /mnt/backups --instance node --remote-host=lightdb_host --remote-user=lightdb -U backup -d backupdb
以 DELTA 模式再次进行增量备份,省略一些先前的参数:
[backupman@backup_host] lt_probackup backup -B /mnt/backups --instance node -b delta --stream INFO: Backup start, lt_probackup version: 2.4.15, instance: node, backup ID: PZ7YR5, backup mode: DELTA, wal mode: STREAM, remote: true, compress-algorithm: none, compress-level: 1 INFO: Parent backup: PZ7YMP INFO: Start transferring data files INFO: Data files are transferred INFO: wait for pg_stop_backup() INFO: pg_stop backup() successfully executed INFO: Validating backup PZ7YR5 INFO: Backup PZ7YR5 data files are valid INFO: Backup PZ7YR5 resident size: 32MB INFO: Backup PZ7YR5 completed
让我们来看看实例配置:
[backupman@backup_host] lt_probackup show-config -B /mnt/backups --instance node # Backup instance information pgdata = /var/lib/postgresql/11/main system-identifier = 6746586934060931492 xlog-seg-size = 16777216 # Connection parameters pgdatabase = backupdb pghost = lightdb_host pguser = backup # Replica parameters replica-timeout = 5min # Archive parameters archive-timeout = 5min # Logging parameters log-level-console = INFO log-level-file = OFF log-filename = lt_probackup.log log-rotation-size = 0 log-rotation-age = 0 # Retention parameters retention-redundancy = 0 retention-window = 0 wal-depth = 0 # Compression parameters compress-algorithm = none compress-level = 1 # Remote access parameters remote-proto = ssh remote-host = lightdb_host
注意,我们正在获取其他选项的默认值,这些选项没有被 set-config
命令覆盖。
让我们来看看备份目录:
[backupman@backup_host] lt_probackup show -B /mnt/backups --instance node ==================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status ==================================================================================================================================== node 11 PZ7YR5 2019-10-11 19:49:56+03 DELTA STREAM 1/1 10s 112kB 32MB 1.00 0/41000028 0/41000160 OK node 11 PZ7YMP 2019-10-11 19:47:16+03 DELTA STREAM 1/1 10s 376kB 32MB 1.00 0/3E000028 0/3F0000B8 OK node 11 PZ7YK2 2019-10-11 19:45:45+03 FULL STREAM 1/0 11s 180MB 16MB 1.00 0/3C000028 0/3C000198 OK