Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何从Metabase连接到Google Cloud SQL数据库(当Metabase在Google Cloud Run上运行时)_Google Cloud Platform_Google Cloud Sql_Google Cloud Run_Metabase - Fatal编程技术网

Google cloud platform 如何从Metabase连接到Google Cloud SQL数据库(当Metabase在Google Cloud Run上运行时)

Google cloud platform 如何从Metabase连接到Google Cloud SQL数据库(当Metabase在Google Cloud Run上运行时),google-cloud-platform,google-cloud-sql,google-cloud-run,metabase,Google Cloud Platform,Google Cloud Sql,Google Cloud Run,Metabase,我正在运行googlecloudrun,并试图连接到一个MySQL数据库实例(在同一个项目中,它也驻留在googlecloudsql中) 注意。这不是Metabase的应用程序数据库,而是连接数据库以根据 当我在本地运行Metabase时,我可以使用公共IP进行良好连接(一旦我的IP被列入白名单) 我无法在云运行时通过元数据库连接 我已在Cloud Run(per:)中将数据库添加到云SQL连接中 我试图连接的数据库是一个(如果这有什么区别的话) 当我使用0.0.0.0/0在云SQL实例上“允

我正在运行googlecloudrun,并试图连接到一个MySQL数据库实例(在同一个项目中,它也驻留在googlecloudsql中)

注意。这不是Metabase的应用程序数据库,而是连接数据库以根据

  • 当我在本地运行Metabase时,我可以使用公共IP进行良好连接(一旦我的IP被列入白名单)
  • 我无法在云运行时通过元数据库连接
  • 我已在Cloud Run(per:)中将数据库添加到
    云SQL连接中
  • 我试图连接的数据库是一个(如果这有什么区别的话)
  • 当我使用
    0.0.0.0/0
    在云SQL实例上“允许所有”时,我可以使用公共IP进行连接。一旦删除此规则,我将无法连接
  • 我知道Cloud Run还不支持云SQL私有IP
要连接到数据库,我必须使用Metabase的web界面:

在这个界面中,我尝试过:

  • 将主机设置为公共IP
  • 将附加JDBC连接字符串选项设置为
    cloudSqlInstance=&socketFactory=com.google.cloud.sql.mysql.socketFactory
    (将
    替换为实名)
    • 设置此选项时,错误为:
      无法连接到地址=(主机=)(端口=3306)(类型=主机):套接字无法连接到主机:,端口:3306。套接字工厂初始化失败,选项“socketFactory”设置为“com.google.cloud.sql.mysql.socketFactory”
      (我已编辑了实际的
      值)
想法:

  • 根据我现在的理解,当我在
    附加JDBC连接字符串选项中设置socketFactory时,主机被忽略
    
  • 我只能假设我没有正确格式化或配置
    附加JDBC连接字符串选项
    字段

任何帮助都将不胜感激。

您不能在Cloud Run中使用Cloud SQL专用IP,它还不兼容,您可以忘记这种方式。读取副本不会改变任何东西,您还可以省钱并删除它

首先,允许您通过0.0.0.0/0网络访问云SQL数据库。这样,您就可以验证您的Cloud Run容器是否能够在对internet开放的数据库中正常工作

然后,删除此配置并重试,以便按照此操作将MySQL实例连接到云,就像您所做的那样运行。在应用程序中,还必须添加一个依赖项(maven或gradle)来获取套接字工厂jar


它应该会起作用。共享更多代码或配置,以帮助您获得更多帮助

您无法通过任何TCP连接连接到CloudSQL,如中所述:

云运行(完全管理)不支持使用TCP连接到云SQL实例。您的代码不应尝试使用IP地址(如127.0.0.1或172.17.0.1)访问实例

您可以使用与以下类似的代码,使用实例连接名称连接到CloudSQL实例:

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
config.setUsername(DB_USER); // e.g. "root", "postgres"
config.setPassword(DB_PASS); // e.g. "my-password"

// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");

// ... Specify additional connection properties here.
// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);


  [1]: https://cloud.google.com/sql/docs/mysql/connect-run
如果您担心连接的安全性,则始终可以选择使用连接到CloudSQL代理。请注意,在这种情况下,您的JDBC URL应该如下所示:

jdbc:mysql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false&user=<MYSQL_USER_NAME>&password=<MYSQL_USER_PASSWORD>
jdbc:mysql://?cloudSqlInstance=&socketFactory=com.google.cloud.sql.mysql.socketFactory&usesssl=false&user=&password=

尝试使用完整的URL进行连接,并检查几次。两年后,当人们在JDBC Url中犯了一个小错误,比如额外的分号、冒号等,我看到了同样的错误,我想情况可能已经改变了。我可以在Google App Engine上使用App.yaml定义文件中的beta_设置配置选项来实现这一点

比如说

beta\u设置:
云计算sql实例:
-=tcp:5432
-=tcp:3306

在Metabase UI中添加数据库连接时,需要将IP地址设置为127.17.0.1 per。

我已添加到应用程序数据库的连接,但未添加到我要连接的新数据库。然而,现在我也补充了这一点,我遇到了同样的问题。这不是云运行,但我已经通过允许从元数据库应用程序服务进行连接(数据库上的网络设置),成功地部署到应用程序引擎,并将元数据库连接到云SQL托管的数据库。您还需要确保App Engine服务帐户具有云SQL的权限(快速简便的方法是授予它
Cloud SQL Client
角色)。谢谢,我已根据您的评论更新了我的原始问题。我注意到您使用了基本URL字符串。请您用我的答案中的完整JDBCURL字符串替换它,并使用所有提到的参数,看看是否有任何区别?谢谢,我已经根据您的评论更新了我的原始问题