1

我遵循關於如何設置Node.JS以使用Cloud SQL的示例,並且通常可以使用它,但是有一些解決方法可以連接到SQL服務器。我無法以正確的方式連接INSTANCE_CONNECTION_NAME到變量的socketPath選項,用於createConnection()方法。相反,作爲臨時解決方法,我目前指定服務器的IP地址,並將我的虛擬機IP地址放入服務器的防火牆設置中,以便讓它通過。從Node.JS連接到Google Cloud SQL的正確方法

這一切都有效,但我現在試圖在發佈到AppEngine之前正確地將它放在一起。

我怎樣才能使它工作?

下面的代碼工作正常:

function getConnection() 
{ 
    const options = 
    { 
    host: "111.11.11.11", //IP address of my Cloud SQL Server 
    user: 'root', 
    password: 'somePassword', 
    database: 'DatabaseName' 
    }; 
    return mysql.createConnection(options); 
} 

但下面的代碼,我從TutorialGithub page,這是在教程提到,結合是給錯誤:

function getConnection() 
{ 
    const options = 
    { 
    user: 'root', 
    password: 'somePassword', 
    database: 'DatabaseName', 
    socketPath: '/cloudsql/project-name-123456:europe-west1:sql-instance-name' 
    }; 
    return mysql.createConnection(options); 
} 

下面是我得到的錯誤:

{ [Error: connect ENOENT /cloudsql/project-name-123456:europe-west1:sql-instance-name] 
    code: 'ENOENT', 
    errno: 'ENOENT', 
    syscall: 'connect', 
    address: 'cloudsql/project-name-123456:europe-west1:sql-instance-name', 
    fatal: true } 

我在做什麼錯?我擔心的是,如果我使用IP地址將應用發佈到AppEngine,我將無法允許傳入流量進入SQL服務器?

回答

1

您是否將AppEngine應用程序部署到與SQL數據庫相同的區域? (歐洲west1)

文檔在https://cloud.google.com/sql/docs/mysql/connect-app-engine狀態「您的應用程序必須在同一個區域作爲您的Cloud SQL實例。

+0

好一點,是的,看起來它正好是在歐洲West1-C ,即使我沒有想過它...... –

+0

正確答案? – Gary

+0

還不知道。作爲解決方法,在Compute Engine上結束運行... –

2

在測試「coud的sql」我遇到了類似的錯誤。

  • error message : Error: connect ENOENT /cloudsql/xxx-proj:us-central1:xxx-instance
  • 解決方案:

+----------------------------------------------------------+
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
./cloud_sql_proxy -dir=/cloudsql &

=> now node js server can connect to mysql

參考指南:https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-sql

+0

感謝您的建議。我們會很快嘗試... –

相關問題