2009-08-03 38 views
7

我有一个脚本,将产生每日轮换备份的MySQL,但我找不到任何类似的postgres。我还发现它具有在线备份功能,因为这是一个生产站点,所以应该派上用场。有谁知道备份postgres数据库的好方法吗?

有谁知道一个程序/脚本,将帮助我,甚至一种方式来做到这一点?

谢谢。

回答

18

一种方法是usepg_dump生成一个平面的sql转储,你可以gzip或其他。这当然是最简单的选择,因为结果可以重新输入到psql以重新加载数据库,并且由于它也可以作为纯文本输出,所以如果需要,可以在恢复之前查看或编辑数据。

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

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

+0

使用原子快照不只是“可能在理论上形成了”备份

pg_restore -v -d newdb_name db_dump_file.dump 

阅读。它工作得很好。但是它们需要在PostgreSQL有数据的* all *文件系统中是原子的,包括pg_xlog目录。 – 2009-08-03 16:36:24

2

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

除非pg_dump是证明是不够的 - 这是你应该使用的。在你将遇到pg_dump无法使用的情况 - 你应该问自己:为什么它不能被使用,以及你能做些什么来再次使用它:

当你使用pg_dump时,你可能会选择普通的SQL文件转储(-F p)或自定义格式(-F c)。 SQL转储更容易修改/更改,但自定义格式功能更强大,并且(从8.4开始)加载速度更快,因为您可以将其加载到许多并行工作人员中,而不是按顺序加载。

3

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

2

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

0

这个脚本是什么,我会做备份我的旧的数据库和恢复

备份您的数据库

pg_dump --format=c olddb_name > db_dump_file.dump 

要恢复更多的pg_dumppg_restore

相关问题