14

我正在尝试使用云 sql 代理连接到 2 个不同的云 sql 实例...

在文档中,我找到了一条关于Use -instances parameter. For multiple instances, use a comma-separated list.但不知道如何制作的行。https://cloud.google.com/sql/docs/sql-proxy。我正在使用 Google Container 引擎,并且使用单个 CloudSQL 实例效果很好:

- 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

但是对于多个我已经尝试过-instances这样的部分:

-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

但他们都给出了各种错误;ECONNREFUSED 127.0.0.1:3306, ER_DBACCESS_DENIED_ERROR, 和ER_ACCESS_DENIED_ERROR

任何帮助深表感谢!

4

2 回答 2

25

您不能将两个数据库托管在同一个 TCP 端口上。相反,在逗号分隔的列表中为每个数据库指定端口:

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

我在这里使用了 3306 和 3307,但是你可以使用任何你想要的端口!确保您的 Container Engine 配置的其余部分允许在这些端口上的节点之间进行通信(也许默认情况下是这样,我不使用 GKE)。

大多数 mysql 驱动程序默认连接到端口 3306,但可以指定另一个端口。您必须安排您的代码连接到您为第二个数据库选择的不同端口。

于 2016-11-25T17:01:54.517 回答
2

您可以在同一个端口上创建两个实例,但您必须像这样定义不同的 IP:

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

您可以在Github cloudsql-proxy 存储库上查看示例。

于 2021-05-27T14:43:13.610 回答