我正试着创建一个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运行它,我就做不到这一点。我怎样才能自动输入一个?
当前回答
注意,在windows中,pgpass.conf文件必须在以下文件夹中:
%APPDATA%\postgresql\pgpass.conf
如果%APPDATA%文件夹中没有postgresql文件夹,创建它。
pgpass.conf文件内容如下:
localhost:5432:dbname:dbusername:dbpassword
干杯
其他回答
您可以通过以下方式直接将密码传递到pg_dump:
pg_dump "host=localhost port=5432 dbname=mydb user=myuser password=mypass" > mydb_export.sql
传递密码的安全方法是将其存储在.pgpass文件中
.pgpass文件的内容格式如下:
db_host:db_port:db_name:db_user:db_pass
#Eg
localhost:5432:db1:admin:tiger
localhost:5432:db2:admin:tiger
现在,将该文件存储在权限为u=rw(0600)或更小的用户的主目录中
要查找用户的主目录,请使用 echo $ HOME
限制文件权限 Chmod 0600 /home/ubuntu/.pgpass . txt
$ PGPASSWORD="mypass" pg_dump -i -h localhost -p 5432 -U username -F c -b -v -f dumpfilename.dump databasename
如本文所述,有两种方法可以非交互式地向PostgreSQL实用程序(如“pg_dump”命令)提供密码:或者使用“PGPASSWORD”环境变量。
在pg_dump将运行的帐户的主目录中创建一个.pgpass文件。
格式为:
hostname:port:database:username:password
然后,将文件模式设置为0600。否则,它将被忽略。
chmod 600 ~/.pgpass
更多细节请参阅Postgresql文档libpq-pgpass。