移动postgresql数据存储(端口停止监听)

时间:2014-01-03 22:37:17

标签: database linux postgresql ubuntu centos

我已将数据存储从默认/var/lib/pgsql/9.3/data移至新磁盘以提高性能。一切顺利,服务器启动正常,但它停止接受5432端口上的请求。我已经做了一些研究,到目前为止我理解可能是在我的Linux发行版(CentOS 9.5)而不是/tmp/.s.PGSQL.5432下,它被配置为使用其他路径。我试图改变unix_socket_directories但没有成功。 任何想法如何解决这个问题?

修改

以下是我更改数据文件夹的步骤

#In /etc/init.d/postgresql-9.3
PGDATA=/my_new_disc/pgdata/data
PGLOG=/my_new_disc/pgdata/data/pgstartup.log

# under root user
> mkdir /my_new_disc/pgdata/data
> chmod 775 /my_new_disc/pgdata/data
> chown postgres/my_new_disc/pgdata/data

# switch to postgres user 
> su postgres
> initdb /my_new_disc/pgdata/data

在此之后,我能够成功运行服务,并且可以看到Postgres正在侦听端口5432,但只有在以postgres用户身份登录时才可以连接。

尝试

时,即使是同一台计算机上的root用户也无法正常工作
psql -h localhost -U postgres postgres

它要求输入密码,并表示无法连接。

EDIT2

我想的另一个选择是使用符号链接......会更好吗?

1 个答案:

答案 0 :(得分:0)

因为系统提示您输入密码,这意味着数据库正在侦听,但您需要配置连接方法。

您需要查看的配置文件位于/etc/postgresql/9.3/main/pg_hba.conf(您需要root用户才能编辑它)。

您将看到类似的行(在评论之后):

local   all             postgres                                peer
host    all             all             127.0.0.1/32            md5

以“local”开头的行指的是unix套接字连接。 下一个条目是适用于哪些数据库(通常是“全部”)。 然后是适用于此的db用户ID。 对于“主机”行,您需要指定适用的IP范围。

您的问题与最后一个条目有关。 “peer”表示您必须以具有相同名称的unix用户身份登录。 “trust”表示数据库不会要求输入密码。并且“md5”将提示输入密码。

因此,如果您想以“postgres”用户身份连接到数据库,则需要看起来像这样的行:

local    all     postgres     trust
host     all     postgres     127.0.0.1/32  trust

然后, psql -U postgres postgres不会要求输入密码。

postgres用户的配置行应该出现在所有用户的类似行之前(db将使用匹配的第一个规则)。

请注意,通过使用“trust”,任何人都可以在不提供密码的情况下登录数据库。您可能希望考虑在postgres用户的数据库中设置密码,然后将pg_hba.conf文件恢复为使用md5。