【问题标题】:Can't access mysql database (running on AWS instance) from my java application无法从我的 java 应用程序访问 mysql 数据库(在 AWS 实例上运行)
【发布时间】:2020-12-09 10:54:56
【问题描述】:

我有一个在 AWS-EC2 Ubuntu 实例上运行的 xampp 服务器,并且我有一个名为“androiddb”的数据库。我可以通过在导航器中写入http://public_ip/phpmyadmin 并使用“root”用户且无密码输入来访问数据库。

另一方面,我有一个需要与该数据库连接的 Java 应用程序,我的代码中有以下行:

con = DriverManager.getConnection("jdbc:mysql://public_ip/androiddb",
                                  "root", "");

当我运行我的应用程序时,我收到以下错误:

Error: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2569)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at Presentacion.Presentacion$2.mouseClicked(Presentacion.java:125)
at java.awt.Component.processMouseEvent(Component.java:6519)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:706)
at java.awt.EventQueue$3.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:720)
at java.awt.EventQueue$4.run(EventQueue.java:718)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


** END NESTED EXCEPTION **



Last packet sent to the server was 19 ms ago.

我还查找了运行 mysql 的端口并使用了代码:

SHOW VARIABLES
WHERE Variable_name IN (
'hostname',
'port')

我在 phpmyadmin 的 SQL 部分编写了这段代码,我得到以下输出:

Variable_name   Value
hostname        ip-172-31-23-224
port            0

不知道0端口是什么意思,应该是3306(mysql默认端口)...

无论如何,我不知道是我的 xampp 配置有问题,还是 AWS 的问题或其他问题。

有人可以帮我解决这个问题吗?非常感谢。

【问题讨论】:

    标签: mysql amazon-ec2 xampp


    【解决方案1】:

    您应该确保您的 AWS 安全组在 3306 端口(或您配置的任何端口)上打开,以便他们可以访问数据库。

    您可以尝试通过 SSH 连接到机器来解决问题,您可以在本地连接吗?如果是,请查看您的安全组并打开端口。如果您无法在本地连接,则说明数据库已关闭,您需要正确诊断和配置数据库。

    但连接被拒绝很可能是安全组中未打开的端口。

    只是补充一下解决他的问题的方法:

    1. 他检查了他的安全组并打开了正确的端口
    2. 在本地检查,发现 mySQL 没有监听任何端口
    3. netstat -tlnp 查看本地运行的 SQL
    4. 检查 my.ini 文件以查看 mysql 已配置为侦听端口
    5. 发现不是并将其重新配置为收听

    【讨论】:

    • 我可以通过 SSH 访问机器。在我的安全组中,我从任何 IP 地址打开了 HTTP、SSH、MySQL/Aurora 和 ICMP 端口。你知道如何检查 mysql 运行在哪个端口上吗?我在我的问题中尝试了那段代码,但我得到了端口 0。谢谢你的回答!
    • 您可以通过netstat -tlnp 查看它正在侦听的端口。或者你可以安装 nmap 并使用 nmap localhost
    • 我只能看到 21、22、80 和 443 端口,所以好像 mysql 没有在监听。我已经重新启动了mysql,但仍然没有出现它的端口。
    • 检查你的 xampp mysql my.ini。出于安全原因,新的 mysql 版本将绑定到 127.0.0.1 而不是监听所有绑定 0.0.0.0
    • 在哪里可以找到该文件?我正在使用 ubuntu
    【解决方案2】:

    这可能有助于一些使用 phpMyAdmin 和 AWS 以及 Amazon 的关系数据库服务 (RDS) 的人知道除非 RDS 端点被编辑到 config.inc 中的“localhost”或“127.0.0.1”位置,否则 phpMyAdmin 将无法工作.php 文件。 (这是一个必要但不充分的修复——您可能需要做其他事情......)

    概括一下,如果您使用的是 foo 并且它有一个 config 文件,并且您正在寻找连接到在 RDS 下实例化的数据库,则需要该端点作为 host 条目。

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 2019-04-13
      • 2020-03-14
      • 2019-09-26
      • 2017-05-22
      • 2015-11-10
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多