6
6

More than 3 years have passed since last update.

ローカル環境からCloud SQL(MySQL)への接続

Last updated at Posted at 2020-02-04

Cloud SQLの作成

インスタンスの作成

スクリーンショット 2020-02-04 9.10.10.png

詳細オプションでは、「ストレージの自動増量を有効化」と「バックアップを自動化する」のチェックを外します。

ユーザーの作成

スクリーンショット 2020-02-04 9.19.57.png

スクリーンショット 2020-02-04 9.20.27.png

データベースの作成

スクリーンショット 2020-02-04 9.21.00.png

スクリーンショット 2020-02-04 9.21.14.png

テーブルの作成

スクリーンショット 2020-02-04 9.23.17.png

画面下部にCloud Shellの画面が表示されます。
以下のコマンドを入力します。

gcloud sql connect [インスタンス名] --user=[ユーザー名]

接続が完了すると、以下のパスワード入力画面が表示されます。
スクリーンショット 2020-02-04 9.31.31.png
パスワードを入力し、接続が完了すると、以下の画面が表示されます。
スクリーンショット 2020-02-04 9.31.51.png

利用するデータベースを切り替えます。

use mydb

テスト用のテーブルとデータを作成します。

CREATE TABLE users (ID INT NOT NULL AUTO_INCREMENT, Name VARCHAR(255) NOT NULL, date DATETIME, PRIMARY KEY(ID));
INSERT INTO users (Name, date) values ('鈴木', '2020-02-03 12:00:00');
INSERT INTO users (Name, date) values ('田中', '2017-02-03 13:00:00');

サービスアカウント作成

[IAMと管理]-[サービスアカウント]を選択し、サービスアカウントを作成します。

スクリーンショット 2020-02-04 10.07.10.png

権限は、以下の通りです。
・Cloud SQL クライアント
・Cloud SQL 編集者
スクリーンショット 2020-02-04 10.08.18.png

キーを作成します。
キーのタイプが[JSON]になっていることを確認してください。
スクリーンショット 2020-02-04 10.08.33.png

スクリーンショット 2020-02-04 10.08.42.png

ローカル環境の作成

環境変数の設定

GOOGLE_APPLICATION_CREDENTIALS環境変数には、作成したサービスアカウントの秘密鍵へのパスを設定します。

export GOOGLE_APPLICATION_CREDENTIALS=xxxxx.json

ソース

main.go
package main

import (
    "log"
    "fmt"
    "time"
    cloudsqlproxy "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql"
    "github.com/go-sql-driver/mysql"
)

func main() {
    if err := showRecords("インスタンス名", "データベース", "ユーザ名", "パスワード"); err != nil {
        log.Fatal(err)
    }
}

func showRecords(dbAddress, dbName, dbUser, dbPassword string) error {
    // 接続するだけなら以下のコードになります。
    // db, err := cloudsqlproxy.DialPassword(dbAddress, dbUser, dbPassword)

    // 詳細に設定したい場合は以下のコードになります。
    db, err := cloudsqlproxy.DialCfg(&mysql.Config{
        Addr:      dbAddress,  // インスタンス接続名
        DBName:    dbName,     // データベース名
        User:      dbUser,     // ユーザ名
        Passwd:    dbPassword, // ユーザパスワード
        Net:       "cloudsql", // Cloud SQL Proxy で接続する場合は cloudsql 固定です
        ParseTime: true,       // DATE/DATETIME 型を time.Time へパースする
        TLSConfig: "",         // TLSConfig は空文字を設定しなければなりません
        AllowNativePasswords: true, // <- これがないと、「this user requires mysql native password authentication」エラー
    })
    if err != nil {
        return err
    }
    defer db.Close()

    rows, err := db.Query("SELECT * FROM users")
    if err != nil {
        return err
    }
    defer rows.Close()

    for rows.Next() {
        var Name string
        var date time.Time
        var ID int64
        if err := rows.Scan(&ID, &Name, &date); err != nil {
            return err
        }
        fmt.Printf("%d\t%s\t%s\n", ID, Name, date.Format(time.RFC3339))
    }

    return nil
}

 インスタンス名

インスタンス名は、以下の[インスタンス接続名]を設定します。
スクリーンショット 2020-02-04 10.40.55.png

参考

Cloud SQL Proxy を Golang のパッケージとして使用する
golang mysql driverで `this user requires mysql native password authentication.
GCPのCloud Shellを使ってCloud SQLインスタンスに接続する方法

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6