PostgreSQL还原和备份解决方案

tro*_*sta 9 postgresql backup restore

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

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

Jim*_*nke 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'
Run Code Online (Sandbox Code Playgroud)

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

要进行完整备份,您需要先告诉PostgreSQL您正在进行备份.它是通过psql命令psql "SELECT pg_start_backup('my_backup');" 完成的.之后只需用rsync,cpio或其他工具复制数据目录.如果数据库被大量使用,文件将在复制期间发生变化,因此工具可以正确处理并且不会挽救,这一点非常重要.

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

此技术还可用于为复制提供热备份,但它不可读,只是在紧急情况下准备好接管.在我认为版本8.4中计划完全热备用,所以在那之前我认为没有其他选择.

如果您使用PITR,那么一件好事就是您可以指定何时需要追加存档日志的时间戳.因此它还可以保存数据库免于意外(例如删除或更改某些数据)


Ste*_*e K 4

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

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