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/postgres4chown postgres:postgres -R /home/postgres/pg_rman-1.3.16-pg15.tar.gz5chmod +x /home/postgres/pg_rman-1.3.16-pg15.tar.gz6su - postgres7tar -zxvf pg_rman-1.3.16-pg15.tar.gz8cd 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