0

我无法通过 Compute Engine 连接到我的数据库。

到目前为止我做过的事情:

  1. 设置我的计算引擎
  2. 将我的 Compute Engine 连接到我的 Cloud SQL
  3. 在我的 Compute Engine 上安装并运行 Cloud Proxy
  4. 在我的 libs 文件夹中包含 JDBC Jar 文件
  5. 创建了 JDBC 连接字符串

"jdbc:mysql:///?cloudSqlInstance=&socketFactory=com.google.cloud.sql.mysql.SocketFactory;user=&password=";

  1. 添加了对我的 Gradle 文件的依赖项

-实现文件树(目录:'libs',包括:['*.jar'])
-实现'com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.1.0'

这是堆栈跟踪:

W/System.err:java.sql.SQLNonTransientConnectionException:无法连接到 localhost:3,306 上的 MySQL 服务器。W/System.err:确保在您尝试连接的机器/端口上运行着 MySQL 服务器,并且运行该软件的机器能够连接到该主机/端口(即没有防火墙)。还要确保没有使用 --skip-networking 标志启动服务器。在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) 在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) 在 com.mysql.cj.jdbc .exceptions.SQLError.createSQLException(SQLError.java:89) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) W/System.err: at com.mysql.cj.jdbc.exceptions .SQLError.createSQLException(SQLError.java:73) 在 com.mysql.cj.jdbc.ConnectionImpl。ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) W/System.err: at java.lang.Thread.run(Thread.java:764) 原因:java.lang.NullPointerException: 尝试调用虚拟方法 'com. mysql.cj.protocol.SocketConnection com.mysql.cj.protocol.a.NativeProtocol.getSocketConnection()' 在 com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:980) 的空对象引用上。 mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826) W/System.err: at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456) ... 12 更多 I/Choreographer: 跳过58帧!应用程序可能在其主线程上做了太多工作。I/zygote:做全码缓存收集,码=123KB,数据=111KB 码缓存收集后,码=117KB,数据=78KB lang.Thread.run(Thread.java:764) 引起:java.lang.NullPointerException:尝试调用虚拟方法'com.mysql.cj.protocol.SocketConnection com.mysql.cj.protocol.a.NativeProtocol.getSocketConnection( )' 在 com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:980) 处的空对象引用上 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826) W/System.err : at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456) ... 12 更多 I/Choreographer:跳过 58 帧!应用程序可能在其主线程上做了太多工作。I/zygote:做全码缓存收集,码=123KB,数据=111KB 码缓存收集后,码=117KB,数据=78KB lang.Thread.run(Thread.java:764) 引起:java.lang.NullPointerException:尝试调用虚拟方法'com.mysql.cj.protocol.SocketConnection com.mysql.cj.protocol.a.NativeProtocol.getSocketConnection( )' 在 com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:980) 处的空对象引用上 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826) W/System.err : at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456) ... 12 更多 I/Choreographer:跳过 58 帧!应用程序可能在其主线程上做了太多工作。I/zygote:做全码缓存收集,码=123KB,数据=111KB 码缓存收集后,码=117KB,数据=78KB mysql.cj.protocol.a.NativeProtocol.getSocketConnection()' 在 com.mysql.cj.jdbc.ConnectionImpl.createNewIO 的 com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:980) 的空对象引用上(ConnectionImpl.java:826) W/System.err: at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456) ... 12 更多 I/Choreographer:跳过 58 帧!应用程序可能在其主线程上做了太多工作。I/zygote:做全码缓存收集,码=123KB,数据=111KB 码缓存收集后,码=117KB,数据=78KB mysql.cj.protocol.a.NativeProtocol.getSocketConnection()' 在 com.mysql.cj.jdbc.ConnectionImpl.createNewIO 的 com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:980) 的空对象引用上(ConnectionImpl.java:826) W/System.err: at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:456) ... 12 更多 I/Choreographer:跳过 58 帧!应用程序可能在其主线程上做了太多工作。I/zygote:做全码缓存收集,码=123KB,数据=111KB 码缓存收集后,码=117KB,数据=78KB java:456) ... 12 更多 I/Choreographer:跳过 58 帧!应用程序可能在其主线程上做了太多工作。I/zygote:做全码缓存收集,码=123KB,数据=111KB 码缓存收集后,码=117KB,数据=78KB java:456) ... 12 更多 I/Choreographer:跳过 58 帧!应用程序可能在其主线程上做了太多工作。I/zygote:做全码缓存收集,码=123KB,数据=111KB 码缓存收集后,码=117KB,数据=78KB

4

1 回答 1

0

这条线localhost:3,306.看起来很可疑。你确定你没有错别字吗?
您可能遇到过这个repo,它不是很准确。我手头没有 java 客户端来测试它,但我确实使用了具有不同堆栈的 Cloud SQL,并且使用代理的目的是您的应用程序通过它连接到数据库,就好像数据库本身在本地运行一样。您的连接字符串除了 creds 和localhost:3306.

于 2020-10-06T21:39:56.163 回答