当前位置: 首页 > 知识库问答 >
问题:

无法从已部署的应用程序连接到Google CloudSQL服务器

鲍健柏
2023-03-14

我正在使用一个Google Cloud SQL实例(第二代),在授权我自己的IP后,我可以成功地在本地连接到它。我有成功从表中检索行的Go代码,还有成功向表中添加行的代码。但是,当我部署应用程序时,应用程序无法连接到服务器。每当调用SQL函数时,服务器都会返回500响应。我的应用被授权连接到此sql实例:

我正在使用以下Go连接代码:

func dialSQL() (*sql.DB, error) {
    if appengine.IsDevAppServer() {
        return sql.Open("mysql", "root:password@tcp(xxx.xxx.xxx.xxx:3306)/Dbname")
    } else {
        return sql.Open("mysql", "root@cloudsql(projectid:regionname:instancename)/Dbname")
    }
}

已部署版本和本地版本使用相同的代码库,但已部署版本使用dialSQL()函数中的第二个连接字符串。

我正在使用这个Go MySQL驱动程序:https://github.com/go-sql-driver/mysql

此驱动程序的文档中提到了以下通过Google App Engine连接到Google Cloud SQL server的连接字符串:user@cloudsql(项目id:实例名)/dbname

我使用的是projectid:regionname:instancename,而不是projectid:instancename,因为这篇文章提到需要包含regionname:谷歌应用程序引擎golang,驱动程序:坏连接

令人困惑的是,谷歌的文档中也省略了regionname:https://cloud.google.com/appengine/docs/go/cloud-sql/reference

我已经尝试了连接字符串的两种变体。

根据这篇文章,部署的应用程序将尝试使用host=localhost连接到服务器,根据这篇文章,root@localhost的密码必须为空。

我在mysql控制台中进行了以下查询,以验证用户“root”@“localhost”确实有空密码:select user,Host,HEX(authentication_string)from mysql。用户。“root”@“%”用户仍然拥有我在Google Cloud SQL实例控制台中指定的密码。

我调查了关于GAE应用程序和云SQL server所在地区的一个可能问题,但它们位于同一地区。我还了解到,对于第二代谷歌云SQL服务器,应用程序和服务器的区域可以不同。

我还创建了一个新用户,并尝试使用连接字符串中新用户的用户名连接到实例。这并没有修复错误。

我还尝试添加防火墙规则,但这也无法解决问题:

最后,我去了谷歌云控制台的计算引擎部分,进入了为我的应用程序的最新实例提供服务的虚拟机。我成功地ping了云SQL server的IP,但是telnet xxx。xxx。xxx。xxx 3306超时。我还运行了lsof-I TCP:3306lsof-I | grep 3306,但没有出现任何进程。我还在这个盒子上安装了mysql,并试图从那里连接到服务器,但连接失败。

有人知道是什么导致了这个问题吗?

共有2个答案

融唯
2023-03-14

伙计们,谷歌提供的连接到第二代的解决方案在这里:“请求TLS,但服务器不支持TLS”错误与谷歌应用程序引擎的谷歌云SQL(第二代)有关?

谷歌发布的文档是错误的(也许现在仍然是错误的),但正确的解决方案发布在那里。我们正在生产中使用第二代云SQL,没有问题。

洪弘亮
2023-03-14

当部署的Google App Engine应用程序试图连接到第二代Google Cloud SQL Server时,Go MySQL驱动程序可能会出现问题。

我创建了一个第一代云SQL实例,并使用一个已部署的Google App Engine应用程序成功连接到服务器,该应用程序具有以下连接字符串:

user@cloudsql(项目id:实例名)/dbname

不需要区域名称。

 类似资料:
  • 我的grails 2.1.0应用程序是在cloudfoundry中部署和运行的,使用mysql服务,昨天我做了一些更改,更新后无法再次运行。我没有对数据源进行任何更改。 通过查看tomcat日志,看起来数据库设置在部署时没有被覆盖,如文档中所述,并且存在一个异常消息“无法为连接URL“JDBC:h2:prodDb;MVCC=TRUE”创建类为“com.mysql.JDBC.driver”的JDBC

  • 我的应用程序,使用套接字。io,无法连接到节点。js服务器。 服务器node.js Android应用程序: 当我连接到服务器时,服务器不会说“socket.name connected”,也不会发出事件“sensorChanged”。问题出在哪里?

  • 我有一个运行在windows机器上的远程FileZilla ftp服务器。ftp服务器需要通过TLS显式ftp。协议是FTP而不是SFTP。我无法更改此服务器的设置。我可以使用filezilla gui客户端连接到此服务器。 现在,我需要通过使用org的java应用程序连接到FileZilla服务器。阿帕奇。平民净: 但是当我运行上面的代码时,我得到: 说到: 任何想法如何连接到Filezilla

  • 我们有一个ASP经典Web应用程序在Azure应用服务中成功运行,该应用程序当前使用SQL服务器身份验证来访问AzureSQL数据库。我们需要将身份验证更改为Active Directory用户。我们设法使此应用程序从访问AzureSQL数据库的开发人员工作站工作,请参阅下面的工作和不工作。 *不适用于桌面,也不适用于Azure Conportail。打开"提供商=SQLOLEDB;服务器=tcp

  • 我正在关注阿伦·古普塔的JavaEE7动手实验室。https://github.com/javaee-samples/javaee7-hol 我已经在JBoss Dev Studio wildfly 8服务器Windows7中部署了该应用程序。很好用。 但当我在Windows8 Eclipse Glassfish4服务器上部署相同的组件时,它引发了以下异常。有人能告诉我Windows 8的设置有什

  • 问题内容: 在Fedora 10上编译。 我刚刚启动了我的第一个qt GUI应用程序。我使用了所有默认设置。 它只是一个简单的形式。它构建良好,没有任何错误。但是当我尝试运行该应用程序时。我收到以下消息: 感谢您的任何建议, 问题答案: 造成这种情况的一般原因如下: 未在环境中设置DISPLAY。 解决方案 : (不过,这似乎不是错误的那个,因为它说X试图连接到它。而且,它并不总是0.0,但大多数