我一直在尝试在 Windows 服务器上设置备份脚本。我已使用 pgAgent(pgAdmin 的调度程序)来运行备份脚本。备份脚本没有问题。
但是,我的工作没有按预期进行。我已经设置了时间表和步骤。
我相当确定,我在错误的用户或没有所需权限的用户下运行该服务。
我像这样运行服务:"C:\Program Files\pgAdmin III\pgAgent" INSTALL pgAgent -u postgres -p secret hostaddr=127.0.0.1 dbname=pgadmin user=postgres
然后我收到一个错误,告诉我登录信息有误,尽管我知道它是正确的。当我进入服务(控制面板 --> 管理 --> 服务)时,我能够使用本地用户启动该服务。
这可能是问题吗?
在哪里可以查看或更改 postgres 用户的权限?
答案1
PostgreSQL 在其基本安装中为您提供了备份所需的所有工具。这是我几周前为在 Windows 主机上托管的 PostgreSQL 实例设置热备份所做的备份:
创建一个专门用于备份的用户,我们称之为“备份”。您可以使用
createuser
PostgreSQL 安装中的命令。为用户提供密码和对所有内容的读取权限。这可能会有点复杂。或者,您也可以使其成为 PostgreSQL 超级用户并强制执行登录限制,如下所述。
允许它仅通过使用密码(机制“md5”)从本地主机登录,或者如果您是游戏,请在 MS Windows 机器上设置用户并使用机制“ident”。您需要修改文件
pg_hba.conf
以强制执行这些行为之一以及仅从本地主机登录的限制。pg_dumpall
创建用于备份数据库的脚本。可以通过任务计划程序中的作业设置或通过 Bacula 等备份计划程序调用该脚本。如果您选择使用密码进行身份验证,则可以将其指定为环境变量,该pg_dumpall
变量将读取或使用其他环境变量指定包含密码的文件。
此方法的详细信息可参见http://wiki.postgresql.org/wiki/Automated_Backup_on_Windows。
我不确定您为什么要使用 pgAdmin 自动备份 PostgreSQL。我很想听听您的理由,因为 PostgreSQL 有一种方法可以在不使用外部工具的情况下完成此操作,并且有一份关于此主题的精心编写的文档。
答案2
我以这种方式设置 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 的密码时,将会为您的用户创建一个 pgpass。
如果没有这个 pgpass,pgAgent 就无法访问数据库。
答案3
Postgres 非常灵活 - 有多种方法可以获取良好、可用的备份(并且许多最好的方法不需要您使用 pgAgent - 您可以使用常规 OS 工具为其编写脚本)。
nearora 已经描述了使用pg_dumpall
这对你来说可能是可行的。
Postgres 手册描述了另外两个选项只需编写一些脚本即可在 Windows 上自动实现。
选项 2:文件系统级备份
通常,这是通过关闭服务器并获取PGDATA
目录来完成的。
如果你不能关闭服务器,那么与手册上所说的相反, 你能无需关闭服务器即可获得可用的备份——只需像设置WAL/PITR 从属。
此备份的结果应该是PGDATA
目录的副本以及一些 WAL 段,存储在服务器上的单独位置,您的常规文件系统级备份进程可以获取这些副本。
在使用常规文件系统备份进程获取文件之前,您必须确保基本备份已完成,否则您可能最终会得到无法使用的备份。
选项 3:备份从属服务器
使用此方法,你需要创建一个从属服务器,用于日志传送或热备用,按照 Postgres 文档中所述。
当需要备份集群时,关闭从属服务器并备份其PGDATA
目录,就像常规文件系统备份一样,然后重新启动从属设备并让其再次赶上主设备。
这是迄今为止我最喜欢的备份 Postgres 集群的选项 - 如果您将特定的从属服务器专用为“备份从属服务器”,则可以对集群执行备份,而不会对使用数据库的生产应用程序产生任何影响。
它的主要缺点是需要一台从服务器,并且你必须确保从服务器上的 Postgres 已停止运行前在您抓取PGDATA
目录后,它才会重新启动,直到您抓取完文件后才会重新启动。
您还需要确保备份在合理的时间范围内完成,以便您追上主服务器所需的 WAL 段仍然可用。实际上,这只会对具有极其VACUUM FULL
高写入负载,或者如果您在从服务器备份时在主服务器上执行类似操作。