目录

2.2 PostgreSQL物理备份与恢复

2.2.1  基于pg_basebackup实现

1.pg_basebackup介绍

pg_basebackup 是一款针对 PostgreSQL 的备份工具,它可以针对正在运行的PostgreSQL数据库进行备份,不阻塞数据库的读写操作。该工具只能用作全实例备份,不能单独备份某个数据库。

PostgreSQL 实例需要打开wal log归档以及设置相关参数才能开启pg_basebackup备份 。图2-1为pg_basebackup的架构图,备份原理如下:

1)创建检查点,打开FPW (full-page-write) ,创建备份标签(存储检查点位置,时间等信息)。

2)通过流复制协议与数据库建立连接,主库的WAL Sender进程向pg_basebackup发送数据库物理文件 。

3)pg_basebackup接收到文件后写入目标位置(压缩或不压缩)。

2.pg_basebackup全量备份

PostgreSQL通过以下命令实现pg_basebackup的全量备份,命令如下。

pg_basebackup -Fp -Pv -Xf -p 5432 -U postgres -D /postgresql/backup/

3.pg_basebackup备份恢复

pg_basebackup恢复的类型基本分为两种全量恢复和按照时间点/LSN 来恢复。

2.2.2  基于pg_rman实现

1.pg_rman介绍

pg_rman是一款开源的备份恢复软件,支持在线和基于PITR的备份恢复方式。pg_rman类似于Oracle的rman,可以进行全量、增量、归档日志的备份。

pg_rman是PostgreSQL 在线备份恢复的工具。其支持在线和基于时间点备份方式,还可以通过创建backup catalog来维护DB cluster备份信息。

2.pg_rman 安装

安装的时候需要根据PostgreSQL  Server的版本,下载安装不同的版本,需要提前使用编译安装的方式来安装PostgreSQL Server,同时需要开启PostgreSQL  的归档。

1下载地址:https://github.com/ossc-db/pg_rman/releases/
2这里以pg_rman 1.3.16版本为范例,安装的方式如下:
3cp pg_rman-1.3.16-pg15.tar.gz /home/postgres
4chown postgres:postgres -R /home/postgres/pg_rman-1.3.16-pg15.tar.gz
5chmod +x /home/postgres/pg_rman-1.3.16-pg15.tar.gz
6su - postgres
7tar -zxvf pg_rman-1.3.16-pg15.tar.gz
8cd pg_rman-1.3.16-pg15/
9make && make install


3.pg_rman 初始化

初始化,实际上就是需要一个目录,这个目录将用于存放备份的文件 ,首先需要初始化一个backup catalog,实际上就是需要一个目录,这个目录将用于存放备份的文件。 同时这个目录也会存放一些元数据,例如备份的配置文件,数据库的systemid,时间线文件历史等等。 初始化命令需要两个参数,分别为备份目标目录,以及数据库的$PGDATA。

初始化命令:pg_rman init -B /home/postgres/backup

pg_rman只从postgresql.conf取log_directory和archive_command参数的值。 如果你的PostgreSQL的配置文件是include的或者配置在postgresql.auto.conf中,这两个值将不准确。 所以建议你仅仅把参数配置在postgresql.conf中,而不要使用其他配置文件。

4.pg_rman 全备

全备命令:pg_rman backup --backup-mode=full -B /home/postgres/backup

备份查看:pg_rman show -B /home/postgres/backup

备份校验:pg_rman validate -B /home/postgres/backup