2016-09-23 6 views
2

Google Cloud SQLインスタンス(第2世代)を使用しています。私はテーブルから行を正常に取得するGoコードがあり、テーブルに行を追加するコードがあります。しかし、私は私のアプリを展開すると、アプリは、サーバーに接続することができません。 SQL関数が呼び出されると、サーバーは500応答を返します。私のアプリは、このSQLインスタンスに接続することが許可されていますデプロイされたアプリケーションからGoogle Cloud SQLサーバーに接続する際に問題が発生しました。

enter image description here

私は、次の囲碁接続コード使用しています:

func dialSQL() (*sql.DB, error) { 
    if appengine.IsDevAppServer() { 
     return sql.Open("mysql", "root:[email protected](xxx.xxx.xxx.xxx:3306)/Dbname") 
    } else { 
     return sql.Open("mysql", "[email protected](projectid:regionname:instancename)/Dbname") 
    } 
} 

にデプロイされたバージョンとローカルバージョンを同じコードベースを使用していますが、展開されたバージョンでは、dialSQL()関数の2番目の接続文字列が使用されます。私はPROJECTIDを使用しています[email protected](project-id:instance-name)/dbname

https://github.com/go-sql-driver/mysql

このドライバのドキュメントをGoogleのApp Engineを経由してGoogleクラウドSQLサーバーに接続するための次の接続文字列を言及:私は、このゴーMySQLドライバを使用しています

: regionname:むしろPROJECTIDよりINSTANCENAME:INSTANCENAMEこの記事はregionnameを含める必要性に言及しているため:紛らわしいgoogle app engine golang, driver: bad connection

、Googleのドキュメントもregionnameを省略:https://cloud.google.com/appengine/docs/go/cloud-sql/reference

私は両方の接続文字列を試しました。

this postによると、配備されたアプリケーションはhost = localhostを使用してサーバーに接続しようとし、this postに従って、 'root' @ 'localhost'のパスワードはnullにする必要があります。

mysqlコンソールで次のクエリを実行して、ユーザー 'root' @ 'localhost'が実際にヌルパスワードを持っていることを確認します:select User, Host, HEX(authentication_string) from mysql.user。 'root' @ '%'ユーザーにはまだGoogle Cloud SQLインスタンスコンソールで指定したパスワードがあります。

私は、GAEアプリケーションとCloud SQLサーバーの領域に関してはpossible issueを調べましたが、それらは同じ地域にあります。私はまた、第2世代のGoogle Cloud SQLサーバーでは、アプリケーションとサーバーの領域が異なることを認識しました。

また、新しいユーザーを作成し、接続文字列に新しいユーザーのユーザー名でインスタンスに接続しようとしました。これでエラーは修正されませんでした。

私は、ファイアウォールルールを追加しようとしたが、これはどちらかの問題を解決しませんでした:

enter image description here

は最後に、私はGoogleクラウドコンソールのCompute Engineのセクションに行って、VMにSSHed私のアプリの最新のインスタンスを提供しています。私は正常にクラウドSQLサーバーのIPをpingしましたが、telnet xxx.xxx.xxx.xxx 3306がタイムアウトしました。私もlsof -i TCP:3306lsof -i | grep 3306を実行しましたが、プロセスはありませんでした。私もこのボックスにmysqlをインストールし、そこからサーバーに接続しようとしましたが、接続に失敗しました。

誰でもこの問題の原因が分かっていますか?

答えて

2

展開はGoogle App Engineアプリケーションは、第二世代のGoogle Cloud SQL Serverに接続しようとするとthe Go MySQL driveran issueがあるかもしれないように見えます。

は私が 第一世代 Cloud SQLインスタンスを作成し、私は正常にこの接続文字列で展開Google App Engineアプリケーションを使用してサーバーに接続することができました:

[email protected](project-id:instance-name)/dbname

ない地域名必要でした。

+0

私はまったく同じ問題を抱えており、第一世代DBに切り替えることで問題が解決されます。第二世代DBの問題の原因を突き止めるための進歩はありましたか? –

+1

標準環境で実行されているGoogleのGAEアプリから、Google Cloud SQL Serverの第2世代に接続できなかったため、引き続き第1世代のサーバーを使用しました。私はいくつかのテストを行い、柔軟なappengine環境で実行される単純なGAEアプリケーションを作成し、それから第2世代のSQLサーバーに接続することができました。問題はアプリエンジン環境に関連している必要があります。 – rudolph1024

0

Googleは第二世代への接続にソリューションを提供Guysはここにある: "TLS requested but server does not support TLS" error with Google Cloud SQL (2nd generation) from Google App Engine?

Googleのポストされたドキュメントはだった(そしておそらくまだ)間違っが、正解はそこに掲載されています。 私たちは第2世代Cloud SQLを本番環境で問題なく使用しています。

+1

私は彼がここでTLSまたはSSLを言及しているとは思わない。 – Theyouthis

関連する問題