lt_probackup

lt_probackup — 管理LightDB数据库集群的备份和恢复

Synopsis

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 是一个管理 LightDB 数据库集群备份和恢复的实用程序。 它旨在定期备份 LightDB 实例,以便在发生故障时恢复服务器。

概述

与其他备份解决方案相比,lt_probackup 提供以下优势,有助于您实现不同的备份策略和处理大量数据:

  • 增量备份:有三种不同的增量模式,可以根据数据流计划备份策略。 增量备份可以节省磁盘空间,并加快备份速度,相比于进行完全备份。 使用增量备份恢复集群的速度也比重放 WAL 文件更快。

  • 增量恢复:通过重用 LTDATA 中可用的有效未更改的页面,加速从备份中的恢复。

  • 验证:自动进行数据一致性检查,并可在不进行实际数据恢复的情况下进行按需备份验证。

  • 验证:使用 checkdb 命令,按需验证 LightDB 实例。

  • 保留:根据保留策略管理 WAL 存档和备份。您可以根据恢复时间或要保留的备份数量配置保留策略,还可以为特定备份指定生存时间 (TTL)。过期备份可以合并或删除。

  • 并行处理:在多个并行线程上运行 backuprestoremergedeletevalidatecheckdb 进程。

  • 压缩:将备份数据以压缩状态存储,以节省磁盘空间。

  • 重复数据删除:如果非数据文件(例如 _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传递模式之一:

  • ARCHIVE。这种备份依赖于 持续归档 以确保一致的恢复。这是默认的WAL传递模式。

  • STREAM。此类备份包括将集群恢复到备份时的一致状态所需的所有文件。无论是否已设置 持续归档,在备份过程中,用于一致恢复所需的WAL段都会通过复制协议进行流式传输,并包含在备份文件中。这就是这种备份被称为 独立独立式 的原因。

限制

lt_probackup 目前存在以下限制:

  • 在Unix系统上,只有启动了 LightDB 服务器的同一OS用户才能进行备份。例如,如果 LightDB 服务器由用户 lightdb 启动,则备份命令也必须由用户 lightdb 运行。在使用SSH进行远程备份时,为了满足此要求,必须将 --remote-user 选项设置为 lightdb

  • 进行备份的 LightDB 服务器和恢复服务器必须通过 block_sizewal_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 -B backup_dir -D data_dir --instance instance_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 命令时可以省略相应的选项。

Note

建议使用 allow-group-access 特性,以便可以由与集群所有者相同组的任何操作系统用户进行备份。在这种情况下,用户应该对集群目录具有读取权限。

配置数据库集群

虽然超级用户可以使用 lt_probackup,但建议创建一个具有所选备份策略所需的最小权限的单独角色。在这些配置说明中,backup 角色被用作示例。

执行 backup,需要为角色 backup 分配以下权限,仅需在与 LightDB 服务器建立连接的数据库中分配:

BEGIN;
CREATE ROLE backup WITH LOGIN;
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 备份

要为 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 备份。

Note

如果您计划在流模式下运行备份,并依赖于 .pgpass 进行身份验证,则 .pgpass 必须包含用于通过复制协议建立连接的 replication 数据库的凭据。例如: pghost:5432:replication:backup_user:my_strong_password

设置持续 WAL 存档

使用 PAGE 备份模式进行备份、执行 PITR、使用 ARCHIVE WAL 传递模式进行备份以及在时间线切换后运行增量备份都需要启用 持续 WAL 存档。要在群集中设置持续存档,请执行以下步骤:

  • 确保参数 wal_level 高于 minimal

  • 如果您在主服务器上配置归档,则必须将 archive_mode 参数设置为 onalways。要在备用服务器上执行存档,请将此参数设置为 always

  • 设置 archive_command 参数,如下所示:

    archive_command = '"install_dir/lt_probackup" archive-push -B "backup_dir" --instance instance_name --wal-file-name=%f [remote_options]'
    

这里 install_dir 是你将要使用的 lt_probackup 版本的安装目录,backup_dirinstance_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归档。

Note

您可以使用任何其他工具来设置连续归档,只要它将WAL段传递到 backup_dir/wal/instance_name 目录中。如果使用压缩,则应使用 gzip,并且文件名中的后缀 .gz 是必需的。而不是使用 lt_probackup 提供的 archive-push 命令。

Note

您可以选择使用 pg_receivewal 实用程序来配置连续归档,而不是通过设置 archive_modearchive_command 参数。在这种情况下,pg_receivewal-D directory 选项应指向 backup_dir/wal/instance_name 目录。 lt_probackup 支持由 pg_receivewal 完成的WAL压缩。仅使用 pg_receivewal 才能实现“零数据丢失”归档策略。

设置备用数据库备份

对于LightDBlt_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

如果您要通过SSH远程模式使用lt_probackup, 请按照以下步骤完成:

  • 在两个系统上都安装lt_probackupbackup_hostdb_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,可以使用更安全的方法,因为可以利用initdb允许组访问功能。

通过SSH的远程模式下,lt_probackup的工作方式如下:

  • 只有以下命令可以在远程模式下启动: add-instancebackuprestorearchive-pusharchive-get

  • 在远程模式下操作需要在本地和远程系统上都安装lt_probackup二进制文件。 本地和远程二进制文件的版本必须相同。

  • 当以远程模式启动时,本地系统上的主要lt_probackup进程通过SSH连接到远程系统, 并在远程系统上启动一个或多个代理进程,称为远程代理。 远程代理的数量等于-j/--threads设置。

  • 主要lt_probackup进程使用远程代理访问远程文件并在本地和远程系统之间传输数据。

  • 远程代理尽量减少主机之间的网络流量和往返次数。

  • 主进程通常在备份主机上启动,并连接到数据库主机,但在使用archive-pusharchive-get命令时,主进程会在数据库主机上启动,并连接到备份主机

  • 数据传输完成后,远程代理被终止,SSH连接被关闭。

  • 如果远程代理遇到错误条件,则所有代理都会被终止,并且错误详细信息会由主要的 lt_probackup进程报告,该进程会以错误退出。

  • 压缩始终在db_host上进行,而解压始终在backup_host上进行。

Note

您可以强制在SSH设置上实施额外限制, 以保护系统在账户遭到妥协的情况下。

设置PTRACK备份

LightDB可以使用PTRACK备份模式。可以在此处找到指向PTRACK补丁的链接 here

Note

PTRACK将在未来直接使用。

如果您将使用PTRACK备份,请完成以下附加步骤。执行PTRACK备份的角色 (在下面的示例中为backup角色)必须能够访问集群中的所有数据库。

对于LightDB:

  1. 创建PTRACK扩展:

    CREATE EXTENSION ptrack;
    

  2. 要启用跟踪页面更新,请将ptrack.map_size 参数设置为正整数并重新启动服务器。

    为了获得最佳性能,建议将ptrack.map_size设置为 N / 1024,其中 NLightDB集群的大小(以MB为单位)。 如果将此参数设置为较低的值,则PTRACK更有可能将多个块映射在一起, 这会导致跟踪更改的块时出现误报,并增加增量备份大小,因为未更改的块也会被复制到增量备份中。 将ptrack.map_size设置为较高的值不会影响PTRACK操作,但不建议将此参数设置为高于1024的值。

Note

如果更改了ptrack.map_size参数值,则先前创建的PTRACK映射文件将被清除, 并重新开始跟踪新更改的块。因此,在更改ptrack.map_size后,在进行增量PTRACK备份之前, 必须重新进行完整备份。

用法

创建备份

要创建备份,请执行以下命令:

lt_probackup backup -B backup_dir --instance instance_name -b backup_mode

其中backup_mode可以取以下值之一:

  • FULL - 创建包含要恢复的集群的所有数据文件的完整备份。

  • DELTA - 读取数据目录中的所有数据文件,并为自上次备份以来已更改的页面创建增量备份。

  • PAGE - 基于自上次完整备份或增量备份以来生成的WAL文件创建增量备份。仅从数据文件中读取已更改的块。

  • PTRACK - 实时跟踪页面更改,创建增量备份。

当从增量备份恢复集群时,lt_probackup依赖于父完整备份和它们之间的所有增量备份, 这称为备份链。在进行增量备份之前,必须至少创建一个完整备份。

归档模式

ARCHIVE是默认的WAL传递模式。

例如,要在ARCHIVE模式下进行完整备份,请运行以下命令:

lt_probackup backup -B backup_dir --instance instance_name -b FULL

归档备份依赖于持续归档,以获取在备份时恢复集群所需的WAL段,使其处于一致的状态。

当进行备份时,lt_probackup确保包含Start LSNStop LSN之间WAL记录的WAL文件实际上存在于 backup_dir/wal/instance_name 目录中。 lt_probackup还确保可以解析Start LSNStop LSN之间的WAL记录。这项预防措施消除了隐式WAL损坏的风险。

流模式

STREAM是可选的WAL传递模式。

例如,要在STREAM模式下进行完整备份,请在之前示例的命令中添加--stream标志:

lt_probackup backup -B backup_dir --instance instance_name -b FULL --stream --temp-slot

可选的--temp-slot标志确保在备份完成之前WAL被旋转时,所需的段仍然可用。

与ARCHIVE模式下的备份不同,STREAM备份包括在备份时恢复集群所需的所有WAL段,以使其处于一致的状态。

backup期间,lt_probackup将包含 Start LSNStop LSN之间WAL记录的WAL文件流式传输到 backup_dir/backups/instance_name/backup_id/database/lt_wal目录中。 为了消除隐式WAL损坏的风险, lt_probackup还检查Start LSNStop 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 -B backup_dir --instance instance_name -b FULL --external-dirs=/etc/dir1:/etc/dir2

lt_probackup递归地将每个外部目录的内容复制到备份目录中的单独子目录中。由于包含在不同备份中的外部目录不必相同,因此在从增量备份恢复集群时,只会恢复属于此特定备份的目录。存储在先前备份中的任何外部目录都将被忽略。

要在您的实例的每个备份中包含相同的目录,可以使用set-config命令和--external-dirs选项在pg_probackup.conf配置文件中指定它们。

执行集群验证

要验证LightDB数据库集群未损坏,请运行以下命令:

lt_probackup checkdb [-B backup_dir [--instance instance_name]] [-D data_dir] [connection_options]

该命令通过运行页面头健全性检查以及块级校验和验证(如果启用了校验和),对指定数据目录中的所有数据文件执行物理验证。如果检测到损坏的页面,则checkdb将继续集群验证,直到验证集群中的所有页面。

默认情况下,lt_probackup在进行备份时会自动执行类似的页面验证checkdb命令使您能够按需执行此类页面验证,而无需创建任何备份副本,即使不使用lt_probackup备份集群。

要执行集群验证,lt_probackup需要连接到要验证的集群。通常,只需指定此集群的备份实例,lt_probackup就可以确定所需的连接选项。但是,如果省略了-B--instance选项,则必须通过环境变量或命令行选项提供data_dir及其所需的连接选项

物理验证无法检测到逻辑不一致、缺失或已作废的块和整个文件,或类似的异常情况。扩展amcheck提供了这些问题的部分解决方案。

如果除了进行物理验证之外,您还想使用这些扩展验证所有数据库中的所有索引,可以在运行checkdb命令时指定--amcheck标志:

lt_probackup checkdb -D data_dir --amcheck [connection_options]

您可以通过指定--skip-block-validation标志来跳过物理验证。在这种情况下,您可以省略backup_dirdata_dir选项,只需要提供连接选项即可:

lt_probackup checkdb --amcheck --skip-block-validation [connection_options]

可以通过使用--heapallindexed标志更彻底地进行逻辑验证,检查所有应该索引的堆元组是否实际上被索引,但这会以更高的CPU、内存和I/O消耗为代价。

验证备份

lt_probackup在备份过程中为每个文件计算校验和。 检查备份数据文件的校验和的过程称为备份验证。 默认情况下,验证在备份完成后立即运行,并在恢复之前运行,以检测可能的备份损坏。

如果您想跳过备份验证,可以在运行backuprestore命令时指定--no-validate标志。

为确保所有必需的备份文件都存在并可以用于恢复数据库集群,可以使用与恢复时相同的恢复目标选项运行validate命令。

例如,要检查您可以将数据库集群从备份副本还原到事务ID 4242,运行以下命令:

lt_probackup validate -B backup_dir --instance instance_name --recovery-target-xid=4242

如果验证成功完成,lt_probackup会显示相应的消息。如果验证失败,您将收到一条错误消息,其中包含恢复的确切时间、事务ID和LSN的信息。

如果通过-i/--backup-id选项指定backup_id,则仅验证具有指定备份ID的备份副本。如果使用恢复目标选项指定backup_idvalidate命令将检查是否可以将指定备份还原到指定的恢复目标。

例如,要检查您可以将数据库集群从具有备份ID PT8XFX的备份副本还原到指定的时间戳,请运行以下命令:

lt_probackup validate -B backup_dir --instance instance_name -i PT8XFX --recovery-target-time="2017-05-18 14:18:11+03"

如果您指定了增量备份的 backup_id,则将验证从完全备份开始的所有父备份。

如果您省略所有参数,则会验证所有备份。

恢复集群

要从备份中恢复数据库集群,请至少使用以下选项运行restore命令:

lt_probackup restore -B backup_dir --instance instance_name -i backup_id

其中:

  • 备份目录是存储所有备份文件和元信息的备份目录。

  • 实例名称是要恢复的集群的备份实例。

  • backup_id指定要从中恢复集群的备份。 如果您省略此选项,lt_probackup会使用指定实例中可用的最新有效备份。 如果您指定要还原的增量备份,lt_probackup会自动还原底层的全备份, 然后依次应用所有必要的增量备份。

一旦完成restore命令,启动数据库服务。

如果您恢复了归档备份, 执行了PITR, 或者在restore命令中指定了--restore-as-replica标志以设置备用服务器, lt_probackup会在所有数据文件都复制到目标目录后创建恢复配置文件。 此文件包括恢复所需的最小设置,除了primary_conninfo参数中的密码; 您必须手动添加密码或使用--primary-conninfo选项(如果需要)。 对于LightDBlt_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 -B backup_dir --instance instance_name -D data_dir -j 4 -i backup_id -T tablespace1_dir=tablespace1_newdir -T tablespace2_dir=tablespace2_newdir

要在远程主机上恢复集群,请按照the section called “使用远程模式下的 lt_probackup中的说明操作。

Note

默认情况下,restore命令会在恢复集群之前验证指定的备份。 如果您定期运行备份验证并希望在恢复集群时节省时间, 可以指定--no-validate标志来跳过验证并加快恢复速度。

增量恢复

使用带有 增量恢复选项restore 命令,可以通过替换已经存在的 LightDB 数据目录中仅无效和更改的页面,显著提高从备份恢复的速度。

要以增量模式从备份中恢复数据库集群,请使用以下选项运行 restore 命令:

lt_probackup restore -B backup_dir --instance instance_name -D data_dir -I incremental_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.
      

Note

仅对具有 program_version 大于或等于 2.4.0 的备份才可以进行增量恢复。

部分恢复

如果您在备份之前启用了 部分恢复,则可以使用带有 部分恢复选项restore 命令仅恢复部分数据库。

要仅恢复指定的数据库,请使用以下选项运行 restore 命令:

lt_probackup restore -B backup_dir --instance instance_name --db-include=database_name
      

可以多次指定 --db-include 选项。例如,要仅恢复数据库 db1db2,请运行以下命令:

lt_probackup restore -B backup_dir --instance instance_name --db-include=db1 --db-include=db2

要从恢复中排除一个或多个数据库,请使用 --db-exclude 选项:

lt_probackup restore -B backup_dir --instance instance_name --db-exclude=database_name

可以多次指定 --db-exclude 选项。例如,要从恢复中排除数据库 db1db2,请运行以下命令:

lt_probackup restore -B backup_dir --instance instance_name --db-exclude=db1 --db-exclude=db2

部分恢复依赖于 LightDB 恢复进程对截断文件的宽松行为。为了使恢复正常工作,已排除的数据库的文件将作为大小为零的文件进行恢复。成功启动 LightDB 集群后,必须使用 DROP DATABASE 命令删除已排除的数据库。

为了将包含多个数据库的单个集群分解为具有最小停机时间的单独集群,您可以使用 --restore-as-replica 选项对特定数据库进行集群的部分恢复,使其作为备用数据库。

Note

总是会恢复 template0template1 数据库。

执行时间点恢复(PITR)

如果在进行备份之前启用了 持续WAL归档,则可以使用 recovery目标选项 以任意时间点(恢复目标)恢复集群状态,使用 restore 命令进行恢复。

只要WAL归档从备份开始的时间点可用,您可以同时使用STREAM和ARCHIVE备份进行恢复。 如果省略 -i/--backup-id 选项,lt_probackup 将自动选择最接近指定恢复目标的备份并开始恢复过程,否则 lt_probackup 将尝试将指定备份还原到指定的恢复目标。

  • 要恢复集群在指定时间点的状态,请使用 --recovery-target-time 选项,以时间戳格式指定时间。例如:

    lt_probackup restore -B backup_dir --instance instance_name --recovery-target-time="2017-05-18 14:18:11+03"
    
  • 要将集群状态还原到特定事务ID,请使用 --recovery-target-xid 选项:

    lt_probackup restore -B backup_dir --instance instance_name --recovery-target-xid=687
    
  • 要将集群状态还原到特定LSN,请使用 --recovery-target-lsn 选项:

    lt_probackup restore -B backup_dir --instance instance_name --recovery-target-lsn=16/B374D848
    
  • 要将集群状态还原到特定的命名还原点,请使用 --recovery-target-name 选项:

    lt_probackup restore -B backup_dir --instance instance_name --recovery-target-name="before_app_upgrade"
    
  • 要将备份还原到WAL归档中可用的最新状态,请使用 --recovery-target 选项,并将值设置为 latest

    lt_probackup restore -B backup_dir --instance instance_name --recovery-target="latest"
    
  • 要将集群还原到最早的一致性点,请使用 --recovery-target 选项,并将值设置为 immediate

    lt_probackup restore -B backup_dir --instance instance_name --recovery-target='immediate'
    

使用远程模式下的 lt_probackup

lt_probackup 支持远程模式,可以通过SSH远程执行备份和恢复操作。 在此模式下,备份目录存储在本地系统上,而要备份的 LightDB 实例位于远程系统上。 您必须在两个系统上都安装 lt_probackup

Note

lt_probackup 依赖于无密码SSH连接来在主机之间进行通信。

典型的工作流程如下:

  • 在备份主机上,按照安装和设置部分中的说明配置 lt_probackup。对于 add-instanceset-config 命令,请确保指定 远程选项,指向带有 LightDB 实例的数据库主机。

  • 如果您想在 PAGE 模式下进行远程备份,或者依赖于 ARCHIVE WAL 传递模式,或者使用 PITR,请按照设置持续的WAL归档部分中的说明,从数据库主机到备份主机配置持续的WAL归档。对于 archive-pusharchive-get 命令,您必须指定指向备份目录所在的备份主机的 远程选项

  • 在备份主机上使用 backuprestore 命令,并使用 远程选项lt_probackup 通过 SSH 连接到远程系统,并在本地创建备份或将之前拍摄的备份恢复到远程系统上。

例如,要代表用户lightdb通过SSH连接通过端口2302与远程主机地址 192.168.0.2 上的 LightDB 集群创建一个归档全备份,运行:

lt_probackup backup -B backup_dir --instance instance_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 -B backup_dir --instance instance_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 -B backup_dir --instance instance_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" --instance instance_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 -B backup_dir --instance instance_name --remote-user=lightdb --remote-host=192.168.0.2 --remote-port=2302 --restore-command='"install_dir/lt_probackup" archive-get -B "backup_dir" --instance instance_name --wal-file-path=%p --wal-file-name=%f --remote-host=192.168.0.3 --remote-port=2303 --remote-user=backup'

在并行线程上运行lt_probackup

backuprestoremergedeletecheckdbvalidate进程可以在几个并行线程上执行。 如果有足够的资源(CPU核心、磁盘和网络带宽),这可以显著加快lt_probackup操作。

并行执行由-j/--threads命令行选项控制。例如,要使用四个并行线程创建备份,请运行:

lt_probackup backup -B backup_dir --instance instance_name -b FULL -j 4

Note

并行恢复仅适用于从备份目录复制数据到集群的数据目录。 启动LightDB服务器时,需要回放WAL记录,这不能并行执行。

配置lt_probackup

一旦初始化备份目录并添加了新的备份实例,您可以使用位于backup_dir/backups/instance_name目录中的pg_probackup.conf配置文件来微调lt_probackup的配置。

例如,backupcheckdb命令使用常规的LightDB连接。 为了避免每次在命令行上指定连接选项,您可以使用set-config命令在pg_probackup.conf配置文件中设置它们。

Note

pg_probackup.conf手动编辑不建议

最初,pg_probackup.conf包含以下设置:

  • LTDATA — 要备份的集群数据目录的路径。

  • system-identifierLightDB 实例的唯一标识符。

此外,您可以使用set-config命令定义远程保留日志记录压缩设置:

lt_probackup set-config -B backup_dir --instance instance_name
[--external-dirs=external_directory_path] [remote_options] [connection_options] [retention_options] [logging_options]

要查看当前设置,请运行以下命令:

lt_probackup show-config -B backup_dir --instance instance_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 — 实例名称。

  • VersionLightDB的主要版本。

  • ID — 备份标识符。

  • 恢复时间 — 您可以恢复数据库集群状态的最早时间。

  • Mode — 用于进行此备份的方法。可能的值:FULLPAGEDELTAPTRACK

  • WAL模式 — WAL传递模式。可能的值:STREAMARCHIVE

  • 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 — 备份无效,因为其中一个父备份文件已损坏或丢失。

只有当备份状态为 OKDONE 时才能从备份中恢复集群。

要获取有关备份的更详细信息,请使用备份ID运行 show 命令:

lt_probackup show -B backup_dir --instance instance_name -i backup_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 — 备份期间使用的压缩算法。可能的值为:zlibpglznone

  • compress-level — 备份期间使用的压缩级别。

  • from-replica — 此备份是否在备用节点上进行?可能的值为:10

  • block-size — 备份开始时LightDB集群的设置block_size

  • checksum-versiondata block checksumsLightDB备份集群中是否启用?可能的值为:10

  • program-version — 用于创建备份的lt_probackup二进制文件的完整版本。

  • start-time — 备份开始时间。

  • end-time — 备份结束时间。

  • expire-time — 根据保留策略,已固定备份可以删除的时间点。此属性仅适用于固定备份。

  • uncompressed-bytes — 添加页面头并应用压缩之前的数据文件大小。如果使用了压缩,则可以通过比较uncompressed-bytesdata-bytes来评估压缩的有效性。

  • pgdata-bytes — 备份时LightDB集群数据文件的大小。可以通过比较pgdata-bytesuncompressed-bytes来评估增量备份的有效性。

  • recovery-xid — 备份结束时的事务ID。

  • parent-backup-id — 父备份的ID。仅适用于增量备份。

  • primary_conninfo — 用于连接到LightDB集群以进行此备份的libpq连接参数。不包括密码。

  • note — 附加到备份的文本说明。

  • content-crcbackup_content.control文件的CRC32校验和。用于检测备份元信息的损坏。

您也可以以 JSON 格式获取备份的详细信息:

lt_probackup show -B backup_dir --instance instance_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归档信息

要查看每个实例的WAL归档信息,请运行以下命令:

lt_probackup show -B backup_dir [--instance instance_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 存档状态。可能的值有:

    • OKMin SegnoMax Segno 之间的所有 WAL 日志段都存在。

    • DEGRADEDMin SegnoMax Segno 之间的某些 WAL 日志段丢失。 要查找丢失的文件,请使用 JSON 格式查看此报告。

要以 JSON 格式获取有关 WAL 存档的更详细信息,请运行以下命令:

lt_probackup show -B backup_dir [--instance instance_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-configpg_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 -B backup_dir --instance instance_name --retention-redundancy=2 --retention-window=7

要根据保留策略清理备份目录,必须使用 保留标志 运行 delete 命令,如下所示;或者在创建新备份时使用这些标志来处理过时的备份副本,可以使用 backup 命令。

例如,要删除不再满足定义的保留策略的所有备份副本,请使用 --delete-expired 标志运行以下命令:

lt_probackup delete -B backup_dir --instance instance_name --delete-expired

如果您还想删除不再需要用于任何备份的 WAL 文件,则应该指定 --delete-wal 标志:

lt_probackup delete -B backup_dir --instance instance_name --delete-expired --delete-wal

您还可以通过在运行 deletebackup 命令时直接指定 --retention-redundancy--retention-window 选项来设置或覆盖当前的保留策略:

lt_probackup delete -B backup_dir --instance instance_name --delete-expired --retention-window=7 --retention-redundancy=2

由于增量备份要求其父全备份和所有之前的增量备份都可用,如果其中任何一个备份过期,则仍然不能删除,只要该链中的至少一个增量备份满足保留策略。为避免保留过期备份以恢复活动增量备份,可以在运行 backupdelete 命令时使用 --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

即使 P7XDHBP7XDHU 备份超出了保留窗口,它们也不能被删除,因为这会使后续的增量备份 P7XDJAP7XDQV 失效,而这些备份仍然是必需的。因此,如果运行带有 --delete-expired 标志的 delete 命令,则只有 P7XDFT 全量备份将被删除。

使用 --merge-expired 选项,P7XDJA 备份与底层的 P7XDHUP7XDHB 备份合并成一个完整备份,因此不再需要保留这些过期备份:

lt_probackup delete -B backup_dir --instance node --delete-expired --merge-expired
lt_probackup show -B backup_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 -B backup_dir --instance instance_name -i backup_id --ttl=30d

此命令将指定备份的过期时间设置为从其 recovery-time 属性中指定的时间开始的30天。

您也可以使用 --expire-time 选项显式设置备份的过期时间。例如:

lt_probackup set-backup -B backup_dir --instance instance_name -i backup_id --expire-time="2020-01-01 00:00:00+03"

或者,您可以使用 backup 命令的 --ttl--expire-time 选项来固定新创建的备份:

lt_probackup backup -B backup_dir --instance instance_name -b FULL --ttl=30d
lt_probackup backup -B backup_dir --instance instance_name -b FULL --expire-time="2020-01-01 00:00:00+03"

若要检查备份是否被固定,运行 show 命令:

lt_probackup show -B backup_dir --instance instance_name -i backup_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 -B backup_dir --instance instance_name -i backup_id --ttl=0

Note

固定的增量备份隐式固定了其所有父备份。如果您稍后取消固定此类备份,则其隐式固定的父代备份也将自动取消固定。

配置WAL归档保留政策

当启用 连续WAL归档 时,归档的WAL段可能会占用大量磁盘空间。即使您不时删除旧的备份副本,--delete-wal 标志也只能清除那些不适用于备份目录中任何剩余备份的WAL段。但是,如果对于最近的备份而言关键的是时间点恢复,则可以配置WAL归档保留政策,以保留有限深度的WAL归档,并重新获得更多的磁盘空间。

要配置WAL归档保留政策,您必须使用 --wal-depth 选项运行 set-config 命令,指定可用于PITR的备份数。此设置适用于所有时间轴,因此如果可用,则应能够对每个时间轴执行相同数量的备份进行PITR。不包括 固定的备份 在此计数中:如果最新的备份之一被固定,lt_probackup 将确保可以为一份额外的备份进行PITR。

要删除不符合定义的WAL归档保留政策的WAL段,您只需使用 --delete-wal 标志运行 deletebackup 命令。对于归档备份,始终保留 Start LSNStop LSN 之间的WAL段,因此这种备份保持有效,无论 --wal-depth 设置如何,如果需要,仍然可以进行恢复。

您还可以使用 --wal-depth 选项,使用 deletebackup 命令覆盖先前定义的WAL归档保留政策,并在运行时清除旧的WAL段。

假设您已经在 backup_dir 目录中备份了 node 实例,并配置了 连续WAL归档

lt_probackup show -B backup_dir --instance node
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 -B backup_dir --instance instance_name -i backup_id

此命令合并属于公共增量备份链的备份。如果指定了一个全量备份,则它将与其第一个增量备份合并。如果指定了一个增量备份,则它将与其父全量备份一起合并,包括它们之间的所有增量备份。合并完成后,全量备份将包含所有合并的数据,并且增量备份将作为冗余数据被删除。因此,合并操作实际上等同于重新拍摄一个全量备份并删除所有过期的备份,但它可以节省大量时间,特别是对于大数据量的情况,而且如果您使用lt_probackup远程模式下,还可以节省I/O和网络流量。

在合并之前,lt_probackup会验证所有受影响的备份以确保它们是有效的。您可以通过运行带有备份ID的show命令来检查当前备份的状态:

lt_probackup show -B backup_dir --instance instance_name -i backup_id

如果合并仍在进行中,则备份状态显示为MERGING。对于全量备份,还可以在合并的最后阶段更新元数据时显示为MERGED。合并是幂等的,因此如果合并被中断,您可以重新启动合并。

删除备份

要删除不再需要的备份,请运行以下命令:

lt_probackup delete -B backup_dir --instance instance_name -i backup_id

此命令将删除指定的backup_id备份,以及任何从backup_id备份派生的增量备份。这样,您可以删除一些最近的增量备份,同时保留底层的全量备份和一些随后的增量备份。

要删除不必要的WAL文件以恢复任何剩余备份,使用--delete-wal标志:

lt_probackup delete -B backup_dir --instance instance_name --delete-wal

要删除根据当前保留策略已过期的备份,请使用--delete-expired标志:

lt_probackup delete -B backup_dir --instance instance_name --delete-expired

只要有至少一个基于过期备份的增量备份满足保留策略,就无法删除过期备份。如果您希望最小化仍需要保留的备份数量以保持增量备份的有效性,请在运行此命令时指定--merge-expired标志:

lt_probackup delete -B backup_dir --instance instance_name --delete-expired --merge-expired

在这种情况下,lt_probackup会查找最早的增量备份,以满足保留策略,并将此备份与底层的全量备份和已过期的增量备份合并,从而将其变为全量备份。合并完成后,剩余的过期备份将被删除。

在合并或删除备份之前,您可以运行带有--dry-run标志的delete命令,它会根据当前的保留策略显示所有可用备份的状态,而不执行任何不可逆转的操作。

要删除具有特定状态的所有备份,请使用--status

lt_probackup delete -B backup_dir --instance instance_name --status=ERROR
    

按状态删除备份会忽略已经建立的保留策略。

命令行参考

命令

本节介绍 lt_probackup 命令。可选参数用方括号括起来。 有关详细参数说明,请参见 选项 部分。

版本

lt_probackup version

输出 lt_probackup 版本。

帮助

lt_probackup help [command]

显示 lt_probackup 命令的概要。如果指定了其中一个 lt_probackup 命令,则显示可用于该命令的选项的详细信息。

init

lt_probackup init -B backup_dir [--help]

初始化在backup_dir中存储备份副本、WAL归档和备份数据库集群的元信息的备份目录。如果指定的backup_dir已经存在,则必须为空。否则,lt_probackup会显示相应的错误消息。

详见初始化备份目录

add-instance

lt_probackup add-instance -B backup_dir -D data_dir --instance instance_name [--help]

在备份目录backup_dir中初始化新的备份实例,并生成控制具有指定data_dir数据目录的集群的pg_probackup.conf配置文件,控制lt_probackup的设置。

详见添加新的备份实例

删除实例

lt_probackup del-instance -B backup_dir --instance instance_name [--help]

删除与指定实例关联的所有备份和WAL文件。

set-config

lt_probackup set-config -B backup_dir --instance instance_name
[--help] [--pgdata=pgdata-path]
[--retention-redundancy=redundancy][--retention-window=window][--wal-depth=wal_depth]
[--compress-algorithm=compression_algorithm] [--compress-level=compression_level]
[-d dbname] [-h host] [-p port] [-U username]
[--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

set-backup

lt_probackup set-backup -B backup_dir --instance instance_name -i backup_id
{--ttl=ttl | --expire-time=time}
[--note=backup_note] [--help]

将提供的备份特定设置设置到backup.control配置文件中,或修改先前定义的值。

--note=backup_note

设置备份副本的文本备注。 如果backup_note包含换行符,则只保存第一个换行符之前的子字符串。 文本备注的最大大小为1 KB。 'none'值将删除当前备注。

查看所有可用的固定设置,详见固定选项

show-config

lt_probackup show-config -B backup_dir --instance instance_name [--format=plain|json]

显示位于 backup_dir/backups/instance_name目录中的pg_probackup.conf配置文件的内容。您可以指定--format=json选项以获得JSON格式的结果。默认情况下,将以纯文本形式显示配置设置。

要编辑pg_probackup.conf,请使用 set-config命令。

显示

lt_probackup show -B backup_dir
[--help] [--instance instance_name [-i backup_id | --archive]] [--format=plain|json]

显示备份目录的内容。 如果指定了instance_namebackup_id,则显示有关此备份的详细信息。 如果指定了--archive选项,则显示备份目录的WAL归档内容。

默认情况下,备份目录的内容显示为纯文本。 您可以指定 --format=json选项以获取JSON格式的结果。

有关用法的详细信息,请参阅以下部分: 管理备份目录查看WAL归档信息

备份

lt_probackup backup -B backup_dir -b backup_mode --instance instance_name
[--help] [-j num_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 -B backup_dir --instance instance_name
[--help] [-D data_dir] [-i backup_id]
[-j num_threads] [--progress]
[-T OLDDIR=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 目录进行恢复。 OLDDIRNEWDIR 必须是绝对路径。 如果路径包含等号(=),请使用反斜杠进行转义。可以使用此选项多次指定多个表空间。

--external-mapping=OLDDIR=NEWDIR

将备份中包含的外部目录从 OLDDIR 移动到 NEWDIR 目录进行恢复。 OLDDIRNEWDIR 必须是绝对路径。 如果路径包含等号(=),请使用反斜杠进行转义。可以使用此选项多次指定多个目录。

--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 存档选项日志选项部分恢复选项通用选项

有关用法的详细信息,请参见 恢复群集 部分。

checkdb

lt_probackup checkdb
[-B backup_dir] [--instance instance_name] [-D data_dir]
[--help] [-j num_threads] [--progress]
[--skip-block-validation] [--amcheck] [--heapallindexed]
[connection_options] [logging_options]

通过检测物理和逻辑损坏,验证 LightDB 数据库群集的正确性。

--amcheck

如果在检查数据文件时没有发现损坏,将为指定的 LightDB 实例执行索引的逻辑验证。您必须在数据库中安装 amcheck 扩展或 amcheck_next 扩展才能检查其索引。对于没有 amcheck 的数据库,将跳过索引验证。

--skip-block-validation

跳过数据文件的验证。您只能与 --amcheck 标志一起使用此标志,以便仅执行索引的逻辑验证。

--heapallindexed

检查所有应该被索引的堆元组是否实际上被索引。您只能与 --amcheck 标志一起使用此标志。

仅当您使用版本为 2.0 或更高版本的 amcheck 扩展,或任何版本的 amcheck_next 扩展时,才能进行此检查。

另外,可以使用 连接选项日志选项

有关用法的详细信息,请参见 验证群集 部分。

validate

lt_probackup validate -B backup_dir
[--help] [--instance instance_name] [-i backup_id]
[-j num_threads] [--progress]
[--skip-block-validation]
[recovery_target_options] [logging_options]

验证恢复群集所需的所有文件是否存在且未损坏。如果未指定 instance_namelt_probackup 将验证备份目录中所有可用的备份。如果您仅指定了 instance_name,没有任何其他选项,lt_probackup 将验证此备份实例中所有可用的备份。如果您指定了 instance_name恢复目标选项 和/或 backup_idlt_probackup 将检查使用这些选项是否可以还原群集。

有关详细信息,请参见 验证备份 部分。

merge

lt_probackup merge -B backup_dir --instance instance_name -i backup_id
[--help] [-j num_threads] [--progress] [--no-validate] [--no-sync]
[logging_options]

合并属于公共增量备份链的备份。如果指定完全备份,则将其与其第一个增量备份合并。如果指定增量备份,则将其与其父完全备份一起合并,以及它们之间的所有增量备份。合并完成后,完全备份收取所有合并的数据,并将增量备份作为冗余项删除。

--no-validate

跳过合并前后的自动验证。

--no-sync

不将合并的文件同步到磁盘。您可以使用此标志加速合并过程。使用此标志可能会导致操作系统或硬件崩溃的数据损坏。

有关详细信息,请参见 合并备份 部分。

delete

lt_probackup delete -B backup_dir --instance instance_name
[--help] [-j num_threads] [--progress]
[--retention-redundancy=redundancy][--retention-window=window][--wal-depth=wal_depth] [--delete-wal]
{-i backup_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

不将合并的文件同步到磁盘。您可以使用此标志加速保留合并过程。使用此标志可能会导致操作系统或硬件崩溃的数据损坏。

有关详细信息,请参见 删除备份保留选项配置保留策略 部分。

archive-push

lt_probackup archive-push -B backup_dir --instance instance_name
--wal-file-name=wal_file_name [--wal-file-path=wal_file_path]
[--help] [--no-sync] [--compress] [--no-ready-rename] [--overwrite]
[-j num_threads] [--batch-size=batch_size]
[--archive-timeout=timeout]
[--compress-algorithm=compression_algorithm]
[--compress-level=compression_level]
[remote_options] [logging_options]

将 WAL 文件复制到备份目录的相应子目录中,并通过 instance_namesystem-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 归档

有关详细信息,请参见 归档选项压缩选项 部分。

archive-get

lt_probackup archive-get -B backup_dir --instance instance_name --wal-file-path=wal_file_path --wal-file-name=wal_file_name
[-j num_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

backuprestoremergevalidatecheckdbarchive-push 进程设置并行线程数。

--progress

显示操作的进度。

--help

显示有关可与此命令一起使用的选项的详细信息。

恢复目标选项

如果已经配置了 连续的 WAL 归档,您可以使用以下选项和 restorevalidate 命令共同指定必须恢复或验证数据库集群的时间点。

--recovery-target=immediate|latest

定义恢复的停止时间:

  • 当设置为 immediate 时,在恢复到指定备份的一致状态之后,或者当省略了 -i/--backup-id 选项时,恢复到最新可用的备份后停止。当使用 STREAM 备份时,这是默认行为。

  • 当设置为 latest 时,会一直进行恢复,直到应用存档中的所有 WAL 分段。当使用 ARCHIVE 备份时,这是默认行为。

--recovery-target-timeline=timeline

指定用于恢复的特定时间线。默认情况下,使用指定备份的时间线。

--recovery-target-lsn=lsn

指定写入前日志位置的 LSN,恢复将进行到该位置。仅可在恢复主版本号为 10 或更高版本的数据库集群时使用。

--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

保留选项

你可以与 backupdelete 命令一起使用这些选项。

有关配置保留策略的详细信息,请参阅 配置保留策略 部分。

--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

显示所有可用备份的当前状态,而不删除或合并任何过期的备份。

固定选项

你可以与 backupset-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

控制哪些信息级别将被发送到控制台日志。有效值为 verboseloginfowarningerroroff。每个级别包括其后面的所有级别。 级别越靠后,发送的消息越少。 off级别禁用控制台日志记录。

默认值:info

Note

所有控制台日志消息都会发送到stderr, 因此showshow-config命令的输出不会与日志消息混在一起。

--log-level-file=log_level

控制哪些信息级别将被发送到日志文件。有效值为 verboseloginfowarningerroroff。每个级别包括其后面的所有级别。 级别越靠后,发送的消息越少。 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命令启动时会将日志文件轮换一次,除了helpversion命令外。零值禁用基于大小的轮换。支持的单位:kB、MB、GB、TB(默认为kB)。

默认值:0

--log-rotation-age=log_rotation_age

单个日志文件的最长存活时间。如果达到此值,lt_probackup命令启动时会将日志文件轮换一次,除了helpversion命令外。上一次日志文件创建的时间存储在$BACKUP_PATH/log/log_rotation中。零值禁用基于时间的轮换。支持的单位:ms、s、min、h、d(默认为min) 。

默认值:0

连接选项

您可以将这些选项与backupcheckdb命令一起使用。

所有 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

强制密码提示。(已过时)

压缩选项

您可以与 backuparchive-push 命令一起使用这些选项。

--compress-algorithm=compression_algorithm

定义用于压缩数据文件的算法。可能的值包括 zlibpglznone。如果设置为 zlibpglz,则启用压缩。默认情况下,压缩已禁用。对于 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_commandrestore_command 中 WAL 文件的路径。请使用 %p 变量作为此选项的值以进行正确处理。

--wal-file-name=wal_file_name

提供 archive_commandrestore_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-instanceset-configbackuprestorearchive-pusharchive-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 手册页

远程WAL归档选项

本节介绍用于提供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

指定要从恢复中排除的数据库的名称。集群中的所有其他数据库都将像往常一样进行恢复,包括template0template1。此选项可以为多个数据库指定多次。

--db-include=dbname

指定要从备份中恢复的数据库的名称。集群中的所有其他数据库都不会被恢复,除了template0template1之外。此选项可以为多个数据库指定多次。

副本选项

本节介绍与从备用节点备份相关的选项。

Note

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域套接字文件扩展名。

默认值:5432LightDB默认端口。

--master-user=username

已弃用。要连接的用户名。

默认值:lightdbLightDB默认用户名。

--replica-timeout=timeout

已弃用。通过复制等待WAL段流的时间,以秒为单位。默认情况下,lt_probackup等待300秒。您也可以使用set-config命令在pg_probackup.conf配置文件中定义此参数。

默认值:300 sec

How-To

以下所有示例均假定通过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/mainLightDB 数据目录位于 lightdb_host 上。

最小化安装

该场景演示了如何设置独立的 FULL 和 DELTA 备份。

  1. backup_hostlightdb_host 设置无密码 SSH 连接:

      [backupman@backup_host] ssh-copy-id lightdb@lightdb_host
      
  2. 配置你的 LightDB 集群。

    出于安全考虑,建议使用单独的数据库进行备份操作。

      lightdb@postgres=#
      CREATE DATABASE backupdb;
      

    连接到 backupdb 数据库,创建 probackup 角色,并赋予该角色以下权限:

      backupdb=#
      BEGIN;
      CREATE ROLE backup WITH LOGIN 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;
      
  3. 初始化备份目录:

      [backupman@backup_host]$ lt_probackup init -B /mnt/backups
      INFO: Backup catalog '/mnt/backups' successfully inited
      
  4. 将实例 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
      
  5. 进行完全备份:

      [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
      
  6. 让我们来看看备份目录:

      [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
      
  7. 以 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
      
  8. 让我们向 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
      
  9. 以 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
      
  10. 让我们来看看实例配置:

      [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 命令覆盖。

  11. 让我们来看看备份目录:

      [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
      
English|中文