Cloud SQL安全連線密技part2 – 使用Cloud SQL Proxy連線

上次介紹強制SSL連線Cloud SQL的方式,這次更厲害,在地端不用輸入Cloud SQL IP,使用Google研發的Cloud SQL Proxy連線。

步驟如下:

  1. 啟用Cloud SQL Admin API (點擊啟用)

選擇SQL主機所在的專案:

2. 安裝Proxy軟體

我是用64位元Mac, 指令如下,其他OS可參考這份文件

curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64

3. 建立Service Account並且產生一個key

Service Account可以設定下列三種權限之一:

  • Cloud SQL Client
  • Cloud SQL Editor
  • Cloud SQL Admin

4. 啟動Proxy,在command line執行:

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 \
                  -credential_file=<PATH_TO_KEY_FILE> &

注意:

./cloud_sql_proxy 表示,你的command line所在的目錄底下,有cloud_sql_proxy這個剛剛安裝的目錄

那個instance connection name則是這個

Cloud SQL instance connection name

格式為 [專案id]:[region]:[主機名稱]

要注意本機的mysql要先停掉,防止佔用3306 port。

建立連線成功:

Cloud SQL Proxy連線成功

但是,還沒完,要登入成功才算!

5.連線”本機”MySQL (用127.0.0.1, 很神奇吧!)

mysql -u <USERNAME> -p –host 127.0.0.1

這時候開始會有一些錯誤訊息

“Lost connection to MySQL server at ‘reading initial communication packet, system error: 0”

我上網查解法,找到這篇文章,只要修改my.cnf再重啟MySQL就可以了。

結果,我電腦裡根本沒有my.cnf,再繼續上網找,終於找到範本來用了。

然後要重啟MySQL,一時又忘記重啟指令,再查到這篇文章

用這個:

sudo /usr/local/mysql/support-files/mysql.server restart

結果,再連一次又碰到錯誤:

Unknown suffix ‘?’ used for variable ‘port’ (value ‘3306?’)

再去查,找到這份文件

把my.cnf里面的[client]下的port=3306 删除掉,或者在前面加个#

注意有2行port=3306都要加#。

再重啟,再連一次,輸入Cloud SQL的root密碼,終於成功了。

過程中都沒使用到Cloud SQL的外部IP,確保連線資訊不會被偷,真的很神奇!

GCP官方文件參考:

https://cloud.google.com/sql/docs/mysql/connect-admin-proxy

Aaron Lee

超過6年的Google Cloud經驗,服務過上百家G Suite與GCP客戶,擔任多次研討會主講人與教育訓練講師,提供架構諮詢與技術支援,幫助各大企業上雲。

This Post Has 2 Comments

  1. Avatar
    charlie

    請問這個方式最後可以透過mysql workbench檢視和操作嗎? 可以的話該怎麼做呢? 感恩

  2. Aaron Lee
    Aaron Lee

    Hi~~Charlie您好,
    您直接打開MySQL Workbench直接連線本機IP 127.0.0.1看看是否可以成功打開?

發佈留言