这次的作业中要用数据库,所以弄这个东西,一直都觉得数据库很麻烦,这次真是令我头大了。不过问题到不是出在数据库上,而是出在 Arch 对安全的设置上。
问题出在无论怎么配置 mysql,无论怎样修改 jdbc 的测试程序都没有办法连接到 mysql 服务器。有以下几种情况:
本机只能使用 mysql -h localhost -u … -p 来登录,如果使用 ip 地址或者在 /etc/hosts 中的其他主机名则出现如下信息
ERROR 2013 (HY000): Lost connection to MySQL server during query
在其他机器上访问时也出现这样信息。
使用 jdbc 连接时出现如下信息:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.io.EOFException STACKTRACE: java.io.EOFException at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913) at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:501) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:971) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2644) at com.mysql.jdbc.Connection.(Connection.java:1531) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:171) at SimpleConnection.main(SimpleConnection.java:22) ** END NESTED EXCEPTION **
搞了好久要崩溃的时候机房其他的同学成功的用 jdbc 连接 mysql 服务器了,他用的是 Ubuntu,在 Ubuntu 的 Wiki 里看到要把 /etc/my.cnf 里的”bind 127.0.0.1” 去掉以使 mysql 可以通过网络访问。但是我的 my.cnf 里面默认没有这个设置。于是 Google 了 Arch 的 Wiki,找到了这篇文章。终于明白问题处在 Arch 下 /etc/hosts.deny 默认为 “ALL: ALL: DENY”,这样就阻止了通过 TCP/IP 对 mysql 服务器的访问。我在 /etc/hosts.allow 中加了 “mysqld: ALL: ALLOW” 以后再连接就成功了。
--转自