postgresql - 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
本地完成备份后使用另一种方法?干杯
解决方案
首先,请注意pg_dump
您使用的命令包含该-w
选项,这意味着pg_dump
不会发出密码提示。这确实是您想要的无人值守备份(即由脚本执行)。但是您只需要确保正确设置了身份验证。这里的选项基本上是:
在运行转储的主机上设置一个
~/.pgpass
文件。根据您所写的内容,您应该将此文件保存在运行此备份作业的服务器的主目录中,而不是存储在已安装卷上的某个位置。根据示例中的信息,此文件中的行应如下所示:serverbox.local:5432:database:adminuser:password
请记住指定要备份的数据库名称!这未在您的示例pg_dump
命令中指定。愚弄您的 Postgres 服务器的
pg_hba.conf
文件,以便从备份计算机作为备份用户的连接不需要密码,而是使用类似trust
或ident
身份验证的东西。当然,这里要小心,如果您不完全信任运行备份的主机(例如,它是共享机器),这不是一个好主意。在服务器上设置环境变量,例如
PGPASSWORD
对备份脚本可见的环境变量。~/.pgpass
出于安全原因,通常建议使用文件。
还是在本地完成备份后使用 rsync 执行此操作的另一种方法?
不知道你在这里问什么——你当然必须在备份pg_dump
之前指定凭据,而不是之后。这pg_dump
只是众多备份选项之一,如果您对 Postgres 服务器具有 SSH/rsync 访问权限,还有其他方法可以使用,例如文件系统级备份。这些类型的备份(也称为“物理”级别)是(“逻辑”级别)的补充pg_dump
,您可以根据您的偏执和复杂程度使用一种或两种方法。
推荐阅读
- android - NativeScript Vue CSS 背景图像重复
- java - Firebase“ValueEventListener”不工作
- ios - 防止 webkit 视图允许视频自动全屏显示?
- python - 对多列进行排名并标记熊猫观察之间的联系
- java - Espresso ViewAssertions - Check If Not Null
- android - Android:出现错误:添加新依赖项后任务“:app:processDebugGoogleServices”执行失败
- asp.net - 获取参数公共构造函数错误
- enums - 如何使用宏生成可能包含或不包含关联值的枚举变体?
- c - c编程中的分段错误(核心转储)错误
- scala - Scala 中的类型推断。在这种情况下它是如何工作的?