使用python tarfile备份postgresql数据目录。期望/忽略什么错误

时间:2011-06-13 05:42:07

标签: python postgresql backup tar

我正在编写一个python脚本,用于自动备份PostgreSQL数据目录以启用“Continuous Archiving and Point-In-Time Recovery”。

我想使用Pythons tarfile库来创建存档。

复杂的是数据文件可以在备份期间更改。引用PostgreSQL manual

  

某些文件系统备份工具会发出   警告或错误,如果他们的文件   正在试图复制变化   复制收益。当拿一个基地   这是一个活动数据库的备份   情况是正常的,而不是错误。   但是,你需要确保你   可以区分对此的抱怨   从真正的错误中排序

     某些人   GNU tar的版本返回错误   代码与致命的无法区分   如果文件被截断时出错   焦油正在复制它。幸运的是,GNU   tar版本1.16及更高版本退出   1如果文件在更改期间被更改   备份,2表示其他错误。

从数据目录复制文件时,我应该在Python中期待什么例外?我如何确定错误是否至关重要?

2 个答案:

答案 0 :(得分:1)

如果您使用的是tarfile模块,那么实现这一点基本上取决于您。 GNU tar在处理文件之前和之后检查文件大小和ctime,如果它们不同则进行抱怨。这不是一个真正的错误,它只是焦油感觉应该提到的东西。但在你的用例中,你并不关心它,所以你可以忘掉它。 tarfile模块当然不会抱怨这个。

就其他例外而言,可能性是无穷无尽的。在这种情况下,Python抛出的任何东西都可能是致命的。

答案 1 :(得分:-1)

PostgreSQL文档中解释了连续存档。它已实现,无需创建其他脚本 - 但您将拥有许多文件。

<强> 24.3.2。进行基本备份 - 按照说明操作,您可以创建tar,数据文件不会改变。

<强> 24.3.1。设置WAL归档 - 在这里你必须存档新的WAL文件,它们也不会改变,但它们是单独的文件。

我认为将WAL文件添加到基本备份是不安全的。如果在将文件添加到基本备份时服务器崩溃,则可能会损坏。