首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL恢复和备份解决方案

PostgreSQL恢复和备份解决方案
EN

Stack Overflow用户
提问于 2009-02-05 14:50:03
回答 3查看 7.2K关注 0票数 10

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-05 15:09:40

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

在即将到来的Postgres版本中,他们将会有开箱即用的simple replication。我认为8.4版本很快就会发布。因此,如果可能的话,这可能是值得等待的。

票数 4
EN

Stack Overflow用户

发布于 2009-02-05 15:14:59

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

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

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

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

代码语言:javascript
复制
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,有一件事很棒,那就是您可以指定一个时间戳,以便在您想要附加存档日志时使用。因此,它还可以防止数据库发生意外(如删除或更改某些数据)。

票数 6
EN

Stack Overflow用户

发布于 2009-02-05 15:01:16

您可以结合使用nightly/daily/weekly/monthly pg_dumps来使用Online WAL-Backup。每周/每月一次,你应该复制整个集群。

恢复工作非常好,当你提前复制时,几乎不会丢失数据(rsync是最好的,因为它非常有效)。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/516206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档