IT 邦德

rm -f删库?先别跑,pgbackrest备份还有救!

Image
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理

微信:jem_db
QQ交流群:587159446
公众号:IT邦德

@

  • 1.pgbackrest介绍

  • 2.源码安装

    • 2.1 依赖安装

    • 2.2 编译安装

    • 2.3 创建目录

  • 3.设置环境变量

  • 4.确认安装

  • 5.参数配置

    • 5.1 配置pgbackrest参数

    • 5.2 配置postgres参数

  • 6.初始化备份

  • 7.备份校验

  • 8.备份与还原

    • 8.1 全量备份

    • 8.2 增量备份

    • 8.3 全量还原

  • 9.总结

前言

❝

本文详细阐述了pgbackrest备份的详细过程以及注意要点

❞

1.pgbackrest介绍

pgBackRest是PostgreSQL的可靠备份和恢复解决方案,
可以无缝扩展到最大的数据库和工作负载,
用于完整备份。它非常适合大小为TB级的postgres数据库。

与pg_basebackup和pg_rman相比,具有以下优势:
1、提供增量备份,增量备份一定程度上可以节省磁盘空间的使用并减少备份耗时
2、可以通过全量备份+增量备份进行增量恢复
3、无需通过实际的数据恢复操作即可验证备份文件是否有效
4、提供备份压缩以节省磁盘空间
5、可以对远程实例进行备份【远程备份要实现SSH互信】
6、可以从STANDBY实例进行备份
7、可以查看已备份数据备份以及归档的列表以及相关详细信息
8、支持部分还原(还原部分数据库)
9、支持对备份集的管理
10、并行恢复

Image

2.源码安装

2.1 依赖安装

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo \
http://mirrors.aliyun.com/repo/Centos-7.repo

yum install make gcc postgresql12-devel openssl-devel \
libxml2-devel lz4-devel libzstd-devel bzip2-devel \
libyaml-devel libssh2-devel

2.2 编译安装

1.解压安装包到/opt下
wget -q -O - \
https://github.com/pgbackrest/pgbackrest/archive/release/2.52.tar.gz | \
tar zx -C /opt

2.配置和编译pgBackRest
cd /opt/pgbackrest-release-2.52/src && ./configure && make

3.将创建一个名为pg primary的新主机,以包含演示集群并运行pgBackRest示例
--安装依赖
yum install postgresql-libs libssh2

--从生成主机复制pgBackRest二进制文件
scp /opt/pgbackrest-release-2.52/src/pgbackrest /usr/bin
chmod 755 /usr/bin/pgbackrest

2.进入到pgbackrest目录

4.安装pgbackrest
make -j4 && make install -j4

2.3 创建目录

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 640 /etc/pgbackrest/pgbackrest.conf
chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

3.设置环境变量

vi /etc/profile.d/pgbackrest.sh

export PGBACKREST_HOME=/usr/bin/pgbackrest
export PATH=$PGBACKREST_HOME/bin:$PATH

--环境变量生效
source /etc/profile.d/pgbackrest.sh

4.确认安装

[root@centos79 ~]# sudo -u postgres pgbackrest
pgBackRest 2.52 - General help

Usage:
    pgbackrest [options] [command]

Commands:
    annotate        Add or modify backup annotation.
    archive-get     Get a WAL segment from the archive.
    archive-push    Push a WAL segment to the archive.
    backup          Backup a database cluster.
    check           Check the configuration.
    expire          Expire backups that exceed retention.
    help            Get help.
    info            Retrieve information about backups.
    repo-get        Get a file from a repository.
    repo-ls         List files in a repository.
    restore         Restore a database cluster.
    server          pgBackRest server.
    server-ping     Ping pgBackRest server.
    stanza-create   Create the required stanza data.
    stanza-delete   Delete a stanza.
    stanza-upgrade  Upgrade a stanza.
    start           Allow pgBackRest processes to run.
    stop            Stop pgBackRest processes from running.
    verify          Verify contents of the repository.
    version         Get version.

Use 'pgbackrest help [command]' for more information.

5.参数配置

5.1 配置pgbackrest参数

--创建repository
mkdir -p /var/lib/pgbackrest
chmod 750 /var/lib/pgbackrest
chown postgres:postgres /var/lib/pgbackrest

--创建Encryption
[root@centos79 ~]# openssl rand -base64 48
vA6DTEeRNhgB80CkQY23m1hFhvWc7uyBMndxppklVkzLGXyD/eKObDsDkoXzaClV

vi /etc/pgbackrest/pgbackrest.conf

[global]
log-level-file=detail
log-path=/var/log/pgbackrest/
repol-path=/var/lib/pgbackrest
repo1-retention-full=2
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=vA6DTEeRNhgB80CkQY23m1hFhvWc7uyBMndxppklVkzLGXyD/eKObDsDkoXzaClV
[demo]
pg1-path=/pgccc/pgdata
pg1-host-config-path=/etc/pgbackrest
pg1-host=192.168.3.10
pg1-port=5432
pg1-user=postgres
pg1-host-user=postgres
[global:archive_push]
compress-level=3

密码文件登记
vi ~/.pgpass
localhost:5555:postgres:postgres:123456
localhost:*:*:postgres:123456
127.0.0.1:*:*:postgres:123456

chmod 0600 ~/.pgpass

5.2 配置postgres参数

vi postgresql.auto.conf

archive_command = 'pgbackrest --stanza=demo archive-push %p'
archive_mode = on
log_filename = 'postgresql.log'
max_wal_senders = 3
wal_level = replica

6.初始化备份

1.记得重启让以上修改的参数生效,确保PG数据库启动并连接
sudo -u postgres pgbackrest --stanza=demo \
--log-level-console=info stanza-create

7.备份校验

sudo -u postgres pgbackrest --stanza=demo \
--log-level-console=info check

8.备份与还原

8.1 全量备份

pgbackrest --stanza=demo --log-level-console=info --type=full \
--start-fast backup --process-max=16 >demo_full_` date +%F_%T `.log &

log-level-console - 日志部分定义了与日志记录相关的设置
off - 完全不记录(不推荐)
error - 仅记录错误
warn - 记录警告和错误
info - 记录信息、警告和错误
detail - 记录详细信息、信息、警告和错误
debug - 记录调试、详细信息、信息、警告和错误
trace - 记录跟踪(非常详细的调试)、调试、信息、警告和错误
process-max - 每个进程都会执行压缩和传输以使命令运行得更快,配置CPU核心数的一般。
type - 全备份full、增量备份incr、差异备份diff
compress - compress-level=0 关闭压缩备份,默认开启。
start-fast - 强制在快速备份的时候使用检查点。否则,备份将在下一个常规检查点之后启动。

8.2 增量备份

pgbackrest --stanza=demo --log-level-console=info --type=incr  \
backup --process-max=16 >demo_incr_` date +%F_%T `.log &

8.3 全量还原

需要先进行数据库停机
[postgres@pgpcp ~]$pg_ctl stop

删除数据库数据目录所有文件
[postgres@pgpcp ~]$rm -rf /pgccc/pgdatata

pgbackrest --stanza=demo \
--log-level-console=info restore \
--pg1-path=/pgccc/pgdata \
--process-max=16 > demo_restore_` date +%F_%T `.log &

9.总结

❝

pgbackrest为开源备份工具,生产环境使用非常方便

❞