use*_*297 11 postgresql backup
我一直在想办法完全备份我的 PostgreSQL 数据库。我还没有看到任何解释如何进行完整备份的资源。
我知道 pg_dump 和 pg_dumpall 实用程序。语法很简单,但细节不是很清楚。
看来 pg_dump 只支持特定数据库的“一些”表,而不支持任何类型的配置信息。我猜测诸如权限之类的东西和许多其他东西都没有备份。因此,在完全重新安装 PostgreSQL 数据库的情况下,如果没有大量的手动配置和设置,转储备份将无法工作。
pg_dumpall 备份的内容比 pg_dump 多,但 Postgres 文档中没有提供明确的信息,说明备份转储中还有哪些内容被遗漏了,需要备份。
我需要备份所有 PostgreSQL 配置信息、表、索引、权限、方案等。 如果发生完全灾难,只要我重新安装相同版本的 PostgreSQL,我就不必重新配置任何东西。
例如,我不在乎索引是否是从头开始重新构建的,或者备份是否已经存储了索引......像这样的东西对我来说并不重要......我只希望数据库完全相同还原后的状态与备份时的状态相同。
如果有人可以列出需要备份的内容以实现完整备份,我将不胜感激。当然,如果您能推荐一些工具以及针对列表中各种内容的一些程序,我将不胜感激。请解释您推荐的工具和程序涵盖的总清单上的哪些项目。
Dan*_*ons 11
实际上,pg_dump
备份构成数据库的所有数据、权限、索引等。没有备份的是 PostgreSQL 服务器的配置文件、全局变量(角色和表空间)及其实际的磁盘文件和布局。
如果您想备份所有内容,您应该使用pg_dump
dump 每个数据库(我建议使用自定义格式),然后在您的$PGDATA
目录中获取配置文件:postgresql.conf
,pg_hba.conf
和pg_ident.conf
. 如果您使用的表空间,你还需要跟踪他们在链接到pg_tblspc
的子目录$PGDATA
。我不会使用pg_dumpall
,它更难恢复。中的其余文件$PGDATA
不需要您关心,因为无论如何,热副本可能看起来对 PostgreSQL 有缺陷。
修正:您还应该pg_dumpall -g
备份您的角色和表空间。您的恢复策略如下:
initdb -D <new data directory>
psql < (file with output of pg_dumpall -g)
createdb
对于每个数据库pg_restore -d <database> <pg_dump file>
对于每个数据库为什么你宁愿使用而pg_dump
不是pg_dumpall
一切?有两个基本原因:
pg_restore
具有依赖于自定义格式的转储的功能。目前主要是并行数据恢复,可以显着提高恢复速度。pg_dumpall
只能生成一个大的 SQL 脚本。pg_dumpall
不能用于有选择地恢复数据库。该脚本包含创建此数据库、更改它、加载数据,然后创建下一个数据库的说明。如果您的集群中有多个数据库,则很难从pg_dumpall
.也就是说,如果您的集群中只有一个数据库,那么对于您获得的数量而言,上述步骤的开销可能太大。即使是简单的备份pg_dumpall
也比根本没有备份好。记得刚获得上述所有磁盘上的其他东西,以及(postgresql.conf
,pg_hba.conf
和任何更改为你做表空间的布局)。
小智 5
鉴于您的要求,我会说 pg_dump 不是您想要的工具。您想要使用时间点恢复进行热复制,这将允许您将数据库恢复到任何特定时间点,所有配置文件都在一个地方。
这就是你要做的,检查配置你必须有足够的 wal 才能让它工作,所以如果备份在凌晨 1 点开始并在凌晨 3 点完成,你仍然必须在凌晨 3 点左右从凌晨 1 点开始拥有 WAL(技术上有办法解决这个问题,但为了简单起见,让我们继续吧)。
当您准备好以超级用户身份运行备份时,运行“SELECT pg_start_backup('backup_label');” (您可以真正称它为任何名称,它不必是“backup_label”,这会将数据库置于备份模式)。
当这返回时,将所有数据文件复制到某处(可能使用 tar 或其他东西将它们放入单个存档中)。在这种情况下,一切都意味着全部,您需要备份整个基本数据库目录、您拥有的任何表空间和 WAL/pg_xlog 目录(有时人们将这些放在主数据目录之外,可以帮助提高性能)。WAL 目录必须最后备份。
当您以超级用户身份完成后运行“SELECT pg_stop_backup();” (这会使数据库退出备份模式)。
恢复很容易,只需将您复制的所有文件放回完全相同的位置,并使用完全相同的 Postgres 版本并启动数据库。Postgres 将看到它处于不一致状态并启动恢复过程,这将在备份结束时将您带回到一致的时间点,并且由于配置文件保存在数据目录中,它们也将被复制。如果您愿意,您也可以保留更多 WAL,这允许您将数据库转发到您希望的任何时间点。因此,如果您的备份时间是凌晨 3 点,并且您希望恢复到 6:15,只要您拥有从备份结束到 6:15 的所有 WAL,您就可以使用它来将数据库提前到 6:15。您需要创建一个 recovery.conf 以使用此处列出的设置执行此操作:http://www.postgresql.org/docs/9.3/static/recovery-target-settings.html
归档时间: |
|
查看次数: |
2331 次 |
最近记录: |