title: Cannot connect to MySQL with JDBC - Connection Timeout - Ubuntu 9.04
body: <p>I am running Ubuntu and am ultimately trying to connect Tomcat to my MySQL database using JDBC. </p>
  
  <p><strong>It has worked previously</strong> but after a reboot the instance now fails to connect.</p>
  
  <ul>
  <li>Both Tomcat 6 and MySQL 5.0.75 are on the same machine</li>
  <li>Connection string: jdbc:mysql:///localhost:3306</li>
  <li>I can connect to MySQL on the command line using the <code>mysql</code> command</li>
  <li>The my.cnf file is pretty standard (Available on request) has bind address: 127.0.0.1 </li>
  <li>I cannot Telnet to the MySQL port despite netstat saying MySQL is listening</li>
  <li>I have one IpTables rule to forward 80 -> 8080 and no firewall I'm aware of.</li>
  </ul>
  
  <p>I'm pretty new to this and I'm not sure what else to test. I don't know whether I should be looking in etc/interfaces and if I did what to look for. It's weird because it used to work but after a reboot it's down so I must have changed something.... :).</p>
  
  <p>I realise a timeout indicates the server is not responding and I assume it's because the request isn't actually getting through. I installed MySQL via apt-get and Tomcat manually.</p>
  
  <p><strong>MySqld processes</strong></p>
  
  <pre><code>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
  </code></pre>
  
  <p><strong>Netstat</strong></p>
  
  <pre><code>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
  </code></pre>
  
  <p><strong>Toy Connection Class</strong></p>
  
  <pre><code>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();
      }
    }
  }
  </code></pre>
  
  <p><strong>Toy Connection Class Output</strong></p>
  
  <p>Note: This is the same error I get from Tomcat.</p>
  
  <pre><code>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.&lt;init&gt;(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
  </code></pre>
  
  <p><strong>Telnet Output</strong></p>
  
  <pre><code>root@88:~/TestConnect# telnet localhost 3306
  Trying 127.0.0.1...
  telnet: Unable to connect to remote host: Connection timed out
  </code></pre>