Python 无法远程连接到托管在amazon ec2实例上的postgresql数据库
我的ec2实例上有一个postgresql数据库。我正在尝试从本地计算机使用Python连接到它Python 无法远程连接到托管在amazon ec2实例上的postgresql数据库,python,postgresql,amazon-web-services,amazon-ec2,Python,Postgresql,Amazon Web Services,Amazon Ec2,我的ec2实例上有一个postgresql数据库。我正在尝试从本地计算机使用Python连接到它 import psycopg2 try: connection = psycopg2.connect(user="postgres", password="<password>", host="ec2-***-*
import psycopg2
try:
connection = psycopg2.connect(user="postgres",
password="<password>",
host="ec2-***-***-***-***.***-***-1.compute.amazonaws.com",
port="5432",
database="<db_name>")
cursor = connection.cursor()
cursor.execute(f"SELECT * FROM <tablename>;")
record = cursor.fetchall()
print(record, "\n")
except (Exception, psycopg2.Error) as error:
print("Error while connecting to PostgreSQL", error)
finally:
try:
if connection:
cursor.close()
connection.close()
print("PostgreSQL connection is closed")
except:
print("no work")
我的pg_hba.conf文件如下所示
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
我的postgresql.conf文件如下所示
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - 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)
我有一个ec2安全组:
我做错了什么?我是一个完全的新手,任何帮助感谢 连接超时通常表示您无法访问主机或被防火墙阻止 首先尝试从您的计算机ping主机。如果ping正常,那么您和EC2实例之间可能有防火墙。我觉得你的EC2安全截图很好 您是否在防火墙后面,防火墙可能会阻止从本地计算机到Internet的出站会话
通过聊天进行故障排除后,我们发现允许TCP/5432入站的AWS安全组未分配给EC2实例。连接超时通常表示您无法访问主机或被防火墙阻止 首先尝试从您的计算机ping主机。如果ping正常,那么您和EC2实例之间可能有防火墙。我觉得你的EC2安全截图很好 您是否在防火墙后面,防火墙可能会阻止从本地计算机到Internet的出站会话
通过聊天进行故障排除后,我们发现允许TCP/5432入站的AWS安全组未分配给EC2实例。可能有许多原因,因此我将从一个受信任的DB客户端(如DBeaver)开始,并尝试从本地计算机建立连接,以排除python问题 根据您的设置,您可能有第二个传入的防火墙iptables等在ec2实例中运行,需要配置或禁用 登录ec2控制台,查看是否可以连接到服务器。在ec2内加载类似pgsql的db客户端,并尝试连接到以localhost:5432为目标的服务器
您可能需要更改pg_hba.conf,以便服务器生成日志文件,但这可以告诉您是否正在访问服务器,以及问题是什么。有许多可能的原因,因此我将从一个受信任的数据库客户端(如DBeaver)开始,尝试从本地计算机建立连接,以排除python问题 根据您的设置,您可能有第二个传入的防火墙iptables等在ec2实例中运行,需要配置或禁用 登录ec2控制台,查看是否可以连接到服务器。在ec2内加载类似pgsql的db客户端,并尝试连接到以localhost:5432为目标的服务器
您可能需要更改pg_hba.conf,以便服务器生成日志文件,但这可以告诉您是否正在访问服务器,以及问题所在。我可以从ec2实例访问数据库,但不能远程访问。我尝试使用pgAdmin,但它也说超时已过期。我将尝试使用日志文件,谢谢。我可以从ec2实例访问数据库,但不能远程访问。我尝试使用pgAdmin,但它也说超时已过期。我将尝试使用日志文件,谢谢。我尝试ping它ping ec2-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***?在对数据库连接进行故障排除之前,请确定是否可以访问服务器。我可以使用PuTTY和ec2密钥对通过SSH连接到实例。Ok。你用的是同一个DNA名字吗?它是否解析为PuTTY会话使用的相同IP地址?如果是这样,那么您是在控制您的本地网络,还是在工作?我使用的是相同的DNS,但没有ec2-user@. 我如何检查IP?这是我的家庭网络。我尝试ping它ping ec2-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***-***?在对数据库连接进行故障排除之前,请确定是否可以访问服务器。我可以使用PuTTY和ec2密钥对通过SSH连接到实例。Ok。你用的是同一个DNA名字吗?它是否解析为PuTTY会话使用的相同IP地址?如果是这样,那么您是在控制您的本地网络,还是在工作?我使用的是相同的DNS,但没有ec2-user@. 我如何检查IP?这是我的家庭网络。
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - 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)