无法通过TCP本地连接到MySQL – 连接超时 – Ubuntu 9.04

我正在运行Ubuntu,并最终尝试使用JDBC将Tomcat连接到我的MySQL数据库。

它以前工作过,但在重新启动后,实例现在无法连接。

  • Tomcat 6和MySQL 5.0.75都在同一台机器上
  • 连接string:jdbc:mysql:/// localhost:3306
  • 我可以使用mysql命令在命令行连接到MySQL
  • my.cnf文件是非常标准的(根据请求可用)具有绑定地址:127.0.0.1
  • 尽pipenetstat说MySQL正在监听,但是我不能Telnet到MySQL端口
  • 我有一个IpTables规则转发80 – > 8080,没有我知道的防火墙。

我对此很新,我不知道还有什么要testing。 我不知道我是否应该在etc / interfaces中查找,如果我做了什么寻找。 这很奇怪,因为它曾经工作,但在重新启动后,它已经closures了,所以我必须改变一些东西…. :)。

我意识到超时表示服务器没有响应,我认为这是因为请求实际上并没有通过。 我手动通过apt-get和Tomcat安装了MySQL。

MySqld进程

 root@88:/var/log/mysql# ps -ef | grep mysqld root 21753 1 0 May27 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe mysql 21792 21753 0 May27 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock root 21793 21753 0 May27 ? 00:00:00 logger -p daemon.err -t mysqld_safe -i -t mysqld root 21888 13676 0 11:23 pts/1 00:00:00 grep mysqld 

用netstat

 root@88:/var/log/mysql# netstat -lnp | grep mysql tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 21792/mysqld unix 2 [ ACC ] STREAM LISTENING 1926205077 21792/mysqld /var/run/mysqld/mysqld.sock 

玩具连接类

 root@88:~# cat TestConnect/TestConnection.java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TestConnection { public static void main(String args[]) throws Exception { Connection con = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); System.out.println("Got driver"); con = DriverManager.getConnection( "jdbc:mysql:///localhost:3306", "uname", "pass"); System.out.println("Got connection"); if(!con.isClosed()) System.out.println("Successfully connected to " + "MySQL server using TCP/IP..."); } finally { if(con != null) con.close(); } } } 

玩具连接类输出

注意:这是我从Tomcat获得的同样的错误。

 root@88:~/TestConnect# java -cp mysql-connector-java-5.1.12-bin.jar:. TestConnection Got driver Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 1 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122) at TestConnection.main(TestConnection.java:14) Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 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(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181) ... 12 more Caused by: java.net.ConnectException: Connection timed out at java.net.PlainSocketImpl.socketConnect(Native Method) ... 13 more 

Telnet输出

 root@88:~/TestConnect# telnet localhost 3306 Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection timed out 

iptables的

注:我有一个规则设置为NAT,但我已经删除它,问题依然存在。

 root@88:~# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination root@88:~# iptables -t nat -nL Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

用来设置iptables的命令

 iptables -t nat -I PREROUTING --src 0/0 --dst 88.198.31.14 -p tcp --dport 80 -j REDIRECT --to-ports 8080 

我已经删除了这个NAT的规则,所以这个命令的副作用是不相关的。

更新 – 我不能ping本地主机

ip a

 root@88:~/TestConnect# ip a 1: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/void inet 127.0.0.1/32 scope host venet0 inet 88.198.31.14/32 scope global venet0:0 

ip r

 root@88:~/TestConnect# ip r 192.0.2.1 dev venet0 scope link default via 192.0.2.1 dev venet0 

ip规则

 root@88:~/TestConnect# ip rule 0: from all lookup local 32766: from all lookup main 32767: from all lookup default 

ping -c 1 localhost

 root@88:~/TestConnect# ping -c 1 localhost PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. --- localhost.localdomain ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms 

猫/ etc / hosts

 root@88:~/TestConnect# cat /etc/hosts 127.0.0.1 localhost.localdomain localhost # Auto-generated hostname. Please do not remove this comment. 88.198.31.14 88.198.31.14 88 88 

使用ifconfig

 root@88:/var/log/mysql# ifconfig venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:127.0.0.1 PtP:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:144432 errors:0 dropped:0 overruns:0 frame:0 TX packets:153825 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:37896766 (37.8 MB) TX bytes:28722595 (28.7 MB) venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:88.198.31.14 PtP:88.198.31.14 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 

感谢pQd,我认为我们已经缩小了错误,我需要去了解这一切意味着什么,以及为什么localhost不能ping通。

你是否确定没有阻止tcp / 3306stream量的iptables规则? 尝试此作为临时解决方法:

 iptables -I INPUT -p tcp --dport 3306 -i lo -j ACCEPT iptables -A OUTPUT -p tcp --sport 3306 -o lo -j ACCEPT 

或者也许你的NAT规则比你期望的要多一点?

好的 – 你的环回不仅是closures的,而且没有绑定127.0.0.1。 添加到/ etc / network / interfaces:

 auto lo iface lo inet loopback 

和..为什么你把它绑定到vnet0? 从那里删除它。

快速一次性cmd行修复:

 ip ad 127.0.0.1/32 dev venet0 ip aa 127.0.0.1/32 dev lo ip link set dev lo up