从之前的介绍我们了解到,pg_rman是物理备份,所以恢复也是物理恢复,需要从物理的数据库文件恢复,提供recovery.conf配置,可以指定恢复的时间点,或者是xlog文件的位置。
恢复实例:
异机恢复
A节点: 10.1.1.8 备份源节点
B节点: 10.1.1.9 需要恢复的新机器
A机器操作:
pg_rman show detail -B /pgbackup/ 可以看到备份相关信息
这里复制备份目录到新节点
scp -r /pgbackup/ root@10.1.1.9:/
B节点安装数据库软件,注意插件也要安装 (过程略)
pg_rman show detail -B /pgbackup/
B节点直接恢复
pg_rman restore -B /pgbackup/ -D /opt/pgdata/pg_root/
B节点启动数据库
postgres@melot-pgbouncer-pg-> pg_ctl start
waiting for server to start....2021-04-12 15:08:13.955 CST [22813] LOG: starting PostgreSQL 12.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2021-04-12 15:08:13.955 CST [22813] LOG: listening on IPv4 address "0.0.0.0", port 1921
2021-04-12 15:08:13.955 CST [22813] LOG: listening on IPv6 address "::", port 1921
2021-04-12 15:08:13.958 CST [22813] LOG: listening on Unix socket "/tmp/.s.PGSQL.1921"
2021-04-12 15:08:14.006 CST [22813] LOG: redirecting log output to logging collector process
2021-04-12 15:08:14.006 CST [22813] HINT: Future log output will appear in directory "log".
done
server started
启动数据库
postgres@melot-pgbouncer-pg-> psql
psql (12.6)
Type "help" for help.
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)
备份删除:
如有一下备份:
执行删除命令:
pg_rman delete '2021-03-18 20:27:12' -B /pgbackup/
删除后,目录还在,如下20210318目录下面,还有三个子目录,但是数据基本都被清理完毕,剩余一些残留的数据,需要另外执行purge完全清除。
清理残余数据
注意事项:
-
注意覆盖原有目录
-
如果在本机恢复,建议将原有的目录重命名,最好在其他机器恢复,
-
软链接的处理,会恢复到目标,并且重新建立软链接,所以目录结构必须与备份时保持一致。
-
虽然用户可以指定$PGDATA,恢复到新的目标目录,但是arch_log, 表空间, pg_wal目录无法指定新的位置,所以原地还原时,必须注意这些目录可能被覆盖,先重命名是比较好的手段。
-
主要保持块大小一致,pg_config可以查看