为什么我无法远程访问 Amazon RDS 上的 MySQL?
Why I can not get remote access to MySQL on Amazon RDS?
因此,我已经为我的 RDS 实例创建了一个新的安全组 rds_access
,并将 Inbound-> >Source 参数设置为 0.0.0.0/0
,并在 'Security groups' 中更新了实例] RDS 仪表板上的部分我有:rds_access (sg-xxx)( active )
在我的连接的 MySQL Workbench "Edit" 部分,在选项卡 "Remote Manager" 中,我已将 "Native Windows remote management" 单选按钮的值设置为活动和"Hostname" 参数到 0.0.0.0
.
实例与数据库连接成功。
我在 pythonanywhere 上的 Web 应用程序 运行 中仍然出现此错误:
OperationalError: (2003, "Can't connect to MySQL server on 'bachelor-diploma-db.cx0stetemb8k.eu-central-1.rds.amazonaws.com' ([Errno 111] Connection refused))
在将我的应用程序上传到 pythonanywhere 之前,我已经在 localhost
上对其进行了测试,一切正常。我还重新启动了 RDS 实例和 MySQL 数据库。
请告诉我我做错了什么以及如何解决这个问题?
更新:
为了连接到 MySQL 服务器,我使用 flask-mysql
。这是代码片段:
from flaskext.mysql import MySQL
api = Api(app)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'password'
app.config['MYSQL_DATABASE_DB'] = 'bachelor_diploma_db'
app.config['MYSQL_DATABASE_HOST'] = 'bachelor-diploma-db.cx0stetemb8k.eu-central-1.rds.amazonaws.com'
mysql.init_app(app)
然后在我使用的方法中:
conn = mysql.connect()
您需要连接到您的 RDS 实例的实际公开可见端点。 0.0.0.0/0
只是一个占位符,表示任何 IP 地址。从 RDS 控制台中,找到详细信息。在 "Connect" 下,您应该看到如下所示的端点:
mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
从命令行你的连接字符串看起来像这样:
mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
-u ec2-user -pPASSWORD yourdb
如果上述方法未能解决问题,那么您可能还需要确保端口 3306(由 MySQL 使用)不在防火墙后面。
有关详细信息,请参阅 AWS documentation。
可能是因为您使用的是免费 PythonAnywhere 帐户,而免费帐户只能通过 http(s) 连接到特定的网站白名单。
RDS实例所在的子网运行也需要是public,这可以通过在rds中创建一个子网组并向其中添加public个子网来完成,花了我几个小时的时间来解决这个问题
因此,我已经为我的 RDS 实例创建了一个新的安全组 rds_access
,并将 Inbound-> >Source 参数设置为 0.0.0.0/0
,并在 'Security groups' 中更新了实例] RDS 仪表板上的部分我有:rds_access (sg-xxx)( active )
在我的连接的 MySQL Workbench "Edit" 部分,在选项卡 "Remote Manager" 中,我已将 "Native Windows remote management" 单选按钮的值设置为活动和"Hostname" 参数到 0.0.0.0
.
实例与数据库连接成功。
我在 pythonanywhere 上的 Web 应用程序 运行 中仍然出现此错误:
OperationalError: (2003, "Can't connect to MySQL server on 'bachelor-diploma-db.cx0stetemb8k.eu-central-1.rds.amazonaws.com' ([Errno 111] Connection refused))
在将我的应用程序上传到 pythonanywhere 之前,我已经在 localhost
上对其进行了测试,一切正常。我还重新启动了 RDS 实例和 MySQL 数据库。
请告诉我我做错了什么以及如何解决这个问题?
更新:
为了连接到 MySQL 服务器,我使用 flask-mysql
。这是代码片段:
from flaskext.mysql import MySQL
api = Api(app)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'password'
app.config['MYSQL_DATABASE_DB'] = 'bachelor_diploma_db'
app.config['MYSQL_DATABASE_HOST'] = 'bachelor-diploma-db.cx0stetemb8k.eu-central-1.rds.amazonaws.com'
mysql.init_app(app)
然后在我使用的方法中:
conn = mysql.connect()
您需要连接到您的 RDS 实例的实际公开可见端点。 0.0.0.0/0
只是一个占位符,表示任何 IP 地址。从 RDS 控制台中,找到详细信息。在 "Connect" 下,您应该看到如下所示的端点:
mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
从命令行你的连接字符串看起来像这样:
mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
-u ec2-user -pPASSWORD yourdb
如果上述方法未能解决问题,那么您可能还需要确保端口 3306(由 MySQL 使用)不在防火墙后面。
有关详细信息,请参阅 AWS documentation。
可能是因为您使用的是免费 PythonAnywhere 帐户,而免费帐户只能通过 http(s) 连接到特定的网站白名单。
RDS实例所在的子网运行也需要是public,这可以通过在rds中创建一个子网组并向其中添加public个子网来完成,花了我几个小时的时间来解决这个问题