在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中有什么不同,我想知道,以了解它可能产生的影响。
请赐教。