pg_basebackup命令解析
pg_basebackup命令首先解析输入的参数,再调用BaseBackup()函数进行备份处理。
在BaseBackup()函数内部,会首先传送WAL日志(如果指定了-x选项的话)。随后依次遍历所有的tablespace复制备份整个数据库的文件。根据pg_basebackup命令的-F选项的指定情况(p表示输出普通文件,t表示输出tar格式,其中p选项是默认选项)选择不同的函数进行处理,incident发生的场合调用的是ReceiveAndUnpackTarFile()函数。对于每一个tablespace,该函数调用PQgetCopyData()函数接收数据库命令COPY TO STDOUT输出的tar格式流,在解析tar格式流后将流中的数据写入到目标目录中对应的文件中,从而完成数据库文件的复制。
对于tar流:以512字节为一个块(block),不足部分以0补齐,因此tar流的大小是512的倍数。在解析时,也以512个字节为一个单位进行解析并写入到对应的文件中。传送的tar流式以文件为顺序进行发送,当传送完一个文件之后再开始传送下一个文件的数据。目前tar流只支持文件、目录和符号链接的数据的传送。
作者:非我在
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。
如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!