PostgreSQL如何在启用WAL的备份中间处理检查点?


17

在PostgreSQL v9.0上,我正在使用WAL归档系统。因此,WAL会定期存档(创建3个WAL或WAL早于15分钟时)。

现在,我添加了PG_DATA目录的二进制压缩包(不包括pg_xlog子目录)。为此,我执行一个pg_start_backup(),二进制副本和一个pg_stop_backup()

我想我很了解pg_start_backup和pg_stop_backup在做什么,第一个做一个检查点,最后一个确保最后一个WAL文件被存档。

官方文档中我们可以看到,对于二进制数据副本,我们应该:

使用任何方便的文件系统备份工具(例如tar或cpio(而不是pg_dump或pg_dumpall))执行备份。在执行此操作时,既没有必要也不希望停止数据库的正常运行。

所以我很困惑。这意味着在我们复制时可以执行检查点。我看到了很多文档,说明执行复制时copy命令应该允许更改数据,我很确定,只是找到合适的工具。但是我的问题是postgreSQL将如何使用包含某些不一致文件的pg_data内容来处理恢复(某些来自检查点之前,某些来自之后)?

通过重播事务日志,PostgreSQL可以将所有这些文件置于正确的状态吗?我看到执行备份时创建表和删除操作很危险,不存在诸如真空之类的危险操作命令之吗?pg_backup是否暂停真空操作?我是否应该在二进制复制过程开始的最后复制global / pg_control文件?我是否应该使用启用了快照的文件系统(如xfs-freeze)来加快恢复过程?

我看到备份脚本崩溃不会自动启动pg_stop_backup,所以我的备份状态可能存在很长一段时间(直到我的nagios环某人修复pg_stop_backup()为止)。因此,如果这两个命令在PostgreSQL中有什么不同,我想知道,以了解它可能产生的影响。

请赐教。

Answers:


7

你问:

postgreSQL如何使用pg_data内容处理恢复,其中包含一些不一致的文件。

pg_start_backup()确保数据文件至少与检查点一样新。恢复时,将应用日志。

如果数据旧,日志将对其进行更新。

如果数据是新的,则日志将具有相同的内容。再次编写它没有任何伤害。

数据永远不会比日志新,因为日志是预先写的(WAL)。


你问:

... xfs-freeze...

xfs-freeze与相似pg_start_backup(),不需要快照。您需要一个卷管理器来做到这一点。


你问:

...如果WAL可以重播所有内容,为什么不支持创建表空间和创建数据库语句?

它受到支持,只是一些小问题。参见http://www.postgresql.org/docs/8.1/static/backup-online.html

23.3.5。注意事项

CREATE TABLESPACE命令使用文字绝对路径进行WAL记录,因此将被重播为具有相同绝对路径的表空间创建。如果要在其他计算机上重播日志,则这可能是不希望的。即使在同一台计算机上重播日志,但将日志重播到新的数据目录中,也可能很危险:重播仍将覆盖原始表空间的内容。为了避免这种潜在的麻烦,最佳实践是在创建或删除表空间之后进行新的基本备份。


关于xfs-freeze我知道这也取决于卷管理器,它只是快照过程的一部分。但是我们确定WAL恢复将很好地处理真空后表二进制表上的真空前表日志的重播吗?全局/ pg_control的内容重要吗?如果WAL可以重播所有内容,为什么不支持创建表空间和创建数据库语句?
regilero 2011年

CREATE TABLESPACE作品。查看最新答案。我不确定VACUUM,但我无法想象为什么不会。
J-16 SDiZ 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.