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