こんにちは、こえじまです。
GCPのProfessional Cloud Architect受験に向け、Qwiklabsのハンズオンを勉強中です。
今回はMySQLデータベースのGoogle Cloud SQLへの移行(GSP306)の解説をします。
シナリオ(抜粋)
あなたのWordPressブログは、現在ローカルのデータベースを参照しています。
それをGoogle Cloud SQLに移行しましょう。
既存のWordPress 環境は/var/www/html/wordpress
ディレクトリにインストールされています。
このディレクトリは、ラボですでに実行されているblog
というインスタンス内にあります。
初期状態でアクセスすると以下の画面が出ます。
この画面が出ることを確認してからラボを開始しましょう。
[aside]ワンポイント
アクセス先はhttp://{External IP}/wordpressです。
httpsにしたり、wordpressを忘れたりしないようにしましょう。
[/aside]
[aside]補足
最初数分はアクセスしても画面が表示されませんでした。
デプロイが完了するまで少し待ってから再度画面を更新すると表示されるようになるので待ちましょう。
[/aside]
では、やっていきましょう。
Task1. Cloud SQLインスタンスを作成する
ナビゲーションメニューのSQLを選択し、画面中部のCREATE INSTANCEをクリック。
Choose MySQLをクリック。
以下を入力し、Createをクリック。
- Instance ID: wpdb(なんでもいいです)
- Root password: password123(なんでもいいです)
- Region: us-central1(デフォルト)
- Zone: Any(デフォルト)
- Database version: MySQL 5.7(デフォルト)
[aside]補足
Instance IDは後で何回か出てきますが、Root passwordはもう出てこないので本当になんでも良いです。
[/aside]
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}
[aside]補足
mysqldumpの各オプションは下記の通りです。
–add-drop-table: 出力ファイルの先頭に下記行を追加する
DROP TABLE IF EXISTS `tablename`;
今回はCloud SQL側のデータベースが空っぽなので無くて大丈夫ですが一応入れておきます。
–hex-blob: バイナリを含むテーブルをダンプする時に16進数の形式でダンプする
不要かもしれませんが、バイナリが含まれているかもしれないので一応入れています。
–default-character-set: 文字コードを指定する
後に出てくるwp-config.phpにutf8mb4と指定されているので、エクスポート時も指定しておきます。
[/aside]
参考:
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があることを確認します。
GUIでやる場合
wpdbをクリックし、左メニューのDatabasesをクリック。
青いボタンのCreate Databasesをクリックします。
以下を入力し、CREATEをクリック。
- Database name: wordpress
- Character set: utf8mb4
wordpressという名前のDatabaseが作成されたことを確認しておきましょう。
左メニューのOverviewをクリックし、画面上部のIMPORTをクリック。
以下を入力してImportをクリック。
- Cloud Storage file: 先程保存したGCSのwordpress.sql
- Format of import: SQL(デフォルト)
- Database: wordpress
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
[aside]補足
匿名の方から以下のコメントをいただき、Cloud Shellでは出来ないことが分かりました。ImportはGUIから実施しましょう。
### いただいたコメント ###
この件ですが、qwiklabsで払い出されるアカウントに以下のロールしか割当たってないため、サービスアカウントにロールを追加することができません。
App Engine Admin
BigQuery Admin
Compute Storage Admin
Editor
Source Repository Administrator
Viewer
そのため、この手順はGUI操作でしか、実施できないみたいです。
[/aside]
Task4. WordPressを再構成し、Cloud SQLに接続する
Cloud SQLへの接続を許可する
ナビゲーションメニューのSQLをクリックし、作成したwpdbを選択します。
左メニューのCONNECTIONSをクリックし、Public IPにチェックが入っていることを確認します。
Add networkをクリックし、以下を入力してDoneをクリック。
- Name: blog(なんでもいいです)
- Network: blogインスタンスのExternal IP
Saveをクリック。
[aside]ワンポイント
本来はPrivate IPで接続するのがセキュリティ的には正しいですが、今回はその設定をする権限が無いので、やむなくPublic IPでの接続としています。
[/aside]
[aside]ワンポイント
lab-monitorのExternal IPか、blogのExternal IPのどちらか一方でも入力されていれば得点になるみたいですが、blogの方を入力しないと次のタスクがクリアできないので、blogのExternal IPは必ず登録しましょう。
[/aside]
接続用ユーザーの作成
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ユーザーが作成されたことを確認しておきましょう。
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.php変更後もWordpressにアクセス出来ることを確認しましょう。
これで全タスク完了です。
お疲れさまでした!
このラボが含まれる、Cloud Architecture: Design, Implement, and Manageのクエスト解説は次の記事でまとめています。
良かったらそちらもご覧ください。
[kanren2 postid=”2317″]
コメント
大変参考になりました。
ありがとうございます。
>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からは出来ないんですね・・・。
記事本文に補足として記載させていただきました。