我在Google上运行代谢酶,并试图连接到一个MySQL数据库实例(该实例也驻留在同一个项目中的Google中)。
注意:这不是元数据库的应用程序数据库,而是连接数据库以按照https://www.metabase.com/docs/latest/setting-up-metabase.html对数据执行分析
Cloud SQL connections (per:https://cloud.google.com/sql/docs/mysql/connect-run)0.0.0.0/0在Cloud实例上“允许所有”时,我能够使用公共IP进行连接。一旦我删除了这个规则,我就无法连接。为了连接到数据库,我不得不使用Metabase的web接口:

在这个接口中,我尝试过:
Additional JDBC connection string options设置为按https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory设置为cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory (用实名替换<INSTANCE_CONNECTION_NAME> ) Could not connect to address=(host=<HOST>)(port=3306)(type=master) : Socket fail to connect to host:<HOST>, port:3306. Socket factory failed to initialized with option "socketFactory" set to "com.google.cloud.sql.mysql.SocketFactory" (我已经编辑了真实的<HOST>值)
思想:
Additional JDBC connection string options时,主机将被忽略。Additional JDBC connection string options字段。任何帮助都将不胜感激。
发布于 2020-01-20 13:38:42
如CloudSQL中所述,不能通过任何TCP连接连接到TCP。
云运行(完全托管)不支持使用TCP连接到Cloud实例。您的代码不应该尝试使用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套接字工厂代理。请注意,在这种情况下,您的JDBC应该如下所示:
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>尝试使用完整的URL进行连接,并对其进行几次检查。当人们在JDBC中犯了一个小错误,比如额外的分号、冒号等等时,我看到了同样的错误。
发布于 2020-01-18 21:12:49
您不能在云运行时使用,它还没有兼容,您可以这样忘记。阅读副本将不会改变什么,你也可以节省和删除它!
首先,允许0.0.0.0/0网络访问Cloud数据库。像这样,您可以验证您的云运行容器在向internet开放的数据库中是否正确工作。
然后,删除这个配置,然后按照这个页面重试,将您的MySQL实例连接到Cloud。在您的应用程序中,还必须添加一个依赖项(maven或gradle)来获取套接字工厂jar。
应该管用的。分享更多的代码或配置,以便能够帮助您更多!
发布于 2020-05-14 08:12:16
两年后,我认为情况可能发生了变化。我在Google上能够这样做,使用了beta_settings定义文件中的app.yaml配置选项。
例如
beta_settings:
cloud_sql_instances:
- <Project><Zone><Metabase_backend_postgresql_instance>=tcp:5432
- <Same Project><Same Zone><Some MySql cloud instance>=tcp:3306在元数据库UI中添加数据库连接时,每个关于flex环境的Google文档需要将IP地址设置为127.17.0.1。
https://stackoverflow.com/questions/59787457
复制相似问题