我有一个运行在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')
我在SQL部分的phpmyadmin中写了这段代码,得到以下输出:
Variable_name Value
hostname ip-172-31-23-224
port 0
我不知道端口0是什么意思,它应该是3306(默认的mysql端口)......
无论如何,我不知道我是否在xampp配置上做错了,或者是否是AWS或其他任何问题。
有人可以帮我吗?非常感谢你。
答案 0 :(得分:1)
您应确保AWS的安全组在3306端口(或您配置的任何内容)上打开,以便他们可以访问数据库。
你可以通过尝试SSH进入机器来解决问题,你可以在本地连接吗?如果是,请查看您的安全组并打开端口。如果您无法在本地连接,则数据库已关闭,您需要正确诊断和配置数据库。
但拒绝连接很可能是安全组中没有打开的端口。
只是添加解决了他的问题:
nrowspecies4(iris, NA)
检查以查看本地运行的SQL 答案 1 :(得分:0)
这可能会帮助一些使用phpMyAdmin和AWS以及亚马逊的关系数据库服务(RDS)的人了解phpMyAdmin将无法工作,除非将RDS终结点编辑到config.inc中的“ localhost”或“ 127.0.0.1”位置.php文件。 (这是必要但不足够的修复程序,您可能需要做其他事情...)
概括一下,如果您正在使用 foo 并且它具有一个 config 文件,并且您希望连接到RDS下实例化的数据库,则需要该端点作为 host 条目。