2011-10-11 193 views
1

最近的問題是下面列出的「第三個錯誤」。連接到mysql數據庫失敗

我的工作在java中需要連接到數據庫的應用程序。以下是我用來嘗試連接到數據庫的代碼。這個端口是3306,我在網絡上的家中安裝了一臺機器上的數據庫。對於IP地址,我只是使用我的外部IP地址的世界。用戶名和密碼被替換爲我的保護。在我的/etc/mysql/my.cnf中,「bind_address」被註釋掉了。

我已經試過幾件事情,似乎無法得到這個工作。這是我第一次使用JDBC ...感謝您的幫助!如果您需要更多信息,請與我們聯繫。

 Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     System.out.println("before connection"); 
     connect = DriverManager.getConnection("jdbc:mysql://ip-address/mjla_db", "username", "password"); 
     System.out.println("connection established"); 

這裏是我不斷收到錯誤:

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at school.cs321.mjla.MJLA.main(MJLA.java:30) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294) 
    ... 15 more 

第二個錯誤 更改IP地址的服務器的內部IP地址後。

java.sql.SQLException: null, message from server: "Host '192.168.1.102' is not allowed to connect to this MySQL server" 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1128) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at school.cs321.mjla.MJLA.main(MJLA.java:30) 

第三個錯誤 當試圖與外部IP地址訪問外部網絡上的數據庫,我得到我最初有同樣的錯誤。

我使用了我使用的應用程序來驗證數據庫的用戶名的主機的「%」通配符。

+2

檢查任何防火牆S,檢查,以確保*外部* IP實際上是內部使用。 –

+0

使用本地主機。我不認爲MySQL的默認配置允許外部連接。我懷疑,如果你使用外部IP,有一個往返(或者你的電腦的實例不能從localhost這樣找到)。 – MarianP

+0

@DaveNewton在爲我的服務器使用我的內部IP地址後,我得到了OP中列出的第二個錯誤。 – prolink007

回答

1

@戴夫牛頓:我正在做一個我的防火牆仍然有打開的端口爲MySQL,因爲我剛剛經歷上一個項目,我做同樣的事情了工作的假設。但是,幾個月前我必須關閉它。我幾分鐘前檢查過,它被禁用。所以,我啓用,現在工作正常。不知道爲什麼它已被關閉......

1

你肯定在getConnection的IP地址是正確的?你可以試試

telnet youserver 3306 

看看是否有連接問題?服務器上是否有防火牆?

+0

在我將IP地址更改爲我的服務器的內部地址後,我在原始帖子中收到以下「第二個錯誤」。有什麼想法? – prolink007

+0

當上面執行telnet命令時,我得到「不允許連接到由外部主機關閉的這個mysql serverconnection」。 – prolink007

+0

我想通了,它不喜歡我使用MD5的密碼...任何方式來解決這個問題,所以我可以使用MD5而不是「密碼」? – prolink007

0
 Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student", "root", "root"); 

只是嘗試

+0

您可能需要添加一些描述到您的答案,以幫助其他人瞭解它。 –

+0

你怎麼了? – hisenyuan

+0

您正在以新用戶的身份回答問題。我可以在[評論隊列]中看到你的答案(https://meta.stackexchange.com/questions/161390/what-are-the-review-queues-and-how-do-they-work)。並提出建議,如果可以改進你的答案。請不要親自採取。基本上,我正在幫助你改進你的答案。 –