2017-05-14 50 views
3

我一直在尝试过去2天从appengine连接到cloudsql,我能够通过IP连接从一个Linux的网络服务器,但不能从具有相同的应用程序引擎建立。无法连接到谷歌云从应用引擎

我的连接字符串如下: 请注意实际的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: '' 

在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和app都在同一个项目中。

+0

你能设法解决这个问题吗?我得到了同样的一个。 –

+0

@IlkerBaltaci我从来没有找到解决方案,而是最终使用他们的虚拟机/计算引擎。 – Shaun

回答

3

如果你SSH进入你的实例(这将把它放在调试模式),你可以检查是否存在套接字文件。您可以从云端控制台打开连接。

然后,

ls /cloudsql 

这个目录应该包含一个项目命名<project-id>:<region>:<instance-name>,按照你MYSQL_DSN环境变量。

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

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

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

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

最后,可以尝试的MYSQL_DSN值在app.yaml文件中的报价

+0

谢谢你的回答,我尝试了ls/cloudsql,结果如下:ls:无法访问/ cloudsql:没有这样的文件或目录,我也确保API已经启用。由于我无法找到解决方案,因此最终我只使用了计算引擎。 – Shaun

+2

我已经更新了我的答案,以包含另一种可能性。确保你已正确设置了“beta_settings”值。 – nicoqh

+0

这也不起作用 – Subash

相关问题