【问题标题】:PostgreSQL restore and backup solutionPostgreSQL 恢复和备份解决方案
【发布时间】:2010-10-05 16:44:18
【问题描述】:

A) 定期备份大型 PostgreSQL 数据库(在最新的 Ubuntu 服务器上运行 8.3 版)的最佳解决方案是什么;请不要用那些令人痛苦的缓慢插入语句说 pg_dump

B) PostgreSQL 数据库复制在现实世界中的最佳解决方案是什么

【问题讨论】:

  • pg_dump 默认不使用插入语句。默认情况下,它将使用 COPY 命令。 -d 或 --inserts 的命令行开关将导致 pg_dump 将插入语句放入导出中。你的意思是 COPY 太慢了?还是您使用 -d 或 --inserts 命令开关?
  • 我不知道我可以关闭插入语句,COPY 没问题..我的错

标签: postgresql backup restore


【解决方案1】:

您可以将Online WAL-Backup 与每晚/每天/每周/每月 pg_dumps 结合使用。每周/每月一次,您应该复制整个集群。

恢复效果很好,并且在您提前复制时几乎不会丢失数据(rsync 是最好的,因为它非常有效)。

速度很好,因为它只需要应用比你最新的完整集群备份/复制晚的 WAL。

【讨论】:

    【解决方案2】:

    A. pg_dump 默认不使用插入语句。默认情况下,它将使用 COPY 命令。 -d 或 --inserts 的命令行开关将导致 pg_dump 将插入语句放入导出中。如果您的 pg_dump 命令中有这些开关中的任何一个,只需删除它们即可让 pg_dump 使用 COPY。

    B.在即将发布的 Postgres 版本中,他们将拥有开箱即用的 simple replication。我认为 8.4 版本很快就会发布。所以,如果可能的话,这可能值得等待。

    【讨论】:

      【解决方案3】:

      我认为这个问题只有一个答案。

      PITR,即时间点恢复。它基本上是事务日志的归档,据我所知,这是进行备份的最佳方式。

      我已经为 8.1 设置了几次,但在 8.3 中应该是一样的。

      您只需在 postgresql.conf 中添加以下内容:

      archive_command = 'test ! -f /path/to/your/backups/archive_logs/%f && cp -i %p /path/to/your/backups/archive_logs/%f </dev/null'
      

      此命令将存档日志复制到指定目录,您可以使用您选择的备份软件安全地备份它。

      要进行完整备份,您需要先告诉 PostgreSQL 您正在进行备份。 这是通过 psql 命令psql "SELECT pg_start_backup('my_backup');" 完成的 之后,只需使用 rsync、cpio 或其他工具复制数据目录。如果数据库被大量使用,文件将在复制过程中发生变化,因此该工具能够正确处理而不是退出是很重要的。

      复制完成后,只需运行psql "SELECT pg_stop_backup();" 告诉PostgreSQL 再次停止它。这些命令所做的是在备份开始的存档日志中放置一个标记,因此在恢复时,它知道它需要从哪里开始读取。

      这种技术也可以用于复制的热备份,但它不可读,只是准备在紧急情况下接管。 我认为 8.4 版计划完全热备,所以在那之前我认为没有其他选择。

      如果您使用 PITR,有一件很棒的事情是,您可以指定一个时间戳记到您希望附加归档日志的时间。所以它还可以避免数据库发生意外(例如删除或更改某些数据)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多