GCPのデータベースサービス Cloud SQL
コマンドラインインターフェースでCloud SQLを始める
ここまで、Cloud SQLのWebインターフェースでの操作方法を紹介してきました。Webインターフェースで作成したものと同じ設定のインスタンスを、今度はコマンドラインから作成する方法を紹介します。コマンドラインでCloud SQLを使う際には、gcloudコマンドを利用します。
まず、gcloudコマンドで利用するアカウントとプロジェクトをセットします。
$ gcloud auth login $ gcloud config set project <プロジェクトID>
次に、インスタンスを作成します。インスタンスを作成するコマンドは次の通りです。
$ gcloud sql instances create <インスタンス名> <オプション>
WebインターフェースではD0タイプのインスタンスをアジア地域に作成したので、ここでも同じ設定で作成します。インスタンス名は「gcp-mukai-cli」としました。この設定でインスタンスを作成するためにオプションをつけると、コマンドは次のようになります。
$ gcloud sql instances create gcp-mukai-cli --tier="D0" --region="asia-east1"
少し待つと、インスタンスができあがります。続いてIPv4アドレスの割り当てと、接続できるIPアドレスの追加を行います。既に起動しているインスタンスの設定を変更するコマンドは、次の通りです。
$ gcloud sql instances patch <インスタンス名> <オプション>
IPv4アドレスを割り当てるオプションは、「--assign-ip」、接続元IPアドレスを追加するオプションは「--authorized-networks <ネットワーク>」です。IPv4アドレスの割り当てと接続元ネットワークの追加を同時に行うコマンドは次のようになります。
$ gcloud sql instances patch gcp-mukai-cli --assign-ip --authorized-networks <CIDR表記>
「patch」で指定できるオプションは基本的には「create」でも指定可能なので、インスタンス作成時点にIPv4アドレスの割り当てや接続元IPアドレスの追加も可能です。
引き続きユーザの作成を行います。2015年5月時点では、gcloudコマンドにはCloud SQLにユーザを作成する機能が提供されていないため、rootユーザでCloud SQLに接続してからMySQLでユーザを作成します。
まずは、rootユーザのパスワードを設定します。
$ gcloud sql instances set-root-password gcp-mukai-cli -p <パスワード>
次に、作成したパスワードでMySQLに接続します。
$ mysql -h <割り当てられたIPアドレス> -u root -p
引き続き、MySQLでデータベースを作成し、そのデータベースへの全権限を持つユーザを作成します。なお、Cloud SQLのrootユーザにはALLの権限がないため、データベース指定なしのGRANT ALLで全権限を付与することはできません。
mysql > CREATE DATABASE testdb; mysql > GRANT ALL ON testdb.* to mukai@'%'; mysql > SET PASSWORD FOR mukai@'%'=password('<パスワード>');
Cloud SQLインスタンスの作成方法は以上です。あとは通常のMySQLと同じように、ご自身のアプリケーションから接続して使うだけです。
Google App EngineでCloud SQLを使う
Google App Engine(以下、GAE)からCloud SQLを利用する場合は、自動的にユーザはroot、接続元のホストはlocalhostとなります。また、ホストとしてIPアドレスを使用する必要はなく、Unixソケットを利用して接続が可能です。以下、GAE PythonでCloud SQLを使う際の要点をまとめます。
MySQLdbモジュールのインポート
import MySQLdb
設定ファイル(app.yaml)でMySQLdbライブラリを定義しておけば、新たにインストールする必要はありません。
Cloud SQLへ接続
db = MySQLdb.connect(unix_socket='/cloudsql/mukaidemo:usa', db='guestbook', user='root', charset='utf8')
「mukaidemo:usa」はCloud SQLのインスタンスIDです。GAEで使用するCloud SQLインスタンスは、GAEアプリケーションが置かれている地域(米国またはヨーロッパ)と同じになるようにしてください。Mukaidemoアプリケーションは米国なので、Cloud SQLインスタンスの地域は米国を選択して作成しました。guestbookデータベースとentriesテーブルは、事前に作成しておきます。
SQLの実行
SQLの実行は、以下のように行います。
データの挿入(insert)
cursor = db.cursor() cursor.execute('INSERT INTO entries (guestName, content) VALUES (%s, %s)', (fname, content)) db.commit() db.close()
データの取得(select)
cursor = db.cursor() cursor.execute('SELECT guestName, content, entryID FROM entries') rows = cursor.fetchall()
公式ドキュメントにサンプルコードなど、GAEでの詳しい使い方が記載されていますので、参考にしてください。
レプリケーション設定とバックアップ
大規模システムのデータベースにおいて、レプリケーションは必要不可欠の機能の一つですが、Cloud SQLではレプリケーションの設定を簡単に行うことができます。
図10のCloud SQLインスタンス一覧画面で、マスターとするインスタンスをクリックします。そして、インスタンスの詳細画面の上部にある「リードレプリカを作成」ボタンをクリックします(図11)。
自動バックアップとバイナリログを有効にしていない場合は、「作成できません」という旨のメッセージが表示されます。その場合はインスタンスの編集ページ(図3)で「バックアップを有効にする」と「バイナリログ」にチェックを入れ、バックアップが作成されるまで待ちます。
バックアップを有効にしていると、図11の右下に表示されているように、バックアップの履歴が表示されます。こちらの「復元」ボタンからデータを復元することができます。
「リードレプリカを作成」ボタンをクリックすると、インスタンス作成時と同じ設定画面になり、詳細設定も同じように設定できます(図12)。データセンターの地域とMySQLのバージョンは、マスターと同じである必要があるため、変更できません。その他の設定項目もマスターと同じ値が設定されていますが、必要により変更してください。設定後、作成ボタンを押すとリードレプリカ(スレーブ)が作成されます(図13)。
なお、レプリカインスタンスはスタンドアローンのインスタンスに変更することができます。レプリカインスタンスの編集ページにて「レプリカのプロモート」ボタンを押すだけです。ただし、一度マスターにしてしまったインスタンスをレプリカに戻すことはできませんので、ご注意ください。
外部サーバーにCloud SQLのリードレプリカを置くことも可能ですが、ここでは設定方法の詳細は省きます。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Google Compute Engineで仮想マシンを作る
- MySQL Clusterにおけるレプリケーション環境構築例
- 初めてでも安心! OCIチュートリアルを活用して、MySQLのマネージド・データベース・サービスを体験してみよう
- Windows AzureでのMySQL = ClearDBを攻略しよう!
- Pythonで作られた便利なコマンドラインツール MySQL Utilities
- Amazon S3のライバル? Google Cloud Storageに触れてみる
- 【Azure Database座談会】識者が語るMySQL/PostgreSQLマネージドサービスのメリットとは
- MySQL Clusterのバックアップ/リストアの具体例
- 高可用性クラスタへの応用
- MySQL Enterprise Edition最新情報