我在VM中有这个数据库,可以重新启动VM,它可以正确访问
但是现在如果我在pgAdmin III
尝试访问数据库时重新启动虚拟机,我会收到以下消息
服务器不听
服务器不接受连接:连接库报告
无法连接到服务器:连接被拒绝服务器是否在主机“127.0.0.1”上运行并接受端口5432上的TCP / IP连接?
如果您遇到此消息,请检查您是否是服务器 试图联系实际上是在给定端口上运行PostgreSQL。 测试您是否具有从客户端到服务器的网络连接 主机使用ping或等效工具。是你的网络/ VPN / SSH 隧道/防火墙配置正确吗?
出于安全原因,PostgreSQL 不监听所有可用内容 最初在服务器计算机上的IP地址。为了访问 通过网络服务器,您需要启用侦听地址 第一。对于从8.0版开始的PostgreSQL服务器,这是 使用“listen_addresses”参数控制 postgresql.conf文件。在这里,您可以输入IP地址列表 服务器应该监听,或者只是使用'*'来监听所有可用的 IP地址。对于早期的服务器(版本7.3或7.4),您需要 将“tcpip_socket”参数设置为“true”。
您可以使用pgAdmin III中内置的postgresql.conf编辑器 编辑postgresql.conf配置文件。改变之后 文件,您需要重新启动服务器进程才能进行设置 有效。
如果您仔细检查了配置但仍然出现此错误 消息,你仍然不太可能遇到致命的PostgreSQL 不当行为。您可能有一些低级别的网络连接 问题(例如防火墙配置)。请仔细检查 在向PostgreSQL社区报告错误之前。
我通过VM快照进行了一些测试,发现在命令
之后会发生这种行为 sudo a2enmod rewrite
但我没有发现任何可能表明某些链接或如何解决的问题,因为我需要运行sudo a2enmod rewrite
postgresql.conf
连接设置:
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
# (change requires restart)
#bonjour = off # advertise server via Bonjour
# (change requires restart)
#bonjour_name = '' # defaults to the computer name
# (change requires restart)
我已经尝试重新启动postgres服务,但它无法正常工作
答案 0 :(得分:1)
这是我调试对任何数据库的访问的一般过程的一部分。
基本测试
旨在确定服务是否正常运行。
检查PostgreSQL是否正在运行:
pgrep -fl postgres
service postgresql status
(如果您的Linux中有状态,那么您应该看到类似的内容):
mortiz@florida:~/.mozilla/firefox/hlmpduzp.default$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2018-06-11 14:05:04 -03; 3s ago
Process: 17522 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 17522 (code=exited, status=0/SUCCESS)
Jun 11 14:05:04 florida systemd[1]: Starting PostgreSQL RDBMS...
Jun 11 14:05:04 florida systemd[1]: Started PostgreSQL RDBMS.
如果服务正在运行,请检查端口的基本连接:
telnet 127.0.0.1 5432
如果您无法连接尝试使用localhost或ip地址(而不是环回):
telnet localhost 5432
telnet <your_ip_address> 5432
如果您能够使用telnet连接到端口,那么服务已启动且端口已打开,无论如何,实例或客户端可能存在配置问题。
如果telnet不能使用127.0.0.1但是它使用localhost或 - (your_ip_address / not loopback),那么在客户端设置中更改它。
如果服务正在运行,请检查端口的基本连接:
telnet 127.0.0.1 5432
如果您无法连接尝试使用localhost或ip地址(而不是环回):
telnet localhost 5432
telnet <your_ip_address> 5432
如果您能够使用telnet连接到端口,那么服务已启动且端口已打开,无论如何,实例或客户端可能存在配置问题。
如果telnet不能使用127.0.0.1,但它使用localhost,或者在客户端设置中更改它。
测试功能
检查服务的预期行为。在Linux中,某些服务即使出现错误也会启动并产生不良行为。
现在是时候查看服务是否正常运行,我们将使用CLI。运行此命令:
psql -h localhost --username=postgres --list
你应该看到数据库列表:
mortiz@florida:~/.mozilla/firefox/hlmpduzp.default$ psql -h localhost --username=postgres --list
Password for user postgres:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
如果这样可行,则您的问题可能出在客户端 pgAdmin 中。尝试安装其他客户端或版本,然后尝试连接到数据库。
查看服务器的配置 *也许有人改变了访问数据库的方法。
小心,先备份你的文件。检查允许连接/方法和用户的 PostgreSQL客户端身份验证配置文件主机 - &gt; /etc/postgresql/9.6/main/pg_hba.conf
# This file controls: which hosts are allowed to connect, how clients
# are authenticated, which PostgreSQL user names they can use, which
# databases they can access. Records take one of these forms:
#
# local DATABASE USER METHOD [OPTIONS]
# host DATABASE USER ADDRESS METHOD [OPTIONS]
# hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.
如果有任何问题,请告诉我每次测试的结果。