【发布时间】:2010-11-16 07:35:46
【问题描述】:
我有一个脚本可以为 mysql 生成每日轮换备份,但我找不到任何与 postgres 类似的东西。我还发现它具有在线备份功能,因为这是一个生产站点,所以应该派上用场。
有没有人知道可以帮助我的程序/脚本,甚至是一种方法?
谢谢。
【问题讨论】:
标签: linux postgresql backup
我有一个脚本可以为 mysql 生成每日轮换备份,但我找不到任何与 postgres 类似的东西。我还发现它具有在线备份功能,因为这是一个生产站点,所以应该派上用场。
有没有人知道可以帮助我的程序/脚本,甚至是一种方法?
谢谢。
【问题讨论】:
标签: linux postgresql backup
一种方法是usepg_dump 生成一个平面 sql 转储,您可以使用 gzip 或其他方式。这当然是最简单的选择,因为结果可以通过管道传回psql 以重新加载数据库,并且由于它还可以导出为纯文本,因此您可以在必要时查看或在还原之前编辑数据。
下一个方法是暂时关闭你的数据库(或者如果你的文件系统支持原子快照,理论上这可能有效)和backup你的 PostgreSQL data 目录。
PostgreSQL 站点的This 页面还解释了如何进行在线备份和时间点恢复,这绝对是最难配置的,也是最优的方法。这个想法是您通过运行一些特殊的 SQL(pg_start_backup 和 pg_stop_backup)执行基本备份(您可能每天、几天或每周都进行)并制作数据库目录的(文件系统级)副本.在此期间数据库不会脱机,一切仍然正常。从那时起,数据库生成任何更改的预写日志 (WAL),然后可以将其推送(由数据库自动)到您想要的任何位置。要恢复,您需要获取基本备份,将其加载到另一个数据库实例中,然后重播所有 WAL 文件。这样,您还可以通过不重播所有日志来进行时间点恢复。
【讨论】:
这里是您可以通过 crontab 用于备份 postgresql 的脚本
http://ithelpblog.com/os/linux/debian/best-way-to-backup-postgresql-database/
问候, 凯文
【讨论】:
对于 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 服务器。
【讨论】:
由于您指定了 databaseS,pg_dumpall 对您将更加有用。它将所有数据库和用户转储到一个 sql 文件,而不仅仅是一个。
【讨论】:
通常进行备份的方法是使用 pg_dump。
您不应该“从 postgresql 目录复制文件,就像在 mysql 中一样” - 因为您可能无法使用它们(这些文件取决于架构、操作系统和编译选项)。
除非 pg_dump 被证明不足 - 这是你应该使用的。在您遇到无法使用 pg_dump 的情况之后 - 您应该问自己:为什么不能使用它,以及您可以做些什么来再次使用它:)
使用 pg_dump 时,您可以选择纯 SQL 文件转储 (-F p) 或自定义格式 (-F c)。 SQL 转储更容易修改/更改,但自定义格式更强大,并且(从 8.4 开始)加载速度更快,因为您可以在许多并行工作程序中加载它而不是按顺序加载。
【讨论】:
您还可以使用phpPgAdmin 或pgAdmin III 转储您的PostgreSQL 数据库。
【讨论】:
【讨论】:
这就是我备份旧数据库并恢复的方法
备份数据库
pg_dump --format=c olddb_name > db_dump_file.dump
恢复该备份
pg_restore -v -d newdb_name db_dump_file.dump
阅读更多关于pg_dump 和pg_restore
【讨论】: