无法从应用引擎连接到谷歌云sql



过去 2 天我一直在尝试从应用程序引擎连接到 cloudsql,我能够通过 IP 从 Linux 网络服务器连接,但不能从具有相同设置的应用程序引擎连接。

我的连接字符串如下所示: 请注意,实际的 appid 以及数据库名称已被替换

在应用程序.yaml 中

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

在 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);

以上是从 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 和应用程序都在同一个项目中。

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

然后

ls /cloudsql

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

如果不存在,请确保已启用相关 API。在文档页面"使用 Cloud SQL"中,按照"开始之前"下的说明进行操作,特别是"启用 API"。(您的日志也可能通知您:"未配置访问权限。云 SQL 管理 API 以前未在项目中使用过,或者它已被禁用。启用 API 后等待几分钟,然后再重新部署

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新