我正在为Google Compute Engine上运行的PostgreSQL实例设置每日备份(使用持久磁盘快照),并且其数据目录位于持久磁盘上。现在使用持久磁盘备份PostgreSQL的安全方式
,根据Persistent Disk Backups博客文章,我应该:
- 停止我的应用程序(PostgreSQL的)
fsfreeze
我的文件系统,以防止进一步的修改和刷新未决的数据写入磁盘- 采取持久磁盘快照
- 解冻我的文件系统
- 启动我的应用程序(PostgreSQL)
这显然带来了一些停机时间(每个步骤在我的测试中花费几秒到几分钟),我想避免或至少减少。
为了确保快照一致(我假设在文件系统级别),必须标记博客文章的步骤,但我对干净的文件系统不感兴趣,我有兴趣能够从这样的快照中恢复PostgreSQL实例中的所有数据。
PostgreSQL uses fsync当提交时,所有PostgreSQL承认已提交的数据已经到达磁盘(fsync goes to the disk)。
为了讨论的目的,我觉得很有道理,比较了永久磁盘快照没有停止PostgreSQL和不使用fsfreeze
与磁盘刚刚经历了意外断电文件系统上的。
在阅读https://wiki.postgresql.org/wiki/Corruption和http://www.postgresql.org/docs/current/static/wal-reliability.html之后,我的理解是,所有承诺数据都应该在意外停电时幸存下来。
我的问题是:
是我与意外断电比较准确的还是我失去了什么?
我可以在不停止PostgreSQL的情况下拍摄快照,并且不使用
fsfreeze
或者我缺少一些副作用?如果上面的答案是我不应该只拍一张快照,那么创建另一个永久磁盘是否会习惯性地定期使用
pg_dumpall(1)
来转储整个数据库,然后快照那个其他永久磁盘?
你能详细说说2)吗?你说没有100%的保证,它会一直工作,但具体会出什么问题?为什么要停止PostgreSQL并使用fsfreeze保证它始终有效? – Michael
假设您正在使用的软件中存在漏洞。或者磁盘上的某些I/O错误未被修复。你只会发现你是否测试了快照。 –
@ A.Scherbaum是的,如果软件的任何部分存在错误,则所有投注都将关闭。是的,我同意测试快照是一个完美的解决方案。然而,我问是否有理由停止PostgreSQL和使用fsfreeze比仅仅拍摄快照更好,**假设没有错误**。我只是想了解该建议背后的理由:)。 – Michael