2017-05-14 104 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

相關問題