Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgreSQL pg_通过局域网转储_Postgresql_Cron_Pg Dump - Fatal编程技术网

postgreSQL pg_通过局域网转储

postgreSQL pg_通过局域网转储,postgresql,cron,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 s

我正在寻找一种方法,通过安装在工作站驱动器上的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
不会发出密码提示。这确实是无人参与备份(即通过脚本执行)所需要的。但您只需要确保正确设置了身份验证。这里的选项基本上是:

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

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

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

  • 或者,在本地完成备份后,是否有其他方法可以使用rsync执行此操作


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

    让它与服务器上的
    ~/.pgpass
    pg_hba.conf
    一起工作,以及一个脚本,其中包括
    术语
    环境变量(
    xterm
    ),以及指向
    pg_dump
    的路径


    即使作为当前管理员用户,
    crontab
    也没有登录。所以它有点盲目

    看来我都有了。上面修改的语法实际上表示db名称。我会换的。在bash中手动运行,工作正常。在crontab中,它驻留一个空的结果文件。crontab是否作为当前用户运行?我可以拿出
    -w
    ?@josh kuperschmidt
    crontab-l
    显示我的管理员用户名的特定脚本,即我。@josh kuperschmidt只是出于好奇(脚本因某种原因中断,您建议从服务器推送到存档,还是从服务器拉到存档机器?所以您的问题是cron,而不是pg_dump。我建议您在问题中添加
    cron
    标记。嗯,cron看不到pg_dump。我将添加它。