【问题标题】:Disabling WAL archiving during pg_restore?在 pg_restore 期间禁用 WAL 归档?
【发布时间】:2014-06-03 04:30:29
【问题描述】:

假设我在进行大规模破坏性迁移之前通过pg_dump 快速备份了我的 Postgres 9.3 数据库,但我发现我想撤消它。在此期间,没有对 DB 执行任何写入操作。

假设我运行pg_restore -c -d mydb < foo.dump 将转储加载回数据库。假设我将 WAL-E 设置为每 16mb 的 WAL 存档一次,我是否需要在执行恢复之前关闭 archive_mode?当我将转储写回数据库时,归档 xlog 对我来说不是很有用,因为在转储之前我已经有完全有效的基本备份和 WAL 段归档。在我恢复转储时执行 xlog 传送也会产生严重后果,随着转储的大小,情况会变得更糟。

您最终会在还原之前禁用存档吗?你有没有做其他事情来加快速度? post 中讨论了恢复性能,但它根本不包括存档,除非我错过了什么。

【问题讨论】:

    标签: postgresql database-restore postgresql-9.3 archiving wal


    【解决方案1】:

    你不能像那样打开和关闭 WAL 归档。 WAL 重放需要连续性。

    如果您关闭了 WAL 归档,然后进行了更改,然后重新打开它,关闭并再次打开后生成的新 WAL 将毫无用处。它们无法应用于数据库,您必须先进行新的基础备份,然后才能恢复 WAL 重播/PITR。

    如果您在恢复期间关闭 xlog 传送,您需要清除旧的基础备份和 WAL 存档,然后在恢复 WAL 传送之前创建新的基础备份。

    【讨论】:

    • 是的,我应该澄清一下,我必须在之后立即进行新的基本备份,并失去与前一段历史的连续性。但我的问题仍然存在:在这种情况下,阅读恢复的最佳做法是什么?
    • 如果集群中只有一个您关心的数据库,您可以通过停止 Pg、设置 fsync=off、启动 Pg、执行还原、停止 Pg、设置 fsync=on 和启动 Pg 备份。但是,如果 Pg 与 fsync=off 一起崩溃,您可能会严重或完全丢失数据。您也可以关闭归档并在此期间设置wal_level = minimal。 dba.stackexchange.com 上存在关于加快 Pg 恢复速度的问题...
    • 如果我实际上是通过 pg_restore 从转储中恢复,真的有什么方法会导致严重的数据丢失吗?我的磁盘上还有转储,对吧?我可以再试一次,不是吗?
    • 如果这是您安装的 PostgreSQL 中唯一的数据库,当然可以。但是,如果您在同一安装中有其他数据库具有其他有价值的数据,这可能是一个问题,因为预写日志、事务日志等在所有数据库中都是全局的。
    • @KennyEvitt 正确。没有办法将它们分开。这是我倾向于建议人们坚持每个实例使用一个 PostgreSQL 数据库以进行可扩展部署的众多原因之一。这是一个很大的麻烦。如果 WAL 被拆分,我们会遇到刷新排序、事务提交日志等与数据日志的持久性等问题。但实际上它仍然需要完成......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多