Cloud SQLの概要を調べたのち、MySQLとSQL Serverで実践します。
概要
Cloud SQLと は
Google Cloud Platform 上のリレーショナル データベースの設定、維持、運用、管理を簡単にできるようにするフルマネージド データベース サービスです。Cloud SQL は、MySQL、PostgreSQL、SQL Server(現在はベータ版)で利用できるようです。
Cloud SQL Documentation | Google Cloud
活用用途
データサイズが比較的小さく(数百GB)、トランザクション処理が必要とされるケースで必要となります。BigQueryやBigTabelはトランザクションを担保しておりません。トランザクションを担保する必要があり、大規模データを扱う場合はCloud Spannerが良いようです。コストも高く、国内で使ってる企業だとメルカリとかになりそうです。
トランザクション | Cloud Spanner のドキュメント | Google Cloud
実践
実際に環境を作り試してみます。SQL ServerとMySQLを試します。
Cloud SQL (SQL Server)
まずはSQL Serverを試してみます。現在はベータ版のようで対応できてない機能は下記となります。
Cloud SQL for SQL Server features | Google Cloud
ローカル環境からプロキシサーバを通して、Cloud SQLにアクセスします。
About the Cloud SQL Proxy | Cloud SQL for SQL Server | Google Cloud
インスタンス構築
GCPコンソールの「SQL」より、「インスタンスを作成」を選びます。まずは「SQL Server」で作ります。
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
接続すると下記のようなメッセージが確認できます。
2020/02/12 17:15:11 New connection for "[project id ]:us-central1:my-instance2"
基本動作確認
簡単に動作確認してみます。
データベース作成
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に入れることを確認できました。
以上となります。