为什么我无法远程访问 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个子网来完成,花了我几个小时的时间来解决这个问题