PostgreSQL自动备份

我一直在尝试在Windows服务器上设置备份脚本。 我已经使用pgAgent(调度pgAdmin)来运行备份脚本。 备份脚本没有问题。

但是,我的工作没有像他们应该运行。 我已经设定了时间表和步骤。

我相当肯定,我是在没有所需权限的情况下在错误的用户或用户下运行服务的。

我运行这样的服务: "C:\Program Files\pgAdmin III\pgAgent" INSTALL pgAgent -u postgres -p secret hostaddr=127.0.0.1 dbname=pgadmin user=postgres

我得到一个错误,告诉我,login信息有错误,但我知道这是正确的。 当我服务(控制面板 – >pipe理 – >服务)下,我能够启动与本地用户的服务。

这可能是问题吗?

我在哪里可以看到或更改postgres用户的权限?

PostgreSQL提供了所有必要的工具来备份它的基本安装。 这就是我几个星期前设置备份Windows主机上托pipe的PostgreSQL实例的热备份的方法:

  1. 创build一个专门用于备份的用户,我们称之为“备份”。 您可以使用PostgreSQL安装中的createuser命令。

  2. 给用户一个密码并读取一切。 这可能会有点复杂。 或者,您也可以使其成为PostgreSQL超级用户,并执行login限制,如下所述。

  3. 允许它只使用密码(机制'md5')从本地主机login,或者如果你是在MS Windows机器上的游戏设置用户并使用机制'ident'。 您需要修改pg_hba.conf文件以强制执行这些行为,并限制仅从本地主机login。

  4. 创build一个脚本来使用pg_dumpall来备份数据库。 可以通过任务计划程序中的作业设置或通过备份计划程序(如Bacula)调用该脚本。 如果您select使用密码进行身份validation,则可以将其指定为pg_dumpall将读取的环境variables,或使用不同的环境variables指定包含密码的文件。

有关此方法的详细信息,请参阅http://wiki.postgresql.org/wiki/Automated_Backup_on_Windows

我不知道你为什么使用pgAdmin来自动备份PostgreSQL。 我很想听听你的理由,考虑到PostgreSQL没有外部工具的方法,并有一个关于这个主题的书面文件。

我这样设置pgAdmin

 pgagent.exe INSTALL pgAgent -u postgres -p secret host=localhost dbname=pgadmin user=postgres 

然后你需要在postgres用户目录下设置pgpass.conf文件,在winxp下这是在Application Data / postgres / pgpass.conf中,在win7下它应该是appdata / local / postgres / pgpass.conf(不是100%肯定)

其定义在这里http://wiki.postgresql.org/wiki/Pgpass

 hostname:port:database:username:password 

这允许pgAgent访问postgreSQL服务器,当您记住pgAdmin的密码时,会为您的用户创build一个pgpass。

没有这个pgpass pgAgent不能访问数据库。

Postgres是非常灵活的 – 有不止一种方法来获得一个好的,可用的备份(许多最好的不需要你使用pgAgent – 你可以使用正规的操作系统工具编写脚本)。

已经使用pg_dumpall描述了nearora ,这对你来说可能是可行的。

Postgres手册介绍了另外两个可以在Windows上自动运行一些脚本的选项。

选项2:文件系统级备份

通常这是通过closures服务器并抓取PGDATA目录来完成的。
如果你不能closures服务器,那么违背了手册的说明 ,你可以在不closures服务器的情况下获得可用的备份 – 只需要像设置WAL / PITR从服务器一样进行“基本备份” 。

这个备份的结果应该是PGDATA目录的副本,再加上几个WAL段,存储在服务器上的一个单独的位置,以便正常的文件系统级别的备份过程可以select。
在使用常规文件系统备份过程抓取文件之前,您必须确保基本备份完成,否则可能会导致无法使用的备份。


scheme3:备份一个奴隶

使用这种方法,您将需要创build一个从服务器,如日志传送或热备用, 如Postgres文档中所述 。
在备份集群的时候, closures从属设备,并像备份常规文件系统一样备份PGDATA目录 ,然后重新启动从属设备,并让它重新跟上主设备。

这是备份Postgres群集的最佳select – 如果您将特定的从服务器专用为“备份从服务器”,则可以使用数据库执行群集的备份,而不影响生产应用程序。

主要的缺点是它需要一个从服务器,并且抓取PGDATA目录之前必须确保Postgres停止在从服务器上,并且在抓取文件之前不会再次启动。
您还需要确保备份在合理的时间内完成,因此您需要赶上主服务器的WAL段仍然可用。 在实践中,这只会是极高写入负载的集群的一个问题,或者如果您在备份从服务器的同时在主服务器上执行了一个VACUUM FULL类的操作。