当前位置: 首页 > 工具软件 > LT.DataBackup > 使用案例 >

LightDB lt_probackup备份与恢复

施学
2023-12-01

LightDB lt_probackup备份与恢复

lt_probackup 是一个管理 LightDB 数据库集群备份和恢复的实用程序。
它被设计用来执行 LightDB 实例的定期备份,以便在发生故障时恢复服务器。

lt_probackup的优点

1)增量备份:页面级增量备份允许您节省磁盘空间,加快备份和恢复。通过三种不同的增量模式,您可以根据自己的数据流规划备份策略。
2)增量恢复:页面级增量恢复允许您通过重用目标目录中未更改的有效页面来显著加快恢复速度。
3)校验:自动进行数据一致性校验,按需进行备份校验,不进行实际数据恢复。
4)验证:按需使用 checkdb命令对 PostgreSQL实例进行验证。
5)保留:按照保留策略管理 WAL存档和备份。您可以根据恢复时间或要保留的备份数量配置保留策略,还可以指定特定备份的生存时间 (TTL)。
    过期的备份可以合并或删除。
6)并行化:在多个并行线程上运行备份、恢复、合并、删除、验证过程。
7)压缩:将备份数据压缩保存,节省磁盘空间。
8)重复数据删除:不复制 _vm、_fsm 等非数据文件,节省磁盘空间。
9)远程操作:备份位于远程系统上的 PostgreSQL实例或远程恢复备份。
10)从 standby 服务器进行备份:通过从 standby 服务器备份来避免主服务器的额外负载。
11)外部目录:用于备份 PGDATA目录之外的文件和目录,如脚本、配置文件、日志、SQL转储文件等。
12)备份目录:以纯文本或 JSON格式获取备份列表和相应的元信息。
13)归档目录:以纯文本或 JSON格式获取所有 WAL时间线的列表和相应的元信息。
14)部分还原:只还原指定的数据库或不还原指定的数据库。

为了管理备份数据,lt_probackup会创建一个备份目录。这个目录存储所有带有附加元信息的备份文件,以及时间点恢复所需的 WAL归档。
可以将不同实例的备份存储在单个备份目录的不同子目录中。

1)【完全备份】包含从头恢复数据库集群所需的所有数据文件。
2)【增量备份】只存储自上次备份以来更改的数据。它可以减少备份大小,加快备份操作。
    2-1)【PAGE 备份】lt_probackup扫描从上次执行完全备份或增量备份开始的归档中的所有 WAL文件。
            新创建的备份只包含 WAL记录中提到的页面。这要求在 WAL存档中存在自上次备份以来的所有 WAL文件。
    2-2)【DELTA 备份】lt_probackup读取 PGDATA目录中的所有数据文件,只复制自上次备份以来发生更改的页面。
            不需要连续存档即可运行。此外,这种模式可以施加相当于完全备份的只读 I/O压力。
    2-3)【PTRACK 备份】PostgreSQL会实时跟踪页面更改。不需要连续存档即可运行。每当一个关系页被更新时,
            这个页面就会被添加 PTRACK 位图标记。跟踪页面会增加数据库服务器操作上的一些小开销,但可以显著提高增量备份的速度。

lt_probackup 的限制

1)进行备份的服务器和恢复的服务器必须在 block_size和 wal_block_size参数上兼容,且具有相同的主版本号。
2)目前不支持在 Windows上通过 ssh进行远程备份
3)通过 ssh运行远程操作时,远程的和本地的 lt_probackup 版本必须相同。

lt_probackup 命令详解

lt_probackup help

查看指定子 command 的帮助信息

lt_probackup help [COMMAND]

lt_probackup version

查看 lt_probackup 的版本号

lt_probackup version

lt_probackup init

初始化备份目录

lt_probackup init -B backup-path

  -B, --backup-path=backup-path    备份存储目录

lt_probackup add-instance

在指定的备份目录下,新增备份实例

lt_probackup add-instance -B backup-path -D pgdata-path
                 --instance=instance_name
                 [-E external-directory-path]
                 [--remote-proto] [--remote-host]
                 [--remote-port] [--remote-path] [--remote-user]
                 [--ssh-options]

  -B, --backup-path=backup-path    备份存储目录
  -D, --pgdata=pgdata-path         数据库 data 目录
      --instance=instance_name     备份实例的名称
  -E  --external-dirs=external-directories-paths
                                   需要备份的外部存储目录
                                   (example: --external-dirs=/tmp/dir1:/tmp/dir2)

  Remote options:
      --remote-proto=protocol      要使用的远程协议
                                   available options: 'ssh', 'none' (default: ssh)
      --remote-host=destination    远程主机地址或主机名
      --remote-port=port           远程主机端口 (default: 22)
      --remote-path=path           lt_probackup 二进制文件所在路径
                                   (default: current binary path)
      --remote-user=username       ssh 连接用户名 (default: current user)
      --ssh-options=ssh_options    额外的 ssh 选项 (default: none)
                                   (example: --ssh-options='-c cipher_spec -F configfile')

lt_probackup del-instance

删除指定备份目录下的备份实例

lt_probackup del-instance -B backup-path --instance=instance_name

  -B, --backup-path=backup-path    备份存储目录
      --instance=instance_name     备份实例的名称

lt_probackup backup

执行备份

lt_probackup backup -B backup-path -b backup-mode --instance=instance_name
                 [-D pgdata-path] [-C]
                 [--stream [-S slot-name] [--temp-slot]
                 [--backup-pg-log] [-j num-threads] [--progress]
                 [--no-validate] [--skip-block-validation]
                 [-E external-directories-paths]
                 [--no-sync]
                 [--log-level-console=log-level-console]
                 [--log-level-file=log-level-file]
                 [--log-filename=log-filename]
                 [--error-log-filename=error-log-filename]
                 [--log-directory=log-directory]
                 [--log-rotation-size=log-rotation-size]
                 [--log-rotation-age=log-rotation-age]
                 [--delete-expired] [--delete-wal] [--merge-expired]
                 [--retention-redundancy=retention-redundancy]
                 [--retention-window=retention-window]
                 [--wal-depth=wal-depth]
                 [--compress]
                 [--compress-algorithm=compress-algorithm]
                 [--compress-level=compress-level]
                 [--archive-timeout=archive-timeout]
                 [-d dbname] [-h host] [-p port] [-U username]
                 [-w --no-password] [-W --password]
                 [--remote-proto] [--remote-host]
                 [--remote-port] [--remote-path] [--remote-user]
                 [--ssh-options]
                 [--ttl=interval] [--expire-time=timestamp] [--note=text]

  -B, --backup-path=backup-path    备份存储目录
  -b, --backup-mode=backup-mode    备份模式=FULL|PAGE|DELTA|PTRACK
      --instance=instance_name     备份实例名称
  -D, --pgdata=pgdata-path         数据库 data 目录
  -C, --smooth-checkpoint          do smooth checkpoint before backup
      --stream                     stream the transaction log and include it in the backup
  -S, --slot=SLOTNAME              replication slot to use
      --temp-slot                  use temporary replication slot
      --backup-pg-log              备份 log 目录
  -j, --threads=NUM                指定并行线程数
      --progress                   显示备份进度
      --no-validate                备份后禁用验证
      --skip-block-validation      只校验文件的校验和
  -E  --external-dirs=external-directories-paths
                                   备份外部目录
                                   (example: --external-dirs=/tmp/dir1:/tmp/dir2)
      --no-sync                    不同步备份文件到磁盘
      --note=text                  在备份中添加备注
                                   (example: --note='backup before app update to v13.1')

  Logging options:
      --log-level-console=log-level-console
                                   控制台日志记录级别 (default: info)
                                   available options: 'off', 'error', 'warning', 'info', 'log', 'verbose'
      --log-level-file=log-level-file
                                   文件日志记录级别 (default: off)
                                   available options: 'off', 'error', 'warning', 'info', 'log', 'verbose'
      --log-filename=log-filename
                                   日志文件名称 (default: 'lt_probackup.log')
                                   support strftime format (example: lt_probackup-%Y-%m-%d_%H%M%S.log)
      --error-log-filename=error-log-filename
                                   错误日志文件名称 (default: none)
      --log-directory=log-directory
                                   日志目录 (default: BACKUP_PATH/log)
      --log-rotation-size=log-rotation-size
                                   日志文件大小超出阈值,则滚动; 0 disables; (default: 0)
                                   available units: 'kB', 'MB', 'GB', 'TB' (default: kB)
      --log-rotation-age=log-rotation-age
                                   日志文件的年龄超过阈值,则滚动; 0 disables; (default: 0)
                                   available units: 'ms', 's', 'min', 'h', 'd' (default: min)

  Retention options:
      --delete-expired             根据当前时间删除过期备份【备份成功完成后的保留策略】
      --merge-expired              根据当前时间合并过期备份【备份成功完成后的保留策略】
      --delete-wal                 删除 WAL存档中的冗余文件
      --retention-redundancy=retention-redundancy
                                   要保留的完全备份的数量; 0 disables; (default: 0)
      --retention-window=retention-window
                                   备份可恢复天数; 0 disables; (default: 0)
      --wal-depth=wal-depth        每个时间轴上必须的最新有效备份数【保证执行 PITR】 0 disables; (default: 0)
      --dry-run                    试运行

  Pinning options:
      --ttl=interval               指定备份过期时间; 0 unpin
                                   available units: 'ms', 's', 'min', 'h', 'd' (default: s)
                                   (example: --ttl=20d)
      --expire-time=time           指定备份过期的时间戳
                                   (example: --expire-time='2024-01-01 00:00:00+03')

  Compression options:
      --compress                   等同于 --compress-algorithm='zlib' and --compress-level=1
      --compress-algorithm=compress-algorithm
                                   压缩算法: 'zlib', 'pglz', 'none' (default: none)
      --compress-level=compress-level
                                   压缩级别 [0-9] (default: 1)

  Archive options:
      --archive-timeout=timeout    等待 wal 归档的超时时间 (default: 5min)

  Connection options:
  -U, --pguser=USERNAME            连接用户名 (default: lightdb)
  -d, --pgdatabase=DBNAME          连接数据库 (default: postgres)
  -h, --pghost=HOSTNAME            连接主机或 socket 目录 (default: 'local socket')
  -p, --pgport=PORT                数据库服务端口 (default: 5432)
  -w, --no-password                从不提示密码
  -W, --password                   强制提示密码

  Remote options:
      --remote-proto=protocol      要使用的远程协议
                                   available options: 'ssh', 'none' (default: ssh)
      --remote-host=destination    远程主机地址或主机名
      --remote-port=port           远程主机端口 (default: 22)
      --remote-path=path           远程 lt_probackup 二进制文件所在路径
                                   (default: current binary path)
      --remote-user=username       ssh 连接用户名 (default: current user)
      --ssh-options=ssh_options    额外的 ssh 选项 (default: none)
                                   (example: --ssh-options='-c cipher_spec -F configfile')

lt_probackup set-config

配置指定备份目录下的备份实例的信息

lt_probackup set-config -B backup-path --instance=instance_name

lt_probackup set-backup

配置指定备份目录下的备份实例的某一次备份的信息

lt_probackup set-backup -B backup-path --instance=instance_name
                 -i backup-id
                 [--ttl=interval] [--expire-time=time] [--note=text]

      --ttl=interval               指定备份过期时间; 0 unpin
                                   available units: 'ms', 's', 'min', 'h', 'd' (default: s)
                                   (example: --ttl=20d)
      --expire-time=time           指定备份过期的时间戳
                                   (example: --expire-time='2024-01-01 00:00:00+03')
      --note=text                 在备份中添加备注; 'none' to remove note
                                   (example: --note='backup before app update to v13.1')

lt_probackup show-config

查看备份实例的配置信息

lt_probackup show-config -B backup-path --instance=instance_name
                 [--format=format]

  -B, --backup-path=backup-path    备份存储目录
      --instance=instance_name     name of the instance
      --format=format              显示格式=PLAIN|JSON

lt_probackup show

查看备份信息

lt_probackup show -B backup-path
                 [--instance=instance_name [-i backup-id]]
                 [--format=format] [--archive]

  -B, --backup-path=backup-path    备份存储目录
      --instance=instance_name     备份实例名称
  -i, --backup-id=backup-id        show info about specific backups
      --archive                    show WAL archive information
      --format=format              show format=PLAIN|JSON

lt_probackup restore

恢复到指定的备份

lt_probackup restore -B backup-path --instance=instance_name
                 [-D pgdata-path] [-i backup-id] [-j num-threads]
                 [--progress] [--force] [--no-sync]
                 [--no-validate] [--skip-block-validation]
                 [-T OLDDIR=NEWDIR]
                 [--external-mapping=OLDDIR=NEWDIR]
                 [--skip-external-dirs]
                 [-I | --incremental-mode=none|checksum|lsn]
                 [--db-include dbname | --db-exclude dbname]
                 [--recovery-target-time=time|--recovery-target-xid=xid
                  |--recovery-target-lsn=lsn [--recovery-target-inclusive=boolean]]
                 [--recovery-target-timeline=timeline]
                 [--recovery-target=immediate|latest]
                 [--recovery-target-name=target-name]
                 [--recovery-target-action=pause|promote|shutdown]
                 [--restore-command=cmdline]
                 [-R | --restore-as-replica]
                 [--primary-conninfo=primary_conninfo]
                 [-S | --primary-slot-name=slotname]
                 [--remote-proto] [--remote-host]
                 [--remote-port] [--remote-path] [--remote-user]
                 [--ssh-options]
                 [--archive-host=hostname] [--archive-port=port]
                 [--archive-user=username]

  -B, --backup-path=backup-path    备份存储目录
      --instance=instance_name     备份实例名称
  -D, --pgdata=pgdata-path         数据库 data 目录
  -i, --backup-id=backup-id        待恢复的备份 ID
  -j, --threads=NUM                执行任务的并行线程数
      --progress                   显示进度
      --force                      忽略已恢复备份的无效状态
      --no-sync                    不将恢复的文件同步到磁盘
      --no-validate                恢复时禁用备份验证
      --skip-block-validation      只校验文件的校验和
  -T, --tablespace-mapping=OLDDIR=NEWDIR
                                   将表空间从 OLDDIR移到 NEWDIR
      --external-mapping=OLDDIR=NEWDIR
                                   重新定位外部目录 OLDDIR to NEWDIR
      --skip-external-dirs         不恢复所有外部目录

  Incremental restore options:
  -I, --incremental-mode=none|checksum|lsn
                                   重用 PGDATA中的有效页面,如果它们没有改变
                                   (default: none)

  Partial restore options:
      --db-include dbname          仅恢复指定的数据库
      --db-exclude dbname          不恢复指定的数据库

  Recovery options:
      --recovery-target-time=time  恢复到指定的时间戳
      --recovery-target-xid=xid    恢复到指定的事务 ID
      --recovery-target-lsn=lsn    恢复到指定的 LSN
      --recovery-target-inclusive=boolean
                                   是否在完成恢复目标后就停止
      --recovery-target-timeline=timeline
                                   恢复到特定的时间线
      --recovery-target=immediate|latest
                                   在达到一致状态时尽快结束恢复
      --recovery-target-name=target-name
                                   恢复到指定的命名恢复点
      --recovery-target-action=pause|promote|shutdown
                                   达到恢复目标后,服务器应该采取的操作
                                   (default: pause)
      --restore-command=cmdline    command to use as 'restore_command' in recovery.conf; 'none' disables

  Standby options:
  -R, --restore-as-replica         write a minimal recovery.conf in the output directory
                                   to ease setting up a standby server
      --primary-conninfo=primary_conninfo
                                   connection string to be used for establishing connection
                                   with the primary server
  -S, --primary-slot-name=slotname replication slot to be used for WAL streaming from the primary server

  Logging options:
      --log-level-console=log-level-console
                                   控制台日志记录级别 (default: info)
                                   available options: 'off', 'error', 'warning', 'info', 'log', 'verbose'
      --log-level-file=log-level-file
                                   文件日志记录级别 (default: off)
                                   available options: 'off', 'error', 'warning', 'info', 'log', 'verbose'
      --log-filename=log-filename
                                   日志文件名称 (default: 'lt_probackup.log')
                                   support strftime format (example: lt_probackup-%Y-%m-%d_%H%M%S.log)
      --error-log-filename=error-log-filename
                                   错误日志文件名称 (default: none)
      --log-directory=log-directory
                                   日志目录 (default: BACKUP_PATH/log)
      --log-rotation-size=log-rotation-size
                                   日志文件大小超出阈值,则滚动; 0 disables; (default: 0)
                                   available units: 'kB', 'MB', 'GB', 'TB' (default: kB)
      --log-rotation-age=log-rotation-age
                                   日志文件的年龄超过阈值,则滚动; 0 disables; (default: 0)
                                   available units: 'ms', 's', 'min', 'h', 'd' (default: min)

  Remote options:
      --remote-proto=protocol      远程协议
                                   available options: 'ssh', 'none' (default: ssh)
      --remote-host=destination    远程 IP或主机名
      --remote-port=port           远程登录端口 (default: 22)
      --remote-path=path           lt_probackup 二进制文件所在目录
                                   (default: current binary path)
      --remote-user=username       ssh 登录用户 (default: current user)
      --ssh-options=ssh_options    额外的 ssh 选项 (default: none)
                                   (example: --ssh-options='-c cipher_spec -F configfile')

  Remote WAL archive options:
      --archive-host=destination   address or hostname for ssh connection to archive host
      --archive-port=port          port for ssh connection to archive host (default: 22)
      --archive-user=username      ssh 登录用户 to archive host (default: LightDB user)

lt_probackup archive-push

将 WAL文件复制到备份目录的相应子目录中

lt_probackup archive-push -B backup-path --instance=instance_name
                 --wal-file-name=wal-file-name
                 [-j num-threads] [--batch-size=batch_size]
                 [--archive-timeout=timeout]
                 [--no-ready-rename] [--no-sync]
                 [--overwrite] [--compress]
                 [--compress-algorithm=compress-algorithm]
                 [--compress-level=compress-level]
                 [--remote-proto] [--remote-host]
                 [--remote-port] [--remote-path] [--remote-user]
                 [--ssh-options]

  -B, --backup-path=backup-path    备份存储目录
      --instance=instance_name     备份实例名称
      --wal-file-name=wal-file-name
                                   待拷贝的 wal 文件名称
  -j, --threads=NUM                执行任务的并行线程数
      --batch-size=NUM             需要复制的文件总数
      --archive-timeout=timeout    wait timeout before discarding stale temp file(default: 5min)
      --no-ready-rename            do not rename '.ready' files in 'archive_status' directory
      --no-sync                    do not sync WAL file to disk
      --overwrite                  overwrite archived WAL file

  Compression options:
      --compress                   等同于 --compress-algorithm='zlib' and --compress-level=1
      --compress-algorithm=compress-algorithm
                                   压缩算法: 'zlib','pglz','none' (default: 'none')
      --compress-level=compress-level
                                   压缩级别 [0-9] (default: 1)

  Remote options:
      --remote-proto=protocol      远程协议
                                   available options: 'ssh', 'none' (default: ssh)
      --remote-host=hostname       远程 IP或主机名
      --remote-port=port           远程登录端口 (default: 22)
      --remote-path=path           lt_probackup 二进制文件所在目录
                                   (default: current binary path)
      --remote-user=username       ssh 登录用户 (default: current user)
      --ssh-options=ssh_options    额外的 ssh 选项 (default: none)
                                   (example: --ssh-options='-c cipher_spec -F configfile')

lt_probackup archive-get

将 WAL文件从备份目录对应的子目录复制到数据库的预写日志位置。
进行 restore时,lt_probackup 会自动设置该命令作为 restore_command 的一部分,不需要手动设置。

lt_probackup archive-get -B backup-path --instance=instance_name
                 --wal-file-path=wal-file-path
                 --wal-file-name=wal-file-name
                 [-j num-threads] [--batch-size=batch_size]
                 [--no-validate-wal]
                 [--remote-proto] [--remote-host]
                 [--remote-port] [--remote-path] [--remote-user]
                 [--ssh-options]

  -B, --backup-path=backup-path    备份存储目录
      --instance=instance_name     备份实例名称
      --wal-file-path=wal-file-path
                                   服务器上 WAL文件的相对目标名称
      --wal-file-name=wal-file-name
                                   要从归档中检索的 WAL文件的名称
  -j, --threads=NUM                执行任务的并行线程数
      --batch-size=NUM             预先获取的 wal 文件总数
      --prefetch-dir=path          预取 WAL文件的存储目录
      --no-validate-wal            在使用预取的 WAL文件之前跳过验证

  Remote options:
      --remote-proto=protocol      远程协议
                                   available options: 'ssh', 'none' (default: ssh)
      --remote-host=hostname       远程 IP或主机名
      --remote-port=port           远程登录端口 (default: 22)
      --remote-path=path           lt_probackup 二进制文件所在目录
                                   (default: current binary path)
      --remote-user=username       ssh 登录用户 (default: current user)
      --ssh-options=ssh_options    额外的 ssh 选项 (default: none)
                                   (example: --ssh-options='-c cipher_spec -F configfile')

备份前置条件

1)需要为指定的 IP 和用户设置备份权限,vi $PGDATA/pg_hba.conf 新增以下内容:
 
host    replication     lightdb         10.19.69.255/32         trust

2)重新加载配置

$PGHOME/bin/lt_ctl reload

lt_probackup 备份示例

1)初始化备份目录
./lt_probackup init -B /home/lightdb/backup

2)为备份目录添加实例
./lt_probackup add-instance -B /home/lightdb/backup --instance 10.19.69.255-5555

3)为目标数据库创建全量备份
./lt_probackup backup -B /home/lightdb/backup --instance 10.19.69.255-5555 --stream -b FULL -h 10.19.69.255 -p 5555 -U lightdb

4)为目标数据库创建增量备份
./lt_probackup backup -B /home/lightdb/backup --instance 10.19.69.255-5555 --stream -b DELTA -h 10.19.69.255 -p 5555 -U lightdb

4)查看备份列表
查看备份目录下是所有备份实例
./lt_probackup show -B /home/lightdb/backup

查看备份目录下的指定备份实例
./lt_probackup show -B /home/lightdb/backup --instance 10.19.69.255-5555

5)恢复数据库实例到指定的备份
./lt_probackup restore -B /home/lightdb/backup --instance 10.19.69.255-5555 -i RDM21L

lt_probackup 独立备份服务

配置免密互通

# 免密认证,备份服务器和数据库服务器都要执行
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

# 证书同步,备份服务器和数据库服务器都要执行
ssh-copy-id lightdb@192.168.160.149
ssh-copy-id lightdb@192.168.160.152

# 免密验证,备份服务器连接数据库,无需输密码
ssh lightdb@192.168.160.152

备份服务器操作

1)初始化备份目录
./lt_probackup init -B /home/lightdb/backup

2)添加远程数据库实例
./lt_probackup add-instance -B /home/lightdb/backup/ --instance 192.168.160.149 
-D /home/lightdb/dev/lightdb-x/13.3-22.1/data/defaultCluster --remote-host=192.168.160.149 
--remote-user=lightdb --remote-path=/home/lightdb/dev/lightdb-x/13.3-22.1/bin

3)执行远程备份
【lt_probackup 默认使用 lightdb 用户连接 5432 端口的 postgres 数据库】
./lt_probackup backup -b FULL -B /home/lightdb/backup/ --instance 192.168.160.149 
--remote-host=192.168.160.149 --remote-user=lightdb --remote-path=/home/lightdb/dev/lightdb-x/13.3-22.1/bin 
-p 5555

4)执行远程恢复 
./lt_probackup restore -i RDM21L -B /home/lightdb/backup/ --instance 192.168.160.149 
--remote-host=192.168.160.149 --remote-user=lightdb --remote-path=/home/lightdb/dev/lightdb-x/13.3-22.1/bin 
-p 5555
 类似资料: