我正试着创建一个cronjob,在灾难发生之前每晚备份我的数据库。看起来这个命令应该能满足我的需求:

0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz

只是在运行之后,它要求我输入密码。如果我从cron运行它,我就做不到这一点。我怎样才能自动输入一个?


当前回答

在我看来,最简单的方法是: 编辑postgres主配置文件:pg_hba.conf 在这里你必须添加以下一行:

Host <you_db_name> <you_db_owner> 127.0.0.1/32 trust

在这之后,你需要这样开始你的cron:

pg_dump - h 127.0.0.1 - u < you_db_user > < you_db_name > | gzip > /备份/ db /美元(日期+ Y % - % - % d) .psql.gz

而且它不需要密码就能工作

其他回答

另一种(可能不安全)传递密码的方法是使用输入重定向,即调用

Pg_dump [params] <[包含密码的文件路径]

这一行帮助我创建一个数据库的转储。

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_dump:

pg_dump "host=localhost port=5432 dbname=mydb user=myuser password=mypass" > mydb_export.sql

如果我说错了请纠正我,但是如果系统用户和数据库用户是相同的,PostgreSQL将不会询问密码——它依赖于系统进行身份验证。这可能是构型的问题。

因此,当我想让数据库所有者postgres每晚备份他的数据库时,我可以为它创建一个crontab: crontab -e -u postgres。当然,postgres需要被允许执行cron作业;因此它必须列在/etc/cron.中Allow或/etc/cron.deny必须为空。