Open4

ローカルのMySQLクライアントからGoogle CloudのSQLインスタンスに接続する

おだちゃんおだちゃん

ところどころ詰まったので、
その解決策もいつか誰かの役に立つかと思い残しておきます。

動作環境

macOS Monterey 12.6.2
MySQL Ver 8.0.32 for macos12.6 on x86_64 (Homebrew) ※ローカル
MySQL Ver 8.0.26 ※Cloud SQL

おおまかな手順

  1. google-cloud-sdkをインストール
  2. Cloud SQL Auth Proxyをインストール
  3. googleにログイン
  4. ローカルのMySQLサーバーを起動
  5. Cloud SQL Auth Proxyを起動
  6. MySQLクライアントからログイン
おだちゃんおだちゃん

環境構築でつまったところ

手順1 google-cloud-sdkをインストール

a. sdkダウンロード忘れ

gcloudは昔ダウンロードした記憶があったので、
↓のエラーメッセージが出てきたときは混乱しました。
してなかったです。単純なミス。

zsh: command not found: gcloud

b. インストール後の zsh: command not found: gcloud

google-cloud-sdkをインストールしたとき、
zshrcでPATHを通すかの対話があったので通したのにcommand not foundとなりました。
catコマンドでみたところ記載はされていたので、下のコマンドを打って解決しました。

source ~/.zshrc
おだちゃんおだちゃん

環境構築でつまったところ

手順3 googleにログイン

a. 認証されていなかった google: could not find default credentials.

google-cloud-sdkもCloud SQL Auth Proxyもインストールしたことだし、
ローカルのMySQLサーバーも動かして
早速Cloud SQL Auth Proxyを起動しようとしたところ、

./cloud-sql-proxy --port 13306 接続名
google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.

となったので、以下のコマンドを打ってログイン。

gcloud auth application-default login
おだちゃんおだちゃん

環境構築でつまったところ

手順6 MySQLクライアントからログイン

a. ログインできない Access denied for user 'test_user'@'localhost' (using password: YES)

SQLインスタンスに接続しようとしたところ、接続できませんでした。

mysql -P 13306 -u root -p
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

エラーのroot'@'localhost'とあるように、
どうやらローカルのMySQLサーバーにアクセスしていてCloud SQLのインスタンスにアクセスできていないようでした。
ロギングも見たところ、
2023-03-26T08:25:02.346647Z 1965 [Note] [MY-010926] [Server] Access denied for user 'root'@'cloudsqlproxy~ipアドレス' (using password: NO)
のようなログが出力されていませんでした。

なのでmysqlコマンドにホストを指定してあげると問題なくログインできました。

➜  ~ mysql -P 13306 -u test_user -p --host 127.0.0.1
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1991
Server version: 8.0.26-google (Google)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>