我正试着创建一个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
其他回答
另一种(可能不安全)传递密码的方法是使用输入重定向,即调用
Pg_dump [params] <[包含密码的文件路径]
或者您可以设置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
注意,在windows中,pgpass.conf文件必须在以下文件夹中:
%APPDATA%\postgresql\pgpass.conf
如果%APPDATA%文件夹中没有postgresql文件夹,创建它。
pgpass.conf文件内容如下:
localhost:5432:dbname:dbusername:dbpassword
干杯
在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"
如果我说错了请纠正我,但是如果系统用户和数据库用户是相同的,PostgreSQL将不会询问密码——它依赖于系统进行身份验证。这可能是构型的问题。
因此,当我想让数据库所有者postgres每晚备份他的数据库时,我可以为它创建一个crontab: crontab -e -u postgres。当然,postgres需要被允许执行cron作业;因此它必须列在/etc/cron.中Allow或/etc/cron.deny必须为空。