【问题标题】:AppEngine gets "Communication link failure" error while trying to connect to Google Cloud MySql instanceAppEngine 在尝试连接到 Google Cloud MySql 实例时出现“通信链接失败”错误
【发布时间】:2020-08-09 21:49:19
【问题描述】:

我有一个基于 Java/Jetty 的 appengine 项目,当使用与 JDBC 的 TCP 连接时成功连接到 Google 云 MySql 服务器,但在尝试通过实例名称和 JDBC socketFactory 连接时无法连接到同一服务器。 我在 GCP 调试控制台中遇到的错误:

“通信链路故障最后一个成功发送到服务器的数据包是在 0 毫秒前。>驱动程序没有收到来自服务器的任何数据包。”

try {
            Class.forName("com.mysql.jdbc.GoogleDriver");
            String url= String.format("jdbc:google:mysql:///"
                    + "MY_DB_NAME" + "?"
                    + "cloudSqlInstance=%s&"
                    + "socketFactory=%s&"
                    + "useSSL=false",
                    "PROJECT-ID:ZONE:INSTANCE_NAME", 
                    "com.google.cloud.sql.mysql.SocketFactory");

            return DriverManager.getConnection(url, USER_NAME, USER_PASSWORD);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }

【问题讨论】:

  • 您可以尝试将 GoogleDriver 更改为“com.mysql.jdbc.Driver”吗?错误是在本地发生还是在部署到 GAE 之后发生?另外,我建议您关注how to connect to Cloud SQL from App Engine上的官方文档
  • 我更改为“com.mysql.jdbc.Driver”,但仍然没有出现同样的错误。部署到 GAE 时出现错误。
  • 在将 url 前缀从“jdbc:google:mysql:”替换为“jdbc:mysql:”后,我设法使其工作

标签: java mysql google-app-engine jdbc


【解决方案1】:

问题可能出在您在云 mysql 实例中指定的公共 IP 地址中。只需在浏览器中输入 我的公共 IP 是什么? 即可查看公共 IP 地址。然后更新为谷歌云实例提供的公共 IP。这可能有助于解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2018-05-13
    • 2012-12-21
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多