我正试着创建一个cronjob,在灾难发生之前每晚备份我的数据库。看起来这个命令应该能满足我的需求:
0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
只是在运行之后,它要求我输入密码。如果我从cron运行它,我就做不到这一点。我怎样才能自动输入一个?
我正试着创建一个cronjob,在灾难发生之前每晚备份我的数据库。看起来这个命令应该能满足我的需求:
0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
只是在运行之后,它要求我输入密码。如果我从cron运行它,我就做不到这一点。我怎样才能自动输入一个?
当前回答
或者您可以设置crontab来运行脚本。在这个脚本中,你可以像这样设置一个环境变量: 出口PGPASSWORD = " $ put_here_the_password "
这样,如果您有多个需要密码的命令,您可以将它们都放在脚本中。如果密码改变了,你只需要在一个地方(脚本)修改它。
我同意Joshua的观点,使用pg_dump -Fc可以生成最灵活的导出格式,并且已经被压缩了。有关更多信息,请参阅:pg_dump文档
如。
# dump the database in custom-format archive
pg_dump -Fc mydb > db.dump
# restore the database
pg_restore -d newdb db.dump
其他回答
如果你想在一个命令中完成:
PGPASSWORD="mypass" pg_dump mydb > mydb.dump
当您在命令前加上VAR="val"前缀时,这些变量将被设置为该命令执行上下文的环境变量。所以它不会在shell会话中全局设置。根据您的情况,这可能是向pg_dump命令提供密码的合适方式。
这一行帮助我创建一个数据库的转储。
PGPASSWORD="yourpassword" pg_dump -U postgres -h localhost mydb > mydb.pgsql
在windows中,您可以在使用pg_dump.exe之前设置密码变量,并可以在bat文件中自动执行所有操作,例如:
C:\>SET PGPASSWORD=dbpass
C:\>"folder_where_is_pg_dump\pg_dump.exe" -f "dump_file" -h "db_host" -U db_usr --schema "db_schema" "db_name"
你只需要打开pg_hba.conf并在所有方法中设置信任。这对我来说很合适。因此,安全是空的。
如本文所述,有两种方法可以非交互式地向PostgreSQL实用程序(如“pg_dump”命令)提供密码:或者使用“PGPASSWORD”环境变量。