暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pg_rman实现

酸梅绿茶汤 2021-05-25
2353

    pg_rman作为PostgreSQL物理备份常用的一个开源工具,使用者很多。查阅网上资料发现关于该工具的安装使用配置相关的文档很多,但是针对其备份原理解释的少之甚少,下面我们针对其备份原理简单的研究一下。

    我们通过源码可以看到备份方式是通过do_backup_database函数实现的,通过调用pg_start_backup命令进行备份   

然后通过cpoy目录,再通过执行pg_stop_backup函数结束备份。

    

    那么还有一个问题,pg_rman可不可以对备库进行备份呢?

    测试一下:

    执行报错,看上去是缺少备份主机和端口,那么加上之后呢?

    还是报错,为什么呢?看一下源码

   大意是对备库进行备份,就抛出这个错误。

    那既然pg_rman的原理是执行pg_start_backup函数进行的备份,那么手工执行该函数呢,是否可以,测试一下:

    报错说存在recovery线程不能执行备份,故验证了pg_rman不能对备库进行备份。

    

    题外话,可能有朋友会想到pg_basebackup就可以对备库进行备份,pg_basebackup命令调用的是BaseBackup函数实现的,过程中do_pg_start_backup函数负责处理备份基础数据前的操作。首先判断是否处于恢复状态(即是standby)如果是,判断当前备份是否是排他备份,如果是则错误退出,否则,对wal插入排他锁,判断是否是排他备份来改变当前备份回话状态,释放排它锁,感兴趣的朋友可以深入源码看下。

    初学PG,资历尚浅,如有不对之处,还请批评指正。


文章转载自酸梅绿茶汤,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论