无法从应用引擎连接到google cloudsql

Sha*_*aun 8 php google-app-engine google-cloud-sql

我一直在尝试过去2天从appengine连接到cloudql,我能够通过IP从linux webserver连接,但是无法从具有相同设置的app引擎连接.

我的连接字符串如下:请注意实际的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: ''
Run Code Online (Sandbox Code Playgroud)

在phpfile中

$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);
Run Code Online (Sandbox Code Playgroud)

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

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

短暂的错误

SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

完全错误

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
Run Code Online (Sandbox Code Playgroud)

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

nic*_*oqh 7

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

然后,

ls /cloudsql
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

beta_settings:
    cloud_sql_instances: "<project-id>:<region>:<instance-name>"
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,我遇到了同样的错误...我认为这是因为即使我启用了API,`/ cloudsql`目录也不可用。有谁知道,如何解决这个问题? (3认同)
  • 我更新了答案,加入了另一种可能性。确保您已正确设置`beta_settings`值。 (2认同)