CommunicationsException when connecting from GAE to MySQL Instance

0 views
Skip to first unread message

Yster via StackOverflow

unread,
Jan 13, 2016, 3:46:07 AM1/13/16
to google-appengin...@googlegroups.com

I'm trying to connect from inside GAE (Google App Engine) to my MySQL DB instance, also on GAE. It works fine from the outside.

After a week of searching, I cannot seem to find the problem.

Without the MySQL connection code, the servlet works fine without errors on GAE.

Here is the simple servlet:

public class DBServlet extends HttpServlet {
        @Override
        public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            try {
                Class.forName("com.mysql.jdbc.GoogleDriver");
                Connection conn = DriverManager.getConnection("jdbc:google:mysql://cloud-2280:mysql/account", "root", "");
                //Connection conn = DriverManager.getConnection("jdbc:google:mysql://cloud-1180:mysql/account?user=root");
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(DBServlet.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(DBServlet.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                        conn.close();
                    } catch (SQLException ex) {
                        Logger.getLogger(DBServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

When tying this on GAE, I get this in the GAE logs:

com.conversedynamics.NewServlet doPost: null 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:46) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:668) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1078) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2417) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2450) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2235) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:818) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46) 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:46) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404) at com.mysql.jdbc.GoogleNonRegisteringDriver$JdbcWrapper.getInstance(GoogleNonRegisteringDriver.java:282) at com.mysql.jdbc.GoogleNonRegisteringDriver.connect(GoogleNonRegisteringDriver.java:252) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:233) at com.conversedynamics.NewServlet.doPost(NewServlet.java:90) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444) at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) at java.lang.Thread.run(Thread.java:745) Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3039) at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:592)

And here is the appengine-web.xml

<application>cloud-2280</application>
    <version>1</version>
    <!--    <ssl-enabled>false</ssl-enabled>
    <sessions-enabled>true</sessions-enabled>
    -->
    <threadsafe>false</threadsafe>
    <use-google-connector-j>true</use-google-connector-j>
</appengine-web-app>

Info:

  • appID: cloud-2280
  • instanceID: mysql
  • DBname: account
  • password: mypassword


Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/34694800/communicationsexception-when-connecting-from-gae-to-mysql-instance

koma via StackOverflow

unread,
Jan 13, 2016, 5:21:05 AM1/13/16
to google-appengin...@googlegroups.com

Communications link failure usually indicates that you have no permission to connect.

Did you grant access to your CloudSQL instance for your GAE application ?

https://cloud.google.com/sql/docs/access-control#appengine



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/34694800/communicationsexception-when-connecting-from-gae-to-mysql-instance/34763993#34763993

Yster via StackOverflow

unread,
Jan 13, 2016, 8:41:06 AM1/13/16
to google-appengin...@googlegroups.com

Aerodyno via StackOverflow

unread,
Jan 13, 2016, 9:01:10 AM1/13/16
to google-appengin...@googlegroups.com

You are using a second generation cloud sql instance. These are not accessible from app engine yet. Use a first generation instance and you can add your app as an authorized app. I had the same problem.



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/34694800/communicationsexception-when-connecting-from-gae-to-mysql-instance/34768664#34768664
Reply all
Reply to author
Forward
0 new messages