我正试着创建一个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运行它,我就做不到这一点。我怎样才能自动输入一个?
当前回答
这一行帮助我创建一个数据库的转储。
PGPASSWORD="yourpassword" pg_dump -U postgres -h localhost mydb > mydb.pgsql
其他回答
如本文所述,有两种方法可以非交互式地向PostgreSQL实用程序(如“pg_dump”命令)提供密码:或者使用“PGPASSWORD”环境变量。
对于Windows, pgpass.conf文件应该存在于以下路径:
%APPDATA%\postgresql\pgpass.conf
在我的Windows 10绝对路径上是:
C:\Users\Ognjen\AppData\Roaming\postgresql\pgpass.conf
注意:如果%APPDATA%中没有postgresql文件夹,请创建一个包含pgpass.conf文件的postgresql文件夹。
pgpass.conf的内容可以是:
*:5432:*:*:myDbPassword
或者更具体的内容可以是:
localhost:5432:dbName:username:password
注意:pgpass.conf的内容不能以空格结尾(密码后),否则会出现错误。
@Josue Alexander Ibarra回答适用于centos 7和9.5版本 如果——dbname没有被传递。
pg_dump postgresql://username:password@127.0.0.1:5432/mydatabase
在我看来,最简单的方法是: 编辑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:
pg_dump "host=localhost port=5432 dbname=mydb user=myuser password=mypass" > mydb_export.sql