[Qwiklabs]MySQLデータベースのGoogle Cloud SQLへの移行

PR

こんにちは、こえじまです。

GCPのProfessional Cloud Architect受験に向け、Qwiklabsのハンズオンを勉強中です。

今回はMySQLデータベースのGoogle Cloud SQLへの移行(GSP306)の解説をします。

シナリオ(抜粋)

あなたのWordPressブログは、現在ローカルのデータベースを参照しています。

それをGoogle Cloud SQLに移行しましょう。

既存のWordPress 環境は/var/www/html/wordpressディレクトリにインストールされています。

このディレクトリは、ラボですでに実行されているblogというインスタンス内にあります。

初期状態でアクセスすると以下の画面が出ます。

この画面が出ることを確認してからラボを開始しましょう。

デモページ
ワンポイント
アクセス先はhttp://{External IP}/wordpressです。
httpsにしたり、wordpressを忘れたりしないようにしましょう。
補足
最初数分はアクセスしても画面が表示されませんでした。
デプロイが完了するまで少し待ってから再度画面を更新すると表示されるようになるので待ちましょう。

では、やっていきましょう。

Task1. Cloud SQLインスタンスを作成する

ナビゲーションメニューのSQLを選択し、画面中部のCREATE INSTANCEをクリック。

Cloud SQLの作成

Choose MySQLをクリック。

MySQLを選択

以下を入力し、Createをクリック。

  • Instance ID: wpdb(なんでもいいです)
  • Root password: password123(なんでもいいです)
  • Region: us-central1(デフォルト)
  • Zone: Any(デフォルト)
  • Database version: MySQL 5.7(デフォルト)
wpdbの確認
補足
Instance IDは後で何回か出てきますが、Root passwordはもう出てこないので本当になんでも良いです。

Cloud Shellでやるなら以下コマンドで出来ます。

gcloud sql instances create wpdb --region=us-central1 --root-password=password123 --database-version=MYSQL_5_7

参考:gcloud sql instances create  |  Cloud SDK Documentation  |  Google Cloud

Cloud SQLインスタンス作成には10分弱かかるので、その間に次のMySQLのエクスポートをしておきましょう。

Task2. MySQLのデータをエクスポートする

ざっくり手順としては、blogインスタンスにSSH接続、MySQLをダンプ、それをCloud Storageにアップロードという流れです。

まずはナビゲーションメニューのCompute Engine > VM instancesをクリックしましょう。

blogインスタンスのSSHボタンをクリックして、SSHで接続します。

# MySQLをダンプ
mysqldump --add-drop-table -h localhost -u blogadmin -p \
--hex-blob --default-character-set utf8mb4 wordpress > wordpress.sql

# Passwordを求められるのでPassword1*を入力

# PROJECT名を変数に保存
export PROJECT=$(gcloud info --format='value(config.project)')

# GCSバケットを作成
gsutil mb gs://${PROJECT}

# GCSにダンプしたファイルを保存
gsutil cp ./wordpress.sql gs://${PROJECT}
補足
mysqldumpの各オプションは下記の通りです。
–add-drop-table: 出力ファイルの先頭に下記行を追加する
DROP TABLE IF EXISTS `tablename`;
今回はCloud SQL側のデータベースが空っぽなので無くて大丈夫ですが一応入れておきます。

–hex-blob: バイナリを含むテーブルをダンプする時に16進数の形式でダンプする
不要かもしれませんが、バイナリが含まれているかもしれないので一応入れています。

–default-character-set: 文字コードを指定する
後に出てくるwp-config.phpにutf8mb4と指定されているので、エクスポート時も指定しておきます。

参考:
Backing Up Your Database | WordPress.org
mysql – Mysqldump add drop table? – WordPress Development Stack Exchange
mysqldump で default-character-set とか hex-blob とか – ngyukiの日記

Task3. Cloud SQLにインポートする

Cloud SQLインスタンスが作成されたのを確認しましょう。

ナビゲーションメニューのSQLをクリックし、wpdbがあることを確認します。

wpdbの確認

GUIでやる場合

wpdbをクリックし、左メニューのDatabasesをクリック。

青いボタンのCreate Databasesをクリックします。

Create Databasesをクリック

以下を入力し、CREATEをクリック。

  • Database name: wordpress
  • Character set: utf8mb4
Databaseの作成画面

wordpressという名前のDatabaseが作成されたことを確認しておきましょう。

左メニューのOverviewをクリックし、画面上部のIMPORTをクリック。

IMPORTをクリック

以下を入力してImportをクリック。

  • Cloud Storage file: 先程保存したGCSのwordpress.sql
  • Format of import: SQL(デフォルト)
  • Database: wordpress
Importの設定画面

Cloud Shellでやる場合

Cloud Shellで実施する場合は概ね以下の通りなのですが、どうやってもCloud SQLのService AccountにGCSのRoleを付与することが出来ませんでした・・・。

どなたか成功しましたら教えてください・・・。

# wordpressデータベースを作成
gcloud sql databases create wordpress --instance=wpdb --charset=utf8mb4

# PROJECT名を変数に保存
export PROJECT=$(gcloud info --format='value(config.project)')

# Service Accountの確認
gcloud sql instances describe wpdb | grep serviceAccount
#-> serviceAccountEmailAddress: [email protected]

# 付与方法分からず。。

# wordpressデータベースにエクスポートしたwordpress.sqlをインポート
gcloud sql import sql wpdb gs://$PROJECT/wordpress.sql --database=wordpress

参考:Importing data into Cloud SQL  |  Cloud SQL for MySQL  |  Google Cloud

補足
匿名の方から以下のコメントをいただき、Cloud Shellでは出来ないことが分かりました。ImportはGUIから実施しましょう。

### いただいたコメント ###
この件ですが、qwiklabsで払い出されるアカウントに以下のロールしか割当たってないため、サービスアカウントにロールを追加することができません。

App Engine Admin
BigQuery Admin
Compute Storage Admin
Editor
Source Repository Administrator
Viewer

そのため、この手順はGUI操作でしか、実施できないみたいです。

Task4. WordPressを再構成し、Cloud SQLに接続する

Cloud SQLへの接続を許可する

ナビゲーションメニューのSQLをクリックし、作成したwpdbを選択します。

左メニューのCONNECTIONSをクリックし、Public IPにチェックが入っていることを確認します。

Public IPのチェックを確認

Add networkをクリックし、以下を入力してDoneをクリック。

  • Name: blog(なんでもいいです)
  • Network: blogインスタンスのExternal IP
Add networkの設定

Saveをクリック。

ワンポイント
本来はPrivate IPで接続するのがセキュリティ的には正しいですが、今回はその設定をする権限が無いので、やむなくPublic IPでの接続としています。
ワンポイント
lab-monitorのExternal IPか、blogのExternal IPのどちらか一方でも入力されていれば得点になるみたいですが、blogの方を入力しないと次のタスクがクリアできないので、blogのExternal IPは必ず登録しましょう。

接続用ユーザーの作成

blogインスタンスから接続するためのユーザーをwpdbに作成します。

左メニューのUsersをクリックし、画面中部のCreate user accountをクリック。

ユーザーを作成

以下を入力し、CREATEをクリック。

  • User name: blogadmin
  • Password: Password1*
ユーザー作成画面

Cloud Shellなら以下のコマンドで出来ます。

# Userの作成
gcloud sql users create blogadmin --instance=wpdb --password=Password1*

blogadminユーザーが作成されたことを確認しておきましょう。

blogadminユーザーを確認

wp-config.phpの編集

ナビゲーションメニューのCompute Engine > VM instancesをクリック。

blogインスタンスのSSHボタンをクリックして、SSHで接続します。

# やらなくても良いですが、分かりやすくするためMySQLをストップ
sudo service mysql stop

# MySQLがストップしたことを確認
sudo service mysql status
#-> Active: inactiveになってればOK

# wp-config.phpを編集
sudo vi /var/www/html/wordpress/wp-config.php

# DB_HOSTをCloud SQLのExternal IPに変更(下記画像参照)

# apaceh2のrestart
sudo service apache2 restart
wp-configの設定

wp-config.php変更後もWordpressにアクセス出来ることを確認しましょう。

デモページ

これで全タスク完了です。

完了!

お疲れさまでした!

このラボが含まれる、Cloud Architecture: Design, Implement, and Manageのクエスト解説は次の記事でまとめています。

良かったらそちらもご覧ください。

[Qwiklabs]Cloud Architecture: Design, Implement, and Manageの解説

2020年6月17日

PR

2 件のコメント

  • 大変参考になりました。
    ありがとうございます。

    >Cloud Shellで実施する場合は概ね以下の通りなのですが、どうやってもCloud SQLの>Service AccountにGCSのRoleを付与することが出来ませんでした・・・。
    >
    >どなたか成功しましたら教えてください・・・。

    この件ですが、qwiklabsで払い出されるアカウントに以下のロールしか割当たってないため、
    サービスアカウントにロールを追加することができません。

    App Engine Admin
    BigQuery Admin
    Compute Storage Admin
    Editor
    Source Repository Administrator
    Viewer

    そのため、この手順はGUI操作でしか、実施できないみたいです。

    • 匿名さん

      コメントありがとうございます。
      参考になったとのこと、大変嬉しいです。

      やはりCloud Shellからは出来ないんですね・・・。
      記事本文に補足として記載させていただきました。

  • コメントを残す

    メールアドレスが公開されることはありません。