case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

Cloud SQLの概要と実践

Cloud SQLの概要を調べたのち、MySQLSQL Serverで実践します。

概要

Cloud SQLと は

Google Cloud Platform 上のリレーショナル データベースの設定、維持、運用、管理を簡単にできるようにするフルマネージド データベース サービスです。Cloud SQL は、MySQLPostgreSQLSQL Server(現在はベータ版)で利用できるようです。
Cloud SQL Documentation  |  Google Cloud

活用用途

データサイズが比較的小さく(数百GB)、トランザクション処理が必要とされるケースで必要となります。BigQueryやBigTabelはトランザクションを担保しておりません。トランザクションを担保する必要があり、大規模データを扱う場合はCloud Spannerが良いようです。コストも高く、国内で使ってる企業だとメルカリとかになりそうです。
トランザクション  |  Cloud Spanner のドキュメント  |  Google Cloud

Cloud SQLの料金体系

他のGCPのDBと比較すると費用の観点だと良さそうです。大規模なデータを扱わないようであればCloud SQLが良さそうです。

Cloud SQL の料金  |  Cloud SQL ドキュメント  |  Google Cloud

実践

実際に環境を作り試してみます。SQL ServerMySQLを試します。

Cloud SQL (SQL Server)

まずはSQL Serverを試してみます。現在はベータ版のようで対応できてない機能は下記となります。
Cloud SQL for SQL Server features  |  Google Cloud
ローカル環境からプロキシサーバを通して、Cloud SQLにアクセスします。
f:id:casekblog:20200212185247p:plain
About the Cloud SQL Proxy  |  Cloud SQL for SQL Server  |  Google Cloud

インスタンス構築

GCPコンソールの「SQL」より、「インスタンスを作成」を選びます。まずは「SQL Server」で作ります。
f:id:casekblog:20200212192748p:plain

Cloud SDKをインストール

プロキシサーバをローカルに立てるために、Cloud SDKをローカルにインストールし、初期化と認証を行います。
Google Cloud SDK のドキュメント  |  Google Cloud

$ gcloud init
$ gcloud auth login

Google Cloud SDK のドキュメント  |  Google Cloud
About the Cloud SQL Proxy  |  Cloud SQL for SQL Server  |  Google Cloud

ローカルPCにプロキシをインストール

About the Cloud SQL Proxy  |  Cloud SQL for SQL Server  |  Google Cloud

プロキシを起動

インストールできたらプロキシを起動させます。

$ ./cloud_sql_proxy -instances=[project id ]:us-central1:myinstance2=tcp:1433
2020/02/09 07:08:37 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument
2020/02/09 07:08:39 Listening on 127.0.0.1:1433 for [project id ]:us-central1:myinstance2
2020/02/09 07:08:39 Ready for new connections
接続確認

DBeaverを使ってみます。「SQL Server」を選び接続情報を入力します。
Connect to SQL Server with DBeaver
f:id:casekblog:20200212193210p:plain
接続すると下記のようなメッセージが確認できます。

2020/02/12 17:15:11 New connection for "[project id ]:us-central1:my-instance2"

Install SQL Server on a Mac

基本動作確認

簡単に動作確認してみます。

データベース作成

create database testdb;

データベース切り替え

use testdb;

テーブル作成

create table guestbook(
    entryID int identity(1,1) primary key,
    guestname varchar(255),
    content varchar(255),
);

データ挿入

INSERT INTO guestbook (guestName, content) values ('first guest', 'I got here!');
INSERT INTO guestbook (guestName, content) values ('second guest', 'Me too!');

データ取得

SELECT * FROM guestbook 

データ更新

UPDATE
  guestbook
SET
  guestname = 'first guest update',
  content = 'update'
WHERE entryID = 1

データ削除

delete * from guestbook

テーブル削除

drop table guestbook

Cloud SQL (MySQL)

次はMySQLを試します。
Cloud SQL for MySQL のクイックスタート  |  Google Cloud

基本動作確認
$ gcloud sql connect myinstance --user=root

データベース作成

CREATE DATABASE guestbook;

データベース切り替え

use guestbook;

テーブル作成

CREATE TABLE entries (guestName VARCHAR(255), content VARCHAR(255),
    entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID));
    INSERT INTO entries (guestName, content) values ("first guest", "I got here!");
    INSERT INTO entries (guestName, content) values ("second guest", "Me too!");

データ取得

SELECT * FROM entries;

+--------------+-------------------+---------+
| guestName    | content           | entryID |
+--------------+-------------------+---------+
| first guest  | I got here!       |       1 |
| second guest | Me too!           |       2 |
+--------------+-------------------+---------+
2 rows in set (0.00 sec)
mysql>
GCEから接続

GCEからCloud SQLを使ってみます。
GCEから接続するには下記の設定が秘帖です。

Cloud SQLのプライベートIPアドレスを使えるようになります。

$ sudo yum install mysql
$ mysql --host=[CLOUD_SQL_PRIVATE_IP_ADDR] --user=root --password'

mysql> show tables;
+---------------------+
| Tables_in_guestbook |
+---------------------+
| entries             |
+---------------------+
1 row in set (0.00 sec)

GCE環境からCloud SQLに入れることを確認できました。

以上となります。