有谁知道备份postgres数据库的好方法?

时间:2009-08-03 08:49:40

标签: linux postgresql backup

我有一个脚本会为mysql生成每日旋转备份,但我找不到类似postgres的任何内容。我还发现它具有在线备份功能,因为这是一个生产站点,所以它应该派上用场。

有没有人知道有助于我的程序/脚本,甚至是一种方法吗?

感谢。

8 个答案:

答案 0 :(得分:18)

一种方法是use pg_dump生成一个平面sql转储,你可以gzip或其他什么。这当然是最简单的选择,因为可以将结果传回psql以重新加载数据库,并且由于它也可以作为纯文本导出,因此您可以在恢复之前查看或编辑数据。必要的。

下一个方法是暂时关闭数据库(或者如果你的文件系统支持理论上可能有效的原子快照)和backup你的PostgreSQL data目录。

来自PostgreSQL站点的

This页面还解释了如何进行在线备份和时间点恢复,这绝对是最难配置的,但也是最佳方法。这个想法是你通过运行一些特殊的SQL(pg_start_backuppg_stop_backup)来执行一个基本备份(你可能每天,几天或一周),并制作一个(文件系统级)副本你的数据库目录。在此期间数据库不会脱机,一切仍然正常。从那时起,数据库会生成任何更改的预写日志(WAL),然后可以将其(由数据库自动)推送到您想要的任何位置。要恢复,您需要进行基本备份,将其加载到另一个数据库实例中,然后重放所有WAL文件。这样,您也可以通过不重播所有日志来进行时间点恢复。

答案 1 :(得分:4)

这里可以使用crontab备份postgresql的脚本

http://ithelpblog.com/os/linux/debian/best-way-to-backup-postgresql-database/

此致 凯文

答案 2 :(得分:3)

对于MySQL Postrgres的自动备份,请查看astrails-safe on github(或仅“gem install astrails-safe --source=http://gems.github.com”)。 它使用mysqldump备份MySQL,使用pg_dump备份Postgres。它还知道如何使用tar备份普通文件并使用GnuPG加密所有内容并上传到S3或任何带有SFTP的Unix服务器。

答案 3 :(得分:2)

通常 备份的方法是使用pg_dump。

你不应该“从postgresql目录中复制文件,就像在mysql中一样” - 因为你很可能无法使用它们(这些文件依赖于体系结构,操作系统和编译选项)。

除非pg_dump 证明不足 - 这是您应该使用的。在您遇到无法使用pg_dump的情况之后 - 您应该问自己:为什么不能使用它,以及如何再次使用它?)

使用pg_dump时,您可以选择纯SQL文件转储(-F p)或自定义格式(-F c)。 SQL转储更容易修改/更改,但自定义格式更强大,并且(自8.4起)加载速度更快,因为您可以将它加载到许多并行工作程序中而不是按顺序加载。

答案 4 :(得分:2)

由于您指定了databaseS,因此pg_dumpall对您更有用。它将所有数据库和用户转储到sql文件而不是单个文件。

答案 5 :(得分:1)

您也可以使用phpPgAdminpgAdmin III转储PostgreSQL数据库。

答案 6 :(得分:1)

我偶然发现了这个小巧的实用工具:

http://code.google.com/p/pg-rman/

从文档中看起来很有希望,但我还是要尝试一下。

答案 7 :(得分:0)

这是我要备份旧数据库并恢复

的方法

备份数据库

pg_dump --format=c olddb_name > db_dump_file.dump

恢复该备份

pg_restore -v -d newdb_name db_dump_file.dump

详情阅读pg_dumppg_restore