pgbackrest备份恢复实例

pgbackrest备份恢复实例

安装

meson安装

pgBackRest 从 2.54.2 之后的版本开始,pgBackRest需要使用meson来编译,不支持make编译了
https://github.com/pgbackrest/pgbackrest/releases?page=1

下载编译所需安装包
# meson: https://github.com/mesonbuild/meson/releases/download/1.2.1/meson-1.2.1.tar.gz
# ninja: https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-linux.zip

# 1. 解压 meson
tar -xzf meson-1.2.1.tar.gz

# 2. 进入目录
cd meson-1.2.1

# 3. 查看目录内容
ls -l

# root 全程安装
# 4. 安装 meson
python3 setup.py install --user

# 查看 meson 版本
meson --version

ninja
# 1. 解压 ninja
unzip ninja-linux.zip

# 2. 查看解压出的文件
ls -l ninja

# 3. 给执行权限
chmod +x ninja

# 4. 移动到系统路径
sudo mv ninja /usr/local/bin/

# 5. 验证 ninja
ninja --version

安装pgbackrest

tar -zxvf /soft/pgbackrest-release-2.57.0.tar.gz -C /home/postgres/

# 设置环境变量

export PATH=/home/postgres/app/postgresql/bin:$PATH
export PKG_CONFIG_PATH=/home/postgres/app/postgresql/lib/pkgconfig:$PKG_CONFIG_PATH

# 配置
cd /home/postgres/pgbackrest-release-2.57.0
rm -rf build
mkdir build && cd build
meson setup --prefix=/home/postgres/app/postgresql --buildtype=release ..

# 3. 编译
ninja

# 4. 安装
sudo ninja install

which pgbackrest
pgbackrest version

创建 pgbackrest 相关的目录和配置文件

su - root
# 创建日志目录
mkdir -p -m 770 /var/log/pgbackrest
chown postgres:postgres /var/log/pgbackrest

# 创建配置文件目录
mkdir -p /etc/pgbackrest
mkdir -p /etc/pgbackrest/conf.d

# 创建配置文件
touch /etc/pgbackrest/pgbackrest.conf
chmod 750 -R /etc/pgbackrest/
chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

# 创建备份目录
mkdir -p /backup/pgbackup
chmod 750 /backup/pgbackup
chown postgres:postgres /backup/pgbackup

配置文件

cat > /etc/pgbackrest/pgbackrest.conf << EOF
[global]
repo1-path=/backup/pgbackup
repo1-retention-full=1 #全备保留份数
repo1-retention-diff=6 #增量帮留次数,增量和差异备份共享这个参数
start-fast=y    #跳过初始检查
log-subprocess=y  #记录子进程的日志
link-all=y   #启用硬链接优化
repo1-host-user=sysdba
compress-type=gz  #指定压缩算法
compress-level=6  #压缩等级
archive-timeout=600

[dbbackup]
pg1-path=/pgdata
pg1-port=1622

[global:archive-push]
compress-level=3
EOF

eg:
[global]
repo1-path=/data/pgbackup
repo1-retention-full=2
repo1-cipher-pass=test123
repo1-cipher-type=aes-256-cbc
repo1-retention-diff=3
log-level-file=detail
log-path=/var/log/pgbackrest

[dbbackup]
pg1-path=/data/postgresql/pgdata

配置数据库的 archive_command 命令

vi /pgdata/postgresql.conf
archive_mode = on
max_wal_senders = 10
archive_timeout = 300
archive_command = '/home/postgres/app/postgresql/bin/pgbackrest --stanza=dbbackup archive-push %p'

初始化pgbackrest

pgbackrest --stanza=dbbackup --log-level-console=info stanza-create   # 创建存储空间
pgbackrest --stanza=dbbackup --log-level-console=info check           # 切换归档

全量备份

pgbackrest --stanza=dbbackup --log-level-console=info --start-fast --process-max=2 --archive-copy --type=full backup
--查看备份
pgbackrest info

增量备份 incr

增量备份

pgbackrest --stanza=dbbackup --log-level-console=info --archive-copy --type=incr --process-max=2 backup

差异备份 diff 基于上次 full 全备之上的差异数据
差异增量备份

pgbackrest --stanza=dbbackup --log-level-console=info --archive-copy --type=diff backup

pgBackRest中差分备份和增量备份的区别。

正如大家很容易想象的,增量备份只会复制自上次成功备份以来被修改过的数据库文件(为了简单起见)。 如果你每个周日都有完整备份,然后每隔一天有一次增量备份,那么周三的备份会基于周二的备份。 这也意味着如果周一或周二的备份因任何原因损坏,你可能无法从周三的备份中恢复。
那么,什么是差异备份?这是一个增量备份,但会基于上次成功的完整备份。 所以如果你每个星期天都有完整备份,然后隔天有差额,那么周三的备份会基于周日的备份! 这样其他差分备份坏了也无所谓,但因为你总会比较自周日以来修改过的内容,差分备份的大小会随着时间变大

备份注释

pgbackrest --stanza=dbbackup --log-level-console=info --start-fast --process-max=2 --archive-copy --

type=full backup \
--annotation=comment="LUAN BACKUP" \
--annotation=some-other-key="HAHHA"

备份集检查

pgbackrest --stanza=dbbackup --log-level-console=info verify

verify 命令检查归档文件依赖于归档文件信息(比如归档文件长度、归档文件校验值等),这些信息在启用归档 统计功能后是从归档统计文件中获取到的,而不是默认的通过遍历归档目录获取。

备份监控

除了命令行的查询 pgbackrest info , pgbackrest 还提供了 SQL 查询
在官方下载的源代码包中,有两个相关的SQL文件: 路径在pgbackrest-release-2.44/doc/example

psql -f pgsql-pgbackrest-info.sql
CREATE SCHEMA
CREATE FUNCTION

-- # 确定一段的最后成功备份时间和归档的VAL
psql -f pgsql-pgbackrest-query.sql
name  | last_successful_backup |    last_archived_wal     
--------+------------------------+--------------------------
"pg01" | 2023-08-16 11:56:36+08 | 000000020000000200000002
(1 row)

$pgbackrest info

还原

基于最新备份的还原
pg_ctl stop
rm -rf *

pgbackrest --stanza=dbbackup --delta --log-level-console=detail restore
or
pgbackrest --stanza=dbbackup --delta --log-level-console=detail --pg1-path=/home/postgres/pgdata_01 --process-max=2 restore

相关参数:
--db-include : 要恢复的数据名 --db-include=db_name
--type=immediate: 当数据库变得一致后进行恢复。如果不指定可能恢复时候会报错。
--target-action=promote
          Pause:达到恢复目标时暂停
          Promote:达到恢复目标时升级和切换时间表
          Shutdown:达到恢复目标时关闭服务器

指定备份集还原

不指定时间,工具将隐式地指定时间为备份集结束时间的后一秒
pgbackrest --stanza=dbbackup --delta --log-level-console=detail --set='20200519-031336F' restore
指定时间,工具将验证指定时间是否晚于备份集结束时间;如否,报错退出。
pgbackrest --stanza=dbbackup --delta --log-level-console=detail --set='20200519-031336F' --type=time --target='2020-05-19 16:28:17' restore

指定时间点还原

pgbackrest --stanza=dbbackup --delta --log-level-console=detail ---type=time --target='2020-05-07 16:28:17' restore
使用指定的时间点还原到特定状态 
--delta 选项可选,用于 DATA 目录存在文件时 
--target-exclusive 选项可选,用于表示是否排除等于指定时间的内容。 
--target-action=pause 默认选项,恢复完成后,数据库启动后进入只读状态 
--target-action=promote 恢复完成后,switch timeline,数据库启动后进入读写状态 
--target-action=shutdown 恢复完成后,关闭数据库
posted @ 2026-05-12 17:20  数据库小白(专注)  阅读(42)  评论(0)    收藏  举报