2016-04-15 77 views
0

我有一個在AWS-EC2 Ubuntu實例上運行的xampp服務器,我有一個名爲「androiddb」的數據庫。我可以通過在導航器中輸入http://public_ip/phpmyadmin並使用「root」用戶輸入並且沒有密碼來訪問數據庫。無法從我的java應用程序訪問mysql數據庫(在AWS實例上運行)

在另一邊我有需要與數據庫連接的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或其他問題。

有人可以幫助我嗎?非常感謝你。

回答

1

您應該確保您的AWS安全組在3306端口(或您配置的任何端口)上打開,以便他們可以訪問數據庫。

通過嘗試將SSH插入機器可能會發生故障,您可以在本地連接嗎?如果是,那麼看看你的安全組並打開端口。如果您無法在本地連接數據庫,則需要正確診斷和配置數據庫。

但是拒絕的連接很可能是安全組中未打開的端口。

我想補充什麼解決問題了:

  1. 他看了安全組,打開了正確的端口
  2. 局部檢查,查看MySQL不聽任何端口上
  3. netstat -tlnp檢查以查看本地運行的SQL
  4. 檢查my.ini文件以查看mysql已配置爲在端口上偵聽
  5. 發現它並未將其重新配置爲偵聽
+0

我可以通過SSH訪問機器。在我的安全組中,我從任何IP地址打開了HTTP,SSH,MySQL/Aurora和ICMP端口。你知道我該如何檢查運行mysql的端口?我在我的問題中嘗試了這段代碼,但我得到了端口0.謝謝你的回答! – Cayetano

+0

你可以通過'netstat -tlnp'來查看它正在監聽的端口。或者你可以安裝nmap並使用'nmap localhost' –

+0

我只能看到21,22,80和443端口,所以它看起來像mysql不聽。我重新啓動了mysql,但仍然沒有顯示它的端口。 – Cayetano

相關問題