postgreSQL pg_dump 通过局域网

标签 postgresql cron pg-dump

我正在寻找一种通过 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 不会发出密码提示。这确实是您想要的无人值守备份(即由脚本执行)。但是您只需要确保正确设置身份验证即可。这里的选项基本上是:

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

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

  3. 在服务器上设置环境变量,例如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/

相关文章:

sql - Postgres多对多映射sql查询

ruby-on-rails - 修剪字符尾随的零 n 轨

php - CRON 命令每 5 分钟运行一次 URL 地址

postgresql - 比较两个 postgres 转储文件

database - 如何从 pg_dump 输出中删除注释和设置?

regex - 设计 : running pg_dump when tables are continuously created and dropped

postgresql - SQLAlchemy HSTORE 列不覆盖数据库默认值

node.js - 使用 TypeORM 在 Postgres bytea 上保存缓冲区仅存储 10 个字节

php - cron mysqldump 说不使用密码

php - Cron Job - 如何在特定日期的两次之间执行脚本?