POSTGRESQL  PG_RMAN  基本操作_python

昨天刷到一段语录觉得不错,说的是

人要弄懂人生的剧本,你不是父母的续集,也不是孩子的前传,更不是亲戚朋友的外传,生命终会失去,不妨给自己多点选择

——————————————————————————————

PG_RMAN 是目前备份POSTGRESQL 的主流的开源数据库产品,需要强调的两点

PG_RMAN 基于本地数据拷贝的方式,而不是流方式的备份,这就要求PG_RMAN是要和数据库安装在一起的. 这点可能很难理解,但我们可以将其认为是POSTGRESQL的开源数据库的一个备份的组建或许就更能接受了.

PG_RMAN 是早期开源支持POSTGRESQL 数据备份,以及增量备份和恢复的项目. 如果你的公司是初期上Postgresql 并且项目初期并未有预算对postgresql 进行备份的情况下, 使用pg_rman是一个好的方法.

我们先说说好处,在去进行相关的操作

1   可靠性以及软件对于备份的规划性, 这个问题要从他对备份的规划来说,他不是一般的备份软件, 举例 XTRABACKUP 仅仅是单一备份的命令,本身的规划和备份的清理等等工作都需要自己来做,而pg_rman 备份软件则不需要这样,他不是一个单一的备份的命令而是一个备份的软件.

2   针对PG_RMAN 的备份方式我们需要的是一个统一的存储规划,而不是那他当一个单独的备份的命令对待

首次通过设定基础信息以及产生备份的目录,这里建议备份的目录和数据的目录要分开

POSTGRESQL  PG_RMAN  基本操作_数据库_02

在这里会产生一些目录和文件

pg_rman.ini 

system_identifier

timeline_history

backup目录以及后续备份日志的目录

POSTGRESQL  PG_RMAN  基本操作_java_03

pg_rman backup -B /pgdata/backup -D /pgdata/data -b full  -h 127.0.0.1 -p 5432 -U backup -d postgres

POSTGRESQL  PG_RMAN  基本操作_java_04

备份后需要对备份的文件进行一个相关的设置,进行验证

POSTGRESQL  PG_RMAN  基本操作_python_05

 pg_rman validate

POSTGRESQL  PG_RMAN  基本操作_mysql_06

展示相关备份的信息

pg_rman show detail

POSTGRESQL  PG_RMAN  基本操作_python_07

pg_rman backup -B /pgdata/backup -D /pgdata/data -b incremental  -h 127.0.0.1 -p 5432 -U backup -d postgres

POSTGRESQL  PG_RMAN  基本操作_mysql_08

进行增量备份和验证

POSTGRESQL  PG_RMAN  基本操作_java_09

pg_rman 在备份时是可以进行相关的增量备份,而增量备份主要是备份当时的archive 和 部分数据库的状态和目录.  另齐总的system identifier 是记录pg_control 里面的系统的 identifier

POSTGRESQL  PG_RMAN  基本操作_python_10

同时可以在 pg_rman.ini 中添加,相关

KEEP_ARCLOG_DAYS = 7

KEEP_DATA_DAYS = 7

KEEP_SRVLOG_DAYS = 7

保留文件的信息,在每次执行pg_rman中会去进行相关的验证和清理的工作

数据的恢复也比较简单,在恢复的数据目录中如果有数据的情况下,是不会进行数据恢复.并且会进行报警.

POSTGRESQL  PG_RMAN  基本操作_linux_11

在恢复完毕后,需要对原有的数据目录的权限进行重新的设置 700 ,否则postgresql 无法启动

POSTGRESQL  PG_RMAN  基本操作_linux_12

如果在恢复数据库的情况下,给出简单的命令,并没有给出恢复的时间线或者恢复后数据库的状态,则数据库在恢复后,会进入需要pg_wal_replay_resume() 的状态,在数据库执行完  pg_wal_replay_resume 后数据库就可以正常工作了, 这里和某些数据库例如 SQL SERVER 在恢复后数据库是进入recovery状态是类似的.

那么可能会有同学提出如果我有三个FULL backup 那么到底他使用哪个备份来恢复,按照恢复的逻辑,PG_RMAN 使用最新的FULL backup进行数据恢复.

清理相关的备份通过手动的方式也很简单,1 delete相关的备份数据 2 purge相关的备份数据, 但是在删除的时候,PG_RMAN 有相关的保护措施,会对数据进行保护.

POSTGRESQL  PG_RMAN  基本操作_python_13

当然在确认的时候可能会无法删除,如果无法删除并且已经确认可以删除,则可以在删除后面添加-f 参数强制删除, 但这里不建议,除非确认可以删除.

POSTGRESQL  PG_RMAN  基本操作_linux_14

在删除后,就可以进行purge 程序的清理了.

POSTGRESQL  PG_RMAN  基本操作_linux_15

清理后,相关的目录也会被删除,不进行purge 则目录不会被删除.

POSTGRESQL  PG_RMAN  基本操作_数据库_16