Stefan Falk
Stefan Falk

Reputation: 25387

Cannot connect to Second Generation Cloud SQL database

At the moment I am trying to follow this documentation in order to connect to my Second Generation Cloud SQL database. However, my application fails on startup since it cannot connect to it ..

As been told by the documentation, I have added both service accounts

[email protected]
[email protected]

as Editor under IAM.

I am using the IPv4 of the Cloud SQL instance to connect. Here the connection string:

jdbc:mysql://w.x.y.z:3306/app_db?useSSL=false

but in the Stackdriver Logging view I see:

[main] ERROR com.mz.server.BootstrappingServerConfig - Error trying to migrate SQL scripts ..
org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:56)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1385)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006)
    ...
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:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    ...
Caused by: java.net.ConnectException: Connection timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    ...

Both instances are in the same region: us-central1-b for the compute instances and us-central1 for the SQL instances.

My app.yaml file:

runtime: java
vm: true

runtime_config:
  jdk: openjdk8
  server: jetty9

env_variables:
  'ALPN_ENABLE': 'true'   # OPTIONAL

beta_settings:
  cloud_sql_instances: mz-test:us-central1:mz-test-cloudsql

health_check:
  enable_health_check: false

I am not sure what's wrong here. Am I actually allowed to use the local IPv4 address of the SQL instance?

The documentation actually says

"In your application code, connect to the instance by opening a socket with the following name: /cloudsql/[INSTANCE_CONNECTION_NAME}"

But I am not sure what that would mean for the connection string.

I am also missing the information about what username/password is required or do I not need one here?

Why am I not able to connect?

Upvotes: 0

Views: 843

Answers (1)

Vadim
Vadim

Reputation: 5126

For Java applications running on App Engine Flexible Environment applications use the following library: https://github.com/GoogleCloudPlatform/cloud-sql-mysql-socket-factory

Upvotes: 2

Related Questions