我有一个简单的 Java 程序(不是 Web 应用程序/Google Engine/等)。 我浏览了 Google Cloud SQL 网站上的所有指南,但不知道如何连接到服务器。
现在我有
Class.forName("com.mysql.jdbc.Driver");
和
connection = DriverManager.getConnection("jdbc:mysql://x:3306/y?user=root");
其中 x 是实例的 IP 地址(取自实例的属性),y 只是实例 ID。
我做错了什么吗? 我还按照教程之一的建议为 root 设置了一个密码。我应该在代码中指定它吗?
谢谢。
编辑
按照mohanrathour的链接,我获得了Cloud SQL MySQL Socket Factory我的代码现在看起来像:
Class.forName("com.mysql.jdbc.Driver");
和
String jdbcUrl = String.format("jdbc:mysql://google/%s?cloudSqlInstance=%s&"+"socketFactory=com.google.cloud.sql.mysql.SocketFactory",
"dbname",
"instanceConnectionName");
connection = DriverManager.getConnection(jdbcUrl, "userName", "password");
我在控制台中看到以下内容:
INFO: Connecting to Cloud SQL instance [instanceName].
com.google.cloud.sql.mysql.SslSocketFactory getInstance
INFO: First Cloud SQL connection, generating RSA key pair.
但是后来我得到了这个异常:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
解决方案
无需使用“Cloud SQL MySQL Socket Factory”。
在 Google SQL 面板中,转到您的实例面板 -> 访问控制 -> 授权,添加以下网络地址并单击“保存”。
0.0.0.0/0
现在您可以使用以下代码进行连接:
Class.forName("com.mysql.jdbc.Driver");
...
String url= String.format("jdbc:mysql://x:3306/y");
connection = DriverManager.getConnection(url, z, w);
其中 x 是您的实例 IP(从面板获取),y 是实例名称,z 是数据库(不是帐户)用户名(通常是“root”),w 是用户密码(您必须设置看看 Google 的教程)。
最佳答案
默认情况下,Cloud SQL 实例不允许公共(public) IP 上的连接。您必须添加要从中连接的各个子网。 您可以在此处查看完整文档:https://cloud.google.com/sql/docs/external#appaccessIP
不需要将 IP 地址列入白名单的替代方案是使用 Cloud SQL 套接字库,该库使用具有短期证书的 SSL session : https://cloud.google.com/sql/docs/external#java
不建议将 0.0.0.0/0 列入白名单,因为它向全世界开放数据库。
关于java - 使用简单的 Java 程序 (JDBC) 连接到 Google SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40861457/