残留文件管理函数应用
使用步骤
- 调用pgxc_get_residualfiles()函数,获取存在残留文件的数据库名称。
- 分别进入确认有残留文件的数据库,调用pgxc_verify_residualfiles()函数,对当前数据库中记录的残留文件进行验证。
- 调用pgxc_rm_residualfiles()函数,删除所有已经验证过的残留文件。
pgxc类残留文件管理函数只对CN和当前主DN进行操作,不会验证和清理备DN上的残留文件。所以主DN完成清理后,应在备DN上及时执行残留文件清理操作或对备机进行build,防止主备切换后由于增量build导致备机残留文件被重新复制回主DN,导致未成功清理的假象。
使用示例
以当前两个用户自建的数据库db1、db2为例:
- 在CN上获取集群的所有残留文件记录:
1
db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的
当前集群中:
- dn_6001_6002 节点(当前的主节点实例)的db1和db2数据库中都存在残留文件记录。
- 残留文件在residualfile 列展示。
- filepath列为记录残留文件的记录文件,保存在实例数据目录下pg_residualfiles目录中。
- 调用pgxc_verify_residualfiles() 函数对db1库进行验证:
1
db1=# SELECT * FROM pgxc_verify_residualfiles();
因为verify类函数都是database级别,所以当前在db1库中调用verify函数时,只对属于db1的残留文件进行验证。
可以再次调用get函数查看是否验证完成:
1
db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6;
如上图所示,已确认db1数据库中的残留文件都已经验证,db2数据库中的残留文件都未进行验证。
- 调用 pgxc_rm_residualfiles()函数删除残留文件。
1
db1=# SELECT * FROM pgxc_rm_residualfiles();
- 再次调用pgxc_get_residualfiles()函数检查删除后的结果。
结果显示db1数据库中的残留文件已经被删除(isdeleted标记为t),db2中的残留文件都未被删除。
同时可以看到查询出9条结果,与之前查询出的结果相比,缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录,这条记录在步骤3中被删除,当记录文件中的所有残留文件都被删除后,记录文件本身也会被删除,并备份到pg_residualfiles/backup目录中:
- 如果需要删除db2数据库中的文件,需要在db2中调用verify函数后再调用rm函数。