glesage glesage - 14 days ago 5
MySQL Question

Connecting to multiple CloudSQL instances using Cloud sql proxy?

I'm attempting to use the cloud sql proxy to connect to 2 different cloud sql instances...

In the docs I found a line about

Use -instances parameter. For multiple instances, use a comma-separated list.
but not sure how to make that look. https://cloud.google.com/sql/docs/sql-proxy. I'm using Google Container engine, and with a single CloudSQL instance it works great:

- name: cloudsql-proxy
image: b.gcr.io/cloudsql-docker/gce-proxy:1.05
command: ["/cloud_sql_proxy", "--dir=/cloudsql",
"-instances=starchup-147119:us-central1:first-db=tcp:3306",
"-credential_file=/secrets/cloudsql/credentials.json"]
volumeMounts:
- name: cloudsql-oauth-credentials
mountPath: /secrets/cloudsql
readOnly: true
- name: ssl-certs
mountPath: /etc/ssl/certs


But for multiple I've tried the
-instances
section as such:

-instances=starchup-147119:us-central1:first-db,starchup-147119:us-central1:second-db=tcp:3306
and
-instances=starchup-147119:us-central1:first-db=tcp:3306,starchup-147119:us-central1:second-db=tcp:3306


but they all give various errors;
ECONNREFUSED 127.0.0.1:3306
,
ER_DBACCESS_DENIED_ERROR
, and
ER_ACCESS_DENIED_ERROR


Any help is much appreciated!

Answer

You cannot have two databases hosted on the same TCP port. Instead, specify ports for each database in the comma-separated list:

-instances=project:region:db=tcp:3306,project:region:db-2=tcp:3307

I used 3306 and 3307 here, but you can use any ports you want! Make sure that the rest of your Container Engine config allows for communication between nodes on these ports (maybe that's true by default, I don't use GKE).

Most mysql drivers connect to port 3306 by default but have a way to specify another port. You'll have to arrange for your code to connect to the different port you choose for the second database.