【问题标题】:Postgresql DB backup Ideal practicesPostgresql 数据库备份 理想实践
【发布时间】:2018-06-19 15:18:04
【问题描述】:

• 使用 pg_dump 进行 PostgreSQL 逻辑备份的理想做法是什么?

• 从备用/从节点进行备份是否理想?如果复制延迟小于 200ms

• 从备用/从节点备份是否理想,是否需要更改任何特定配置?

• 哪种方法是进行逻辑备份或物理备份的好方法? DB经常更新的地方。作为备份进行灾难恢复,哪种方法是更快更好的备份和灾难恢复(恢复)。

updated
我们当前的数据库大小为 5GB,复制处于hot standby 模式。
我们在从节点上运行备份脚本,但它每 30 分钟从主节点进行远程备份。
我创建这个问题的原因是要了解备份何时运行一些 COPY 语句需要 6 分钟才能完成,即使它不会影响数据库上的其他事务,如果语句花费更多时间,是否还会出现任何其他问题。

【问题讨论】:

  • 你的 PG 数据库有多大?您的实例的硬件配置是什么?在假定的备份时间内,数据库的更改率有多大?我们从高达约 300GB 的 DB 上的并行 pg_dump 备份到约 4.5TB 的 DB 上的 pg-barman/pg_basebackup 备份。因此,请在您的问题中添加更多信息,以便您获得更有用的答案。
  • pg_dump 并不是真正的“备份工具”。它在特定时间点创建数据的“快照”。如果要备份以进行灾难恢复,则应考虑使用 pgbarman 或 pgbackrest 等备份工具
  • @a_horse_with_no_name 如果我只想进行逻辑备份,因为我只想备份 1 个 DB,我可以通过 pg-barman 之类的工具来实现吗?
  • @JosMac 我已经更新了我的问题添加了更多信息
  • pg-barman 只能备份整个 PostgreSQL 实例

标签: postgresql pg-dump


【解决方案1】:

我想到了你写的东西,这里有一些想法给你:

  1. 如果您需要在某个时间点真正保持一致的备份,那么您必须使用 pg_basebackup 或 pg_barman(内部使用 pg_basebackup) - 解释在下面的 1. 链接中。最新的 pg_basebackup 10 个流 WAL 日志,因此您还可以备份备份期间完成的所有更改。当然,这个备份只需要整个 PG 实例。另一方面,它不锁定任何表。如果您从远程实例执行此操作,那么它只会导致 PG 实例上的 CPU 负载很小,并且磁盘 IO 并不像某些文本所暗示的那么大。有关我的经验,请参阅链接 4。恢复非常简单 - 请参阅链接 5。
  2. 如果您使用 pg_dump,您必须了解您不能保证您的备份与时间点真正一致 - 再次参见链接 1。可以使用数据库快照(参见链接 2 和 3)但是即使有了它,您也不能指望 100% 的一致性。我们只在我们的分析数据库上使用了 pg_dump,它每天只加载 1 次新的(昨天从生产数据库中的分区)。您可以使用并行选项加速它(仅适用于目录备份格式)。但缺点是 PG 实例的负载要高得多 - CPU 使用率更高,磁盘 IO 更高。即使您远程运行 pg_dump - 在这种情况下,您只保存磁盘 IO 来保存备份文件。另外 pg_dump 需要在表上放置读锁,以便它可以与新插入或复制(当在副本上进行时)发生冲突。但是,当您的数据库达到数百 GB 时,即使是并行转储也可能需要数小时,此时您无论如何都需要切换到 pg_basebackup。
  3. pg_barman 是 pg_basebackup 的“舒适版”+ 它可以让您防止数据丢失,即使您的 PG 实例崩溃非常严重。让它工作需要更多的改变,但这绝对是值得的。您必须设置 WAL 日志归档(参见链接 6),如果您的 PG

您的数据库有 5GB 大,因此任何备份方法都会很快。但是您必须决定是否需要时间点恢复和几乎零数据丢失 - 所以您是否会花时间设置 pg-barman。

链接:

  1. PostgreSQL, Backups and everything you need to know
  2. Review for Paper: 14-Serializable Snapshot Isolation in PostgreSQL - 关于快照
  3. Parallel dumping of databases - 示例如何使用快照
  4. pg_basebackup experiencies
  5. pg_basebackup - restore tar backup
  6. Archiving WAL logs using script

【讨论】:

  • 感谢您的回答,我想澄清的一点是,在您的第二点中,您说 pg_dump needs to place read lock on tables so it can collied either with new insertspg_dump 是在进行备份时创建事务锁定吗?如果我们有一个需要 10 分钟进行备份的表(COPY 语句),该表是否会被其他事务阻塞,这会影响应用程序吗如果应用程序同时从该表写入/读取?>
  • 我对其进行了测试,pg_dump 启动了 COPY cmd,它将 AccessShareLock 放置在整个表上以防止结构更改、表删除等。测试显示了文档所说的 - postgresql.org/docs/current/static/explicit-locking.html - 它没有干扰更新、删除、插入通常的数据库实例。不同的问题是副本上的复制 - 当 COPY 花费太长时间时,您会看到“与恢复冲突”错误 - stackoverflow.com/questions/14592436/… 但 PIT 的一致性问题仍然存在
猜你喜欢
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2019-07-17
  • 2015-06-29
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多