【问题标题】:Cannot connect to google cloudsql from app engine无法从应用引擎连接到 google cloudsql
【发布时间】:2017-05-14 14:21:25
【问题描述】:

过去 2 天我一直在尝试从 appengine 连接到 cloudsql,我能够通过 IP 从 linux 网络服务器连接,但是不能从具有相同设置的 app engine 连接。

我的连接字符串如下: 请注意实际的 appid 以及 dbname 已被替换

在 app.yaml 中

env_variables:
  MYSQL_DSN: mysql:unix_socket=/cloudsql/appid:us-central1:sql-instance-1;dbname=dbname
  MYSQL_USER: root
  MYSQL_PASSWORD: ''

在php文件中

$dsn = getenv('MYSQL_DSN');
$user = getenv('MYSQL_USER');
$password = getenv('MYSQL_PASSWORD');
if (!isset($dsn, $user) || false === $password) {
    throw new Exception('Set MYSQL_DSN, MYSQL_USER, and MYSQL_PASSWORD environment variables');
}
$conn = new PDO($dsn, $user, $password);

以上内容来自https://cloud.google.com/appengine/docs/standard/php/cloud-sql/ 我尝试过使用密码,而不是使用密码。我尝试了用户名root,作为带有密码的用户名和没有用户名的用户名。

我正在使用第二代设置和 flex php 环境,我一直收到的错误如下:

短错误

SQLSTATE[HY000] [2002] No such file or directory

完全错误

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /app/dbconn.php:12 Stack trace: #0 /app/dbconn.php(12): PDO->__construct('mysql:unix_sock...', 'root', '') #1 /app/api.user.php(2): include_once('/app/dbconn.php') #2 {main} thrown in /app/dbconn.php on line 12

我现在真的没有想法了。请注意,sql 和 app 都在同一个项目中。

【问题讨论】:

  • 你能解决这个问题吗?我得到了同样的一个。
  • @IlkerBaltaci 我从来没有找到解决方案,最终改用他们的虚拟机/计算引擎。

标签: php google-app-engine google-cloud-sql


【解决方案1】:

如果您通过 SSH 连接到您的一个实例(这会将其置于调试模式),您可以检查套接字文件是否存在。您可以从 Cloud Console 打开连接。

那么,

ls /cloudsql

此目录应包含一个名为 <project-id>:<region>:<instance-name> 的项目,位于您的 MYSQL_DSN 环境变量之后。

如果不存在,请确保您已启用相关 API。在文档页面Using Cloud SQL 中,按照“开始之前”下的说明进行操作——特别是“启用 API”。 (您的日志也可能会通知您:“访问未配置。Cloud SQL Administration API 之前未在项目中使用或已禁用。”)启用 API 后等待几分钟,然后再重新部署.

您可能已经这样做了,但根据我的经验,这是一个很容易被忽视的步骤。

另外,确保您的 app.yaml 文件包含以下内容

beta_settings:
    cloud_sql_instances: "<project-id>:<region>:<instance-name>"

最后,尝试将 MYSQL_DSN 的值放在 app.yaml 文件中的引号中

【讨论】:

  • 感谢您的回答,我尝试了ls /cloudsql,结果如下: ls: cannot access /cloudsql: No such file or directory ,我也确保API已启用。最后我只是使用了一个计算引擎,因为我找不到解决方案。
  • 我已经更新了我的答案以包含另一种可能性。确保您正确设置了 beta_settings 值。
  • @Subash 您是否看到与原始海报相同的错误,还是不同的错误?如果相同,请检查您的日志中是否有“访问未配置”消息。
  • @subash 试试我提到的引号
  • 不幸的是,我遇到了同样的错误...我认为这是因为 /cloudsql 目录不可用,即使我启用了 API。有谁知道,如何解决这个问题?
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 2018-12-10
  • 1970-01-01
  • 2021-05-28
  • 2020-09-16
相关资源
最近更新 更多