2011-10-11 194 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)。并提出建议,如果可以改进你的答案。请不要亲自采取。基本上,我正在帮助你改进你的答案。 –