10

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

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

4

3 回答 3

6

我认为只有一个答案。

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,一件很棒的事情是,您可以指定一个时间戳,以便您希望附加存档日志的时间。所以它也可以从事故中拯救数据库(比如删除或更改一些数据)

于 2009-02-05T15:14:58.933 回答
4

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

B. 在即将发布的 Postgres 版本中,他们将进行开箱即用的简单复制。我认为 8.4 版本很快就会发布。因此,如果可能的话,这可能值得等待。

于 2009-02-05T15:09:39.773 回答
2

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

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

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

于 2009-02-05T15:01:15.513 回答