我正在编写一个python脚本,用于自动备份PostgreSQL数据目录以启用“Continuous Archiving and Point-In-Time Recovery”。
我想使用Pythons tarfile库来创建存档。
复杂的是数据文件可以在备份期间更改。引用PostgreSQL manual:
某些文件系统备份工具会发出 警告或错误,如果他们的文件 正在试图复制变化 复制收益。当拿一个基地 这是一个活动数据库的备份 情况是正常的,而不是错误。 但是,你需要确保你 可以区分对此的抱怨 从真正的错误中排序。
某些人 GNU tar的版本返回错误 代码与致命的无法区分 如果文件被截断时出错 焦油正在复制它。幸运的是,GNU tar版本1.16及更高版本退出 1如果文件在更改期间被更改 备份,2表示其他错误。
从数据目录复制文件时,我应该在Python中期待什么例外?我如何确定错误是否至关重要?
答案 0 :(得分:1)
如果您使用的是tarfile
模块,那么实现这一点基本上取决于您。 GNU tar在处理文件之前和之后检查文件大小和ctime,如果它们不同则进行抱怨。这不是一个真正的错误,它只是焦油感觉应该提到的东西。但在你的用例中,你并不关心它,所以你可以忘掉它。 tarfile
模块当然不会抱怨这个。
就其他例外而言,可能性是无穷无尽的。在这种情况下,Python抛出的任何东西都可能是致命的。
答案 1 :(得分:-1)
PostgreSQL文档中解释了连续存档。它已实现,无需创建其他脚本 - 但您将拥有许多文件。
<强> 24.3.2。进行基本备份 - 按照说明操作,您可以创建tar,数据文件不会改变。
<强> 24.3.1。设置WAL归档 - 在这里你必须存档新的WAL文件,它们也不会改变,但它们是单独的文件。
我认为将WAL文件添加到基本备份是不安全的。如果在将文件添加到基本备份时服务器崩溃,则可能会损坏。