【问题标题】:Move postgresql data store (port stops listening)移动 postgresql 数据存储(端口停止侦听)
【发布时间】:2014-01-21 17:36:43
【问题描述】:

我已将我的数据存储从默认 /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

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

【问题讨论】:

  • 检查 PostgreSQL 数据目录中的服务器错误日志。那里有错误输出吗?另外:您在移动数据目录之前是否停止了 PostgreSQL?
  • 您是否在启用 SELinux 的情况下运行?
  • @Craig 日志中没有消息......它只是不接受 5432 端口上的任何请求,是的,当时数据库已关闭。
  • @Tamerlane Scott 说得好。 getenforce(作为 shell 命令运行)的输出是什么? dmesg 中是否有任何 SELinux 否认? PostgreSQL真的在运行吗? ps -f -u postgres.
  • @ScottMarlowe 我检查了 SELinux 已禁用。

标签: database linux postgresql ubuntu centos


【解决方案1】:

因为提示输入密码,说明数据库正在监听,但需要配置连接方式。

你需要查看的配置文件在/etc/postgresql/9.3/main/pg_hba.conf(你需要root才能编辑它)。

您将看到如下所示的行(在 cmets 之后):

本地所有 postgres 同行 托管所有 127.0.0.1/32 md5

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

您的问题与最后一个条目有关。 “peer”表示您必须以同名的 unix 用户身份登录。 “信任”意味着数据库不会要求输入密码。 “md5”会提示输入密码。

因此,如果您想以“postgres”用户身份连接到数据库,您需要如下所示的行:

本地所有 postgres 信任 托管所有 postgres 127.0.0.1/32 信任

那么, psql -U postgres postgres 将不会要求输入密码。

postgres 用户的配置行应该位于所有用户的类似行之前(数据库将使用第一个匹配的规则)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多