首页 > 解决方案 > 如何从我的桌面访问 AWS RDS 上的 MySQL 数据库?

问题描述

我是一名 Java 开发人员,我编写了一个纯 Java 应用程序,该应用程序可以从一个文本文件创建一个 MySQL 数据库。我正在使用 MySQL 版本 8.0.19 和 Java MySQL 连接器 5.1.48。

代码相当简单。我创建了三个表并将行插入到表中。在我的本地 MySQL 上,我可以使用 MySQL Workbench 查看这三个表及其内容。

我使用以下主机访问我的本地 MySQL 数据库:

jdbc:mysql://localhost:3306/bible?useSSL=false

我的用户 ID 是“root”。

当我尝试使用以下主机连接到 AWS RDS 上的 MySQL 数据库时,出现连接被拒绝错误。

jdbc:mysql://bible-database.caaitaoyrsgq.us-east-1.rds.amazonaws.com:3306

为了保护自己,我稍微更改了 URL。

当我尝试访问我的 AWS RDS MySQL 数据库时,我收到以下错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:335)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at com.ggl.bible.database.sql.SQL.connect(SQL.java:31)
    at com.ggl.bible.database.BuildDatabase.processBible(BuildDatabase.java:30)
    at com.ggl.bible.database.BuildDatabase.main(BuildDatabase.java:19)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:493)
    at java.base/sun.nio.ch.Net.connect(Net.java:482)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:339)
    at java.base/java.net.Socket.connect(Socket.java:603)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)
    ... 18 more
Exception in thread "main" java.lang.NullPointerException
    at com.ggl.bible.database.sql.SQL.createBibleTables(SQL.java:99)
    at com.ggl.bible.database.BuildDatabase.processBible(BuildDatabase.java:31)
    at com.ggl.bible.database.BuildDatabase.main(BuildDatabase.java:19)

我知道我有连接问题。

我在网上查看了一些指南,例如Connecting to a DB Instance Running the MySQL Database Engine,但我不明白作者在告诉我什么。

有没有像我这样简单的头脑的指南,可以逐步指导我如何连接?当我说简单时,我的意思是:

  1. 转到网页...
  2. 左键单击显示...的链接
  3. 在...旁边的框中键入此内容

感谢我可能得到的任何帮助。

标签: mysqlamazon-web-services

解决方案


您需要将数据库公开到 Internet:

1 步骤:在您的 vpc 上启用互联网

2 步:将您的数据库子网路由到 internetgateway

第 3 步:在您的 rds 实例选项上,选中“公共可访问性”,保存并重新启动实例

并且不要忘记创建规则以允许来自安全组中您的 ip 的流量。


推荐阅读