Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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!

like image 775
glesage Avatar asked Nov 24 '16 19:11

glesage


People also ask

How do I connect to a CloudSQL proxy?

Start the Cloud SQL Auth proxyReplace INSTANCE_CONNECTION_NAME with the instance connection name you copied in the previous step. At the Enter password: prompt, enter the password of your MySQL root user account. Verify that the MySQL prompt appears. You have connected to your database using the mysql client.

Does Cloud SQL support Autoscaling?

Google CloudSQL does not provide autoscaling feature for the read replicas which can be a common requirement to save cost and ensure high availability.


2 Answers

You can create two instances on the same port but you have to define a different IP like this:

-instances=project:region:db=tcp:127.0.0.1:3306,project:region:db-2=tcp:127.0.0.2:3306

You can see an example on Github cloudsql-proxy repository.

like image 74
alexandre-rousseau Avatar answered Oct 14 '22 03:10

alexandre-rousseau


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.

like image 22
Carrotman42 Avatar answered Oct 14 '22 01:10

Carrotman42