我正在寻找一种通过 LAN 在工作站上安装的驱动器上备份数据库的方法。基本上是工作站或服务器上的 Bash
脚本,用于将单个数据库转储到该卷上的路径中。该卷未正常安装,因此在给定用户名/密码和已安装的卷权限/可用性的情况下,我不清楚将脚本放在哪个框上。
我目前遇到的问题是工作站的权限:
myfile='/volumes/Dragonfly/PG_backups/serverbox_PG_mydomain5myusername_'`date +%Y_%m_%d_%H_%M`'.sql'
pg_dump -h serverbox.local -U adminuser -w dbname > $myfile
我可以为此提供语法吗?阅读文档,没有提供密码,这是意料之中的。我也不想回显密码并将其保存在 shell 脚本中。还是在本地完成备份后使用 rsync
执行此操作的另一种方法?干杯
最佳答案
首先,请注意您正在使用的 pg_dump
命令包含 -w
选项,这意味着 pg_dump
不会发出密码提示。这确实是您想要的无人值守备份(即由脚本执行)。但是您只需要确保正确设置身份验证即可。这里的选项基本上是:
设置
~/.pgpass
file在运行转储的主机上。根据您所写的内容,您应该将此文件保存在运行此备份作业的服务器的主目录中,不存储在已安装卷上的某个位置。根据您示例中的信息,此文件中的行应如下所示:serverbox.local:5432:database:adminuser:password
请记住指定要备份的数据库名称!这未在您的示例pg_dump
命令中指定。愚弄你的 Postgres 服务器的
pg_hba.conf
文件,这样从你的备份机器作为你的备份用户的连接不需要密码,而是使用像trust
这样的东西。或ident
验证。当然,这里要小心,如果您不完全信任运行备份的主机(例如,它是共享机器),这不是一个好主意。在服务器上设置环境变量,例如
PGPASSWORD
对您的备份脚本可见。出于安全原因,通常建议使用~/.pgpass
文件。
Or is there another way of doing this using rsync after the backups are done locally?
不确定您在这里问的是什么 -- 您当然必须为 pg_dump
指定凭据 在备份发生之前,而不是之后。 pg_dump
只是众多备份选项之一,如果您可以通过 SSH/rsync 访问 Postgres 服务器,还有其他方法可以使用,例如 file-system level backups .这些类型的备份(也称为“物理”级别)是对 pg_dump
(“逻辑”级别)的补充,您可以根据自己的偏执和复杂程度使用其中一种或两种方法。
关于postgreSQL pg_dump 通过局域网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624250/