首页 > 解决方案 > postgreSQL pg_dump 通过局域网

问题描述

我正在寻找一种通过局域网在工作站上安装的驱动器上备份数据库的方法。基本上是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本地完成备份后使用另一种方法?干杯

标签: postgresqlcronpg-dump

解决方案


首先,请注意pg_dump您使用的命令包含该-w选项,这意味着pg_dump不会发出密码提示。这确实是您想要的无人值守备份(即由脚本执行)。但是您只需要确保正确设置了身份验证。这里的选项基本上是:

  1. 在运行转储的主机上设置一个~/.pgpass文件。根据您所写的内容,您应该将此文件保存在运行此备份作业的服务器的主目录中,而不是存储在已安装卷上的某个位置。根据示例中的信息,此文件中的行应如下所示: serverbox.local:5432:database:adminuser:password 请记住指定要备份的数据库名称!这未在您的示例pg_dump命令中指定。

  2. 愚弄您的 Postgres 服务器的pg_hba.conf文件,以便从备份计算机作为备份用户的连接不需要密码,而是使用类似trustident身份验证的东西。当然,这里要小心,如果您不完全信任运行备份的主机(例如,它是共享机器),这不是一个好主意。

  3. 在服务器上设置环境变量,例如PGPASSWORD对备份脚本可见的环境变量。~/.pgpass出于安全原因,通常建议使用文件。

还是在本地完成备份后使用 rsync 执行此操作的另一种方法?

不知道你在这里问什么——你当然必须在备份pg_dump 之前指定凭据,而不是之后。这pg_dump只是众多备份选项之一,如果您对 Postgres 服务器具有 SSH/rsync 访问权限,还有其他方法可以使用,例如文件系统级备份。这些类型的备份(也称为“物理”级别)是(“逻辑”级别)的补充pg_dump,您可以根据您的偏执和复杂程度使用一种或两种方法。


推荐阅读