非常简单的东西,在这里 - 我对mysql不够好,无法理解它对我的要求.
我有一个简短的java测试用例,在我的开发系统上打开mysql上的连接但是,当我尝试将它放到我的服务器上时,它失败了.
任何帮助追踪这一点将是非常感谢.
谢谢!
测试代码
import java.util.*; import java.sql.*; public class mysqltest { static public void getDBConnection() { System.out.println ("Start of getDBConnection."); Connection conn = null; String url = "jdbc:mysql://localhost:3306/"; String dbName = "magnets_development"; String driver = "com.mysql.jdbc.Driver"; String userName = "*****"; // blanked for publication String password = "*****"; try { Class.forName (driver).newInstance(); System.out.println ("driver.newInstance gotten."); conn = DriverManager.getConnection (url+dbName, userName, password); System.out.println ("Connection gotten: " + conn + "."); Statement sql = conn.createStatement (); ResultSet results = sql.executeQuery ("use " + dbName + ";"); } catch (Exception ex) { System.out.println ("*** Got exception."); ex.printStackTrace(); } } public static void main(String args[]) { System.out.println ("Main started."); mysqltest.getDBConnection(); } }
开发系统输出 (预期/正确响应)
olie$ java mysqltest Main started. Start of getDBConnection. Properties set. driver.newInstance gotten. Connection gotten: com.mysql.jdbc.Connection@c980c9. olie$
服务器输出 (错误我正在尝试追踪)(删除了一些空行.)
mini$ java mysqltest Main started. Start of getDBConnection. Properties set. driver.newInstance gotten. *** Got exception. com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.ConnectException MESSAGE: Connection refused STACKTRACE: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) at java.net.Socket.connect(Socket.java:520) at java.net.Socket.connect(Socket.java:470) at java.net.Socket.(Socket.java:367) at java.net.Socket. (Socket.java:209) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at com.mysql.jdbc.MysqlIO. (MysqlIO.java:271) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) at com.mysql.jdbc.Connection. (Connection.java:1555) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:140) at mysqltest.getDBConnection(mysqltest.java:34) at mysqltest.main(mysqltest.java:49) ** END NESTED EXCEPTION ** Last packet sent to the server was 3 ms ago. at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847) at com.mysql.jdbc.Connection. (Connection.java:1555) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:140) at mysqltest.getDBConnection(mysqltest.java:34) at mysqltest.main(mysqltest.java:49) mini$
小智.. 16
关于这个主题只是一个有用的说明.我花了至少30分钟试图调试相同的错误,这是我的错误.
在我的MySQL配置文件中,我碰巧将BIND ADDR设置为机器的IP.我没有把它设置为127.0.0.1
,或0.0.0.0
.所以MySQL会接受来自外部的JDBC连接,但不接受内部的JDBC连接.我只是在从本地机器连接时才收到Connection Refused.
更改该地址以0.0.0.0
允许它侦听对任何IP的请求.这允许内部和外部IP.
希望这能帮助那些犯了同样愚蠢错误的人.检查上面的评论netstat -an | grep 3306
.
关于这个主题只是一个有用的说明.我花了至少30分钟试图调试相同的错误,这是我的错误.
在我的MySQL配置文件中,我碰巧将BIND ADDR设置为机器的IP.我没有把它设置为127.0.0.1
,或0.0.0.0
.所以MySQL会接受来自外部的JDBC连接,但不接受内部的JDBC连接.我只是在从本地机器连接时才收到Connection Refused.
更改该地址以0.0.0.0
允许它侦听对任何IP的请求.这允许内部和外部IP.
希望这能帮助那些犯了同样愚蠢错误的人.检查上面的评论netstat -an | grep 3306
.
呸! 我道歉 - 我刚刚设置了"仅限本地连接".我对Java应用程序在本地运行这一事实感到困惑(因此它似乎是一个"本地连接",但因为它是通过TCP连接的,所以它是一个"远程"连接,即使它起源于localhost.
我最终将学习如何管理这些东西.与此同时,我希望其他人可以从我的错误中吸取教训.
感谢所有花时间帮助我的人.我已经允许"远程"连接,但我的所有用户帐户都只是'用户名'@'localhost'(即没有'用户名'@'%',这将允许任何机器连接.)希望,至少,我得到了那个部分.
再次感谢!