IPv6导致pgAdmin以localhost方式连接本地pg数据库失败
一、问题现象:
在湖南麒麟3.2系统中,使用PgAdmin使用localhost 连接本机安装的数据库,连接失败,但使用127.0.0.1连接成功。
二、解决方法
根据错误提示图,是指pg_hba.conf配置文件中不允许IPv6回环地址访问数据库,所以修改配置文件如下:
三、问题解决
1)检查postgresql的pg_hba.conf配置文件,如下:
根据文件,可以确认127.0.0.1肯定是可以连接成功的。需要确认的是在用localhost的连接时,实际映射的ip是什么?
2)确认localhost对应的ip地址
方法一:(简单可靠)
执行ping localhost
,看打印信息
方法二:
linux下查看/etc/hosts文件,查看ip和地址的映射关系
windows下查看C:\Windows\System32\drivers\etc\hosts文件。
方法三:
linux下ifconfig -a,可以本机回环地址。
可以知道所用的麒麟系统,localhost对应的ip地址为:****
3)再次确认pg数据库的配置
明确localhost对应的IP地址后,再次检查pg_hba.conf文件,发现
#host all all ::1/128 md5
,即不允许ipV6访问,所以找到问题的根源了,将本行的注释符号去掉,然后重启postgresql即可。
4)测试
pgsql -h localhost -u smartsys -d smartsys0714,连接成功。
四、扩展
遇到这个问题,第一反应没有想到是哪里的原因。理所当然的认为localhost就是127.0.0.1,忽略了IPV6。所以对ipV4、ipV6、localhost等概念更系统的学习了一下。
1)IPV4
IPV4:Internet Protocol version 4,网际协议第4版,ipV4采用32位2进制位表示地址,所以共可以表示2^32个地址,IPv4通常用点分十进制记法书写,例如192.168.0.1,其中的数字都是十进制的数字,中间用实心圆点分隔。一个IPv4地址可以分为网络地址和主机地址两部分,其中网络地址可以使用如下形式描述:192.168.0.0/16,其中斜线后的数字表示网络地址部分的长度是16位,这对应2个字节,即网络地址部分是192.168.0.0。
2)IPV6
IPV6:Internet Protocol version 6,网际协议第6版,IPV6采用128位2进制位表示地址,所以共可以表示2^128个地址。IPv6有3种表示方法:1)冒分十六进制表示法;2)0位压缩表示法;3)内嵌IPV4地址表示法,这里不详细介绍。
3)localhost
localhost指"本地主机",指"这台计算机"。localhost是回路网络接口(loopback)的一个标准主机名,相对应的IP地址为127.0.0.1(IPv4)和[::1](IPv6)。IP与localhost的对应关系可以修改。
4)回环地址
IPv6中的环回地址即 0:0:0:0:0:0:0:1/128 或者::1/128。环回与IPv4中的127.0.0.1作用相同,主要用于设备给自己发送报文。