1、pg_dump: fe_sendauth: no password supplied问题处理(root 用户)

第一次碰到这个问题是因为是在root用户下执行定时任务时抛出的

[root@localhost ~]# crontab -l
20 1 * * * sh /home/postgres/shell/flexflowdbbackupParm.sh edu_compass_xm 10 >/dev/null 2>&1
30 1 * * * sh /home/postgres/shell/flexflowdbbackupParm.sh edu_compass_pt_cs 10 >/dev/null 2>&1
40 1 * * * sh /home/postgres/shell/flexflowdbbackupParm.sh edu_jbpm_pt_cs 10 >/dev/null 2>&1
50 1 * * * sh /home/postgres/shell/flexflowdbbackupParm.sh edu_jbpm_xm 10 >/dev/null 2>&1
10 2 * * * sh /home/postgres/shell/flexflowdbbackupParm.sh edu_bigdata_pt_cs 10 >/dev/null 2>&1
20 2 * * * sh /home/postgres/shell/flexflowdbbackupParm.sh edu_bigdata_xm 10 >/dev/null 2>&1
[root@localhost ~]# 

2、解决方法

2.1、创建 .pgpass文件

用root用户在/home/root目录下创建.pgpass文件,并把如下内容放在文件中

hostname : 端口:数据库 :用户名:密码
127.0.0.1:5432:database_a:postgres:wwwwwwwwwwwwwww
127.0.0.1:5432:database_b:postgres:wwwwwwwwwwwwwww
127.0.0.1:5432:database_c:postgres:wwwwwwwwwwwwwww
127.0.0.1:5432:database_d:postgres:wwwwwwwwwwwwwww
127.0.0.1:5432:database_e:postgres:wwwwwwwwwwwwwww
127.0.0.1:5432:database_f:postgres:wwwwwwwwwwwwwww

postgres pg_dump: fe_sendauth: no password supplied问题处理-LMLPHP

2.2、chmod 600 ~/.pgpass

set the file’s mode to 0600. Otherwise, it will be ignored.

chmod 600 ~/.pgpass

3、额外情况

在另一个场景中,我又碰到了上面这个问题,而且我按上面的方式设置了之后,还是不行,后面找到了问题的原因:
postgres pg_dump: fe_sendauth: no password supplied问题处理-LMLPHP

是因为执行定时任务的用户为kylin,而.pgpass文件的用户名和用户组为root:root,所以一直还是报这个错,改了.pgpass的所属用户名和用户组后,不出现这个问题,但出现另外一个问题,如下图:
postgres pg_dump: fe_sendauth: no password supplied问题处理-LMLPHP

这是另外一个问题,是因为执行脚本里的创建文件所在的目录的用户名和用户组跟执行脚本的用户名不一致导致 的。修改如下:

postgres pg_dump: fe_sendauth: no password supplied问题处理-LMLPHP
修改用户名和用户组权限

sudo chown -R kylin:lylin /opt/data/postgres/dbBackup
12-05 21:35