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

266 阅读4分钟
作者:IT邦德,Oracle、PostgreSQL ACE
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等
•••

@TOC

前言

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

1.pgbackrest介绍

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

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

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为开源备份工具,生产环境使用非常方便