MySQLのこと。

MySQLのことについてまとめているブログ。他人に見せる用でもなく、自分の勉強備忘録。検索インデックスも外してるので、辿りついた方・・・ようこそ。そんな大した情報ないですよ?!たまにアルゴリズムの練習も

CloudSQLでデータ連携用ダミーデータベースを作る

CloudSQLの環境設定

ここではGCPのCloudSQLに、イベントスケジューラーを使った擬似テーブルを構築する。そして、MySQLワークベンチやTableauなどから確認する手順をまとめておく。書きを参考にしている。

インスタンスの作成

まずはインスタンスを作成する。 f:id:AZUMINO:20200517151432p:plain

ここではデータ連携のテストするためのデータベースなので、インスタンスMySQLの一番安いものを使っている。

f:id:AZUMINO:20200517151722p:plain

MySQL第2世代のインスタンス料金は、インスタンスが実行されている間、1分ごとに課金される。ここでは、アイオワus-central1db-f1-micro*を使用する。料金はこんな感じ。詳細はドキュメントを参照。他には「ストレージとネットワークの料金」もかかる。

f:id:AZUMINO:20200517162716p:plain

設定はこんなかんじ。

f:id:AZUMINO:20200517151843p:plain

event_schedulerはここでONにする。CloudSQLは、MySQLのSUPER権限が制限された条件付きのrootユーザーなので、event_schedulerをコンソールからアクティブにできないが、ここで設定できる。

f:id:AZUMINO:20200517151914p:plain

このあとはユーザーパネルからユーザーを作っておく。

  • user:user01
  • pass:******

f:id:AZUMINO:20200517152445p:plain

次には接続パネルからローカルからMySQLワークベンチで接続できるようにIPアドレスを許可する。下記でIPアドレスは調べられる。

f:id:AZUMINO:20200517152741p:plain

これでローカル環境のMySQLワークベンチからCloudSQLに接続できるようになったので、コネクションを作る際に必要なIPアドレスを、概要のところからコピーしておく。

f:id:AZUMINO:20200517152946p:plain

MySQLワークベンチのコネクションでは下記の通り入力する。

f:id:AZUMINO:20200517153159p:plain

あとはMySQLワークベンチからイベントスケジューラーの設定を行う。動画のように、Cloud Shellからgcloud beta sql connectコマンドを使うと、今はproxyの設定をしないと行けないので、めんどくさいのでやめた。もしくは管理画面のCloud Shellからであれば簡単に操作できると思う。起動すると、gcloud sql connect cloudsql-mysql --user=root --quietがデフォルトで入力されていると思われる。

f:id:AZUMINO:20200519195737p:plain

create database event_auto_insert;
use event_auto_insert;

CREATE TABLE event_auto_insert.logs (
   id INT AUTO_INCREMENT,
    datetime DATETIME NOT NULL,
    value1 INT NOT NULL,
    value2 INT NOT NULL,
    category varchar(1) NOT NULL,
    flg INT NOT NULL,
    PRIMARY KEY (id)
);

create event logs
    on schedule every 60 SECOND
    starts now()
    do INSERT INTO event_auto_insert.logs(datetime, value1, value2, category, flg) VALUES (
     NOW(),
     CASE WHEN MONTH(NOW()) IN (1,2,3) THEN FLOOR(RAND() * (100 * -1))
     WHEN MONTH(NOW()) IN (4,5,6) THEN FLOOR(RAND() * (10 * -2))
     WHEN MONTH(NOW()) IN (7,8,9) THEN FLOOR(RAND() * (100 * 1))
     ELSE FLOOR(RAND() * (10 * 2)) END,
     FLOOR(RAND() * 100),
     SUBSTRING(MD5(RAND()), 1, 1),
     floor(rand() * 2)
     );

こんな感じで自動でインサートされる。

f:id:AZUMINO:20200517153607p:plain

Tableauでもコネクションできるか確認しておく。

f:id:AZUMINO:20200517153803p:plain

問題なさそう。

f:id:AZUMINO:20200517153900p:plain

以上でおしまい。検証し終わったら、課金対象になるので、インスタンスは停止しておく。あとはいろんなシステムと連携させるためにデータ供給元として利用する。ちなみにテストなので、料金はこんな感じになるかと。

f:id:AZUMINO:20200517163251p:plain