在我的服务器遭到入侵后,我不得不迁移到一个新的Droplet - 在DigitalOcean,Debian Jessie,所以我不应该有很多类似问题似乎涵盖的Heroku问题。
我使用pg_dump复制数据库,看起来完好无损。 PostgreSQL已经安装并运行,但每当我尝试使用Django ORM中的数据库时,我都会收到错误 -
OperationalError: could not connect to server: Connection timed out
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
所以,首先是一些明显的事情。
Netstat显示:
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 613/postgres
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 554/redis-server 12
我可以在top
中看到几个PostgreSQL进程并使用ps auxw | grep postgres
:
1072 postgres 20 0 234680 129672 126676 S 6.0 3.2 3:06.98 postgres: me databasename [local] COPY +
640 postgres 20 0 227000 119564 117876 S 0.3 2.9 0:03.77 postgres: checkpointer process +
613 postgres 20 0 226712 21252 19824 S 0.0 0.5 0:00.05 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/9.4/main -c config_f+
641 postgres 20 0 226712 5556 4080 S 0.0 0.1 0:02.59 postgres: writer process
systemctl
显示
postgresql.service loaded active exited
postgresql@9.4-main.service loaded active running
已安装psycopg2,我正在virtualenv内部工作。
我使用Django ORM从shell运行的任何查询都返回上述错误。我可以从psql访问和运行查询,它返回数据很好,所以PostgreSQL似乎正在运行,但Django无论出于何种原因都无法访问它。密码和用户名是正确的,虽然我认为这会在任何情况下抛出不同的错误。 Restarting the service它没有任何区别。
我的Django设置是:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": "databasename",
"USER": "databaseusername",
"PASSWORD": "databasepasswordhere",
"HOST": "localhost",
"PORT": "5432",
"CONN_MAX_AGE":360,
}
}
(我已尝试将localhost和127.0.0.1作为主机,以防它是IPv4 / IPv6解析的事情,尽管不太可能)
pip freeze
显示:
Django==1.9.6
argparse==1.2.1
click==6.6
django-extensions==1.6.7
django-redis==4.4.3
django-redis-cache==1.6.5
django-rq==0.9.1
django-rq-dashboard==0.3.0
gunicorn==19.5.0
hiredis==0.2.0
newrelic==2.64.0.48
nltk==3.2.1
oauthlib==1.1.1
psycopg2==2.6.1
requests==2.10.0
requests-oauthlib==0.6.1
rq==0.6.0
six==1.10.0
tweepy==3.5.0
wsgiref==0.1.2
Per this question,我已经检查过安装了PostgreSQL,PostgreSQL-contrib,libpq-dev Python-dev。
在命令行as per this question上测试连接会引发相同的错误。
这里真正的踢球者 - 这一切都在旧服务器上工作,我可以运行ORM查询就好了 - 但它不再是一个安全的服务器,包管理器坏了,所以我需要放弃它,并且需要新工作。我看不出两者之间的配置有什么不同 - 我想知道是否存在权限问题,但我得到了与root / via sudo一样的常规用户运行问题。
我确信我错过了一个简单的配置设置,但此刻我很难过!
编辑:
抓住postgres主进程的PID并运行lsof,但是:
postgres 613 postgres 6u IPv4 11589 0t0 TCP localhost:postgresql (LISTEN)
postgres 613 postgres 7u unix 0xffff8800d8e1cc00 0t0 11591 /var/run/postgresql/.s.PGSQL.5432
这看起来很奇怪。它是默认为Unix套接字吗?
答案 0 :(得分:2)
连接超时错误表明无法通过网络进行设置访问数据库服务器,其方式不会立即返回错误。根据我的经验,最好的方法是分别对连接的两侧进行故障排除。这意味着首先从psql命令行测试连接的服务器端,然后在解析后测试django端。
我在这里假设你可以在服务器上安装psql。
立即检查: