How to Disable Ping-based Connection Test: Likely Cause of com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Posted by: Matt M
Date: June 28, 2012 09:33AM

Summary: Can someone tell me how to disable the ping-based connection test initiated by the JDBC driver?

Details:
I am able to connect to an off-site MySQL database via the mysql command-line client, which does not use the JDBC driver, as per the following:

mysql --port 3310 --host 142.150.191.66 --database DBNAME --user USERNAME --password PASSWORD

However, when I use the JDBC driver, the "Communications link failure" exception is generated, which appears to be due to ping discards at the DB server.

Here is the Java stacktrace from the JDBC connection attempt.

Failed to connect to database URL [jdbc:mysql://142.150.191.66/DBNAME]

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:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
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:348)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2391)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2428)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2213)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:797)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at net.sourceforge.schemaspy.SchemaAnalyzer.getConnection(SchemaAnalyzer.java:582)
at net.sourceforge.schemaspy.SchemaAnalyzer.analyze(SchemaAnalyzer.java:157)
at net.sourceforge.schemaspy.Main.main(Main.java:42)
Caused by: java.net.NoRouteToHostException: No route to host
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:241)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:298)
... 15 more

Prior to running the Java program which yielded the stacktrace above, I invoked tcpdump. You'll notice below that only two packets are communicated between the client and the server, both of which are ICMP (ping), and the server responds with a prohibited message.

sudo tcpdump -ni eth0 -s0 host 142.150.191.66

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
11:13:23.499968 IP 205.189.23.105.47215 > 142.150.191.66.3306: Flags , seq 2752236051, win 14600, options [mss 1460,sackOK,TS val 67110671 ecr 0,nop,wscale 7], length 0
11:13:23.509964 IP 142.150.191.66 > 205.189.23.105: ICMP host 142.150.191.66 unreachable - admin prohibited, length 68

Given that the mysql command-line connection attempt was successful, I assume that I can make the Java program work by disabling the ping-based connection attempt. So, how do I disable the ping test?

Options: ReplyQuote


Subject
Written By
Posted
How to Disable Ping-based Connection Test: Likely Cause of com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
June 28, 2012 09:33AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.