Google cloud platform 如何将数据融合连接到云SQL代理

Google cloud platform 如何将数据融合连接到云SQL代理,google-cloud-platform,google-cloud-sql,google-cloud-data-fusion,cloud-sql-proxy,Google Cloud Platform,Google Cloud Sql,Google Cloud Data Fusion,Cloud Sql Proxy,我正在尝试将数据融合与云SQL MySQL和私有IP连接起来。我读过很多资源,似乎这是可能的(至少我还不相信这是不可能的)。到目前为止,我所拥有的: 具有专用IP的数据融合专用实例 具有私有IP的MySQL云SQL实例 部署在虚拟机上的云SQL代理 所有设备都连接到相同的默认VPC网络 防火墙完全打开(IP范围上的入口、出口:0.0.0.0/0和所有协议端口) 从我的VM实例中,我可以使用以下命令连接到MySQL数据库MySQL-u root-host 127.0.0.1-port 3306

我正在尝试将数据融合与云SQL MySQL和私有IP连接起来。我读过很多资源,似乎这是可能的(至少我还不相信这是不可能的)。到目前为止,我所拥有的:

  • 具有专用IP的数据融合专用实例
  • 具有私有IP的MySQL云SQL实例
  • 部署在虚拟机上的云SQL代理
  • 所有设备都连接到相同的默认VPC网络
  • 防火墙完全打开(IP范围上的入口、出口:0.0.0.0/0和所有协议端口)
从我的VM实例中,我可以使用以下命令连接到MySQL数据库
MySQL-u root-host 127.0.0.1-port 3306
。在云融合中尝试使用相同的参数时,我无法建立连接。我应该检查什么,我可以检查什么以确保所有这些都正确设置

编辑


我最初接受了Ajai的答案,但后来又不接受,因为我无法在新项目中实现连接。这里可能缺少一个元素,一些需要在某处完成的事情。

到目前为止,您的方法似乎是正确的。在私有CDF实例和私有CloudSQL MYSQL实例之间连接的唯一方法是通过CloudSQL代理

然而,在采用这种方法时,有一些事情需要检查

虚拟机设置
  • 创建专用GCE虚拟机(无外部IP)
  • 拥有所有作用域(允许完全访问所有云API)
  • 将操作系统更改为“容器化优化操作系统”。这是预装的docker
  • 将以下内容作为自动化启动脚本
docker-pull-gcr.io/cloudsql-docker/gce-proxy:1.16
docker run-d\
-p 0.0.0.0:3306:3306\
gcr.io/cloudsql docker/gce proxy:1.16/cloud\u sql\u proxy\
-实例==tcp:0.0.0.0:3306
最后一步应该建立一个代理并使用特定的docker映像运行。更详细的文档可在此处找到()

CloudSQL驱动程序 另外需要注意的是,基于MySQL版本,5.1.39驱动程序可能不会一直工作。请检查中心是否有特定于CloudSQL MySQl的驱动程序

如果这些建议都不适合你,我会尝试更新答案

了解问题的其他资源

对于任何想要理解为什么私有CDF实例不能直接连接到私有CloudSQL MySQL实例的人来说,这里有两个参考资料来讨论它

  • &
  • )

我已经成功地重新创建了环境,下面是详细的步骤,也许您错过了一个步骤:

  • 在VPC中创建具有专用Google访问权限的子网
  • 创建连接到同一VPC的私有云数据融合实例
  • 创建防火墙规则,允许分配的服务网络范围访问端口3307上的代理VM
  • 创建连接到同一VPC的私有CloudSQL MySQL实例
  • 按照中概述的步骤在云数据融合和同一专有网络之间创建专有网络对等
  • 在步骤1的子网中部署了VM
  • 通过中概述的步骤部署CloudSQL代理
  • 使用以下命令行执行云SQL代理(注意,0.0.0.0允许绑定到所有IP):
  • *。/cloud\u sql\u proxy-instances==tcp:0.0.0.0:3307
    
  • 在CDF控制台上运行测试:
  • 一旦验证了上述内容,就可以将CloudSQL代理作为linux服务或启动脚本进行自动化

    另外,谢谢你引用我们的文章

    编辑: 如果您想使用docker版本的代理,请按照Ajai的回答使用以下步骤代替步骤7和8:

    sudo docker run -d \
      -p 0.0.0.0:3307:3307 \
      gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy \
      -instances=<instance connection name>=tcp:0.0.0.0:3307
    
    sudo docker运行-d\
    -p 0.0.0.0:3307:3307\
    gcr.io/cloudsql docker/gce proxy:latest/cloud\u sql\u proxy\
    -实例==tcp:0.0.0.0:3307
    
    编辑2 关于代理,需要指出的两个关键点是,您可能已经有3306个代理了 绑定到同一实例上的MySQL。使用像3307(或其他数字)这样的端口可以减少这种可能性。请注意,对于到CloudSQL本身的出站连接,CloudSQL代理使用3307


    第二件事是将其设置为监听0.0.0.0;如上所述,它绑定到所有IP,允许代理侦听所有传入的连接,而不是仅来自127.0.0.1的连接。

    谢谢。如何获取在“云融合连接”部分的连接字符串中输入的IP?这是您的云SQL实例的私有IP还是其他什么?连接字符串中的IP是代理vm的私有静态IP。非常感谢。它正在工作。是否有可能使用本文中描述的云SQL代理来实现这一点,或者使用docker是否带来了一些特定的功能?很高兴它成功了!这是cloudsql文档中的官方文档-
        *./cloud_sql_proxy -instances=<Instance Connection Name>=tcp:0.0.0.0:3307
    
    sudo docker run -d \
      -p 0.0.0.0:3307:3307 \
      gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy \
      -instances=<instance connection name>=tcp:0.0.0.0:3307