A)定期备份大型PostgreSQL数据库(在最新的Ubuntu服务器上运行的8.3版本)的最佳解决方案是什么;请不要在那些缓慢得令人痛苦的insert语句中使用pg_dump
B)适用于现实世界的PostgreSQL数据库复制的最佳解决方案是什么
发布于 2009-02-05 15:09:40
默认情况下,pg_dump不使用insert语句。默认情况下,它将使用复制命令。-d或--inserts的命令行开关将导致pg_dump将insert语句放入导出中。如果您的pg_dump命令中有这两个开关中的任何一个,只需删除它们就可以让pg_dump使用COPY。
在即将到来的Postgres版本中,他们将会有开箱即用的simple replication。我认为8.4版本很快就会发布。因此,如果可能的话,这可能是值得等待的。
发布于 2009-02-05 15:14:59
我认为这个问题只有一个答案。
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-05 15:01:16
您可以结合使用nightly/daily/weekly/monthly pg_dumps来使用Online WAL-Backup。每周/每月一次,你应该复制整个集群。
恢复工作非常好,当你提前复制时,几乎不会丢失数据(rsync是最好的,因为它非常有效)。
速度很快,因为它只需要应用比您最新的完整群集备份/复制更晚的WAL。
https://stackoverflow.com/questions/516206
复制相似问题