ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。プログラム&ロボット大好きなポンコツが日々の記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

WordPressのDBをCloud SQLに置き換える

前からやってみたかった、WordPressのデータベースとして使っているMySQLをGoogle Cloud SQLに移行する計画、とうとう今回実行することができました。(やる気の問題)

ということで、無事、Cloud SQLでこのブログが動くようになったので、やり方を紹介したいと思います。

 

なんでCloud SQLなの?

そもそも、なぜCloud SQLなのか?

当初は、VMのインスタンス(このブログではCompute Engine)上でMySQLサーバを起動して、そこにデータを載せておく。ということをしていました。

  • ただ、このCompute Engineっていつ壊れるかわからないじゃん?
  • バックアップ取るのもめんどくさいじゃん?
  • 容量が大きくなったらどうするの?考えるのめんどくさいじゃん?

あと、Google Cloud Spanerじゃないのは、このブログがそこまで大規模じゃないこと。お手軽なのはGoogle Cloud SQLってGoogleさんの方に教えてもらったような気がするので、今回はCloud SQLを使いました。

個人的なCloud SQLのメリットはその他にも。

  • 容量を気にしなくていい。足りなくなったらコンソールからポチッと増やすだけ。
  • バックアップも自動で勝手にやってくれる。
  • メンテナンスも勝手にやってくれる。ただどのタイミングで入るかってのがわからないのがCloud SQLのよくないところらしい。
  • モニタリングも簡単に見れる。

ここらへんがマネージド・サービスのいいところですよね。

 

Cloud SQLにインスタンスを作成する

GCPのコンソールからCloud SQLのインスタンスを作成します。

f:id:ponkotsu0605:20190422014146p:plain

今回はMySQLを使っているのでMySQLを選びます。

インスタンスのユースケースを選ぶところになりますが、「開発」「ステージング」「本番」とあるうち、実際は本番だけど、まだそこまでガッツリとやらなくていいかなと思い、「開発」を選びました。

f:id:ponkotsu0605:20190422014213p:plain

こんな感じにテキトーに入力して作成します。

作成できると、IPアドレスが振られるので確認しておきましょう。下の画像の「Primary IPv4アドレス」というところ。

f:id:ponkotsu0605:20190422014239p:plain

これで、インスタンスの作成は完了です。まだ設定はこれからたくさんあります。

 

Cloud SQLの設定をしよう

WordPressサーバ上で動いているMySQLの設定をCloud SQLの方に設定してみよう。

まずはWordPressサーバにSSHして入り込みましょう。

wp-config.phpを開きます。自分の場合は/var/www/html/wp-config.phpというところにあります。

...

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wpdatabase');

/** MySQL database username */
define('DB_USER', 'wordpress_user');

/** MySQL database password */
define('DB_PASSWORD', '**********');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

...

上の方にMySQLの設定が書いてあると思います。自分の場合は25行目から書いてありました。

ここに定義されているDB_USERとDB_PASSWORDをメモして、これと同じような名前、パスワードでCloud SQL側にもユーザを作成してあげます。

f:id:ponkotsu0605:20190422014323p:plain

「ユーザーアカウント作成」から作成すると上の画像のようにwordpress_userというものを追加することができます。

また、wp-config.phpで定義されているDB_NAMEをメモして、これと同じ名前のデータベースをCloud SQL側に作成してあげます。

f:id:ponkotsu0605:20190422014351p:plain

「データベースを作成」から作成すると上の画像のようにwpdatabaseというものを追加することができます。

 

Cloud SQLに接続してみる

作成したMySQLサーバであるCloud SQLのインスタンスに接続できるか、いったん確認してみましょう。

WordPressのサーバにSSHで入り込んで以下のようにmysqlコマンドを叩いてみましょう。

$ mysql -u[ユーザ名] -p[パスワード] -h[Cloud SQLのIPアドレス]

ユーザ名:wp-config.phpのDB_USERで定義されている名前

パスワード:wp-config.phpのDB_PASSWORDで定義されている文字列

Cloud SQLのIPアドレス:作成直後にメモしたCloud SQLのインスタンスのIPアドレス

f:id:ponkotsu0605:20190422014429p:plain

ちゃんとwpdatabaseというデータベースができていることが確認できます。

 

WordPressのデータをCloud SQLに移行する

さて、データベースができてしまえば後はもう少しです!

WordPressのデータをCloud SQLに持っていきましょう。

以下のようにmysqldumpコマンドを使ってWordPressのデータをファイルに出力します。ここで気をつけないといけないのは、WordPressサーバのローカルホストに対してmysqldumpをしています。

$ mysqldump -u[ユーザ名] -p[パスワード] [DB名] > wpdatabase_dump.sql

そして、ダンプを取ったデータをCloud SQL側のMySQLに流し込みます。

mysql -u[ユーザ名] -p[パスワード] -h[Cloud SQLのIPアドレス] -D[DB名] < wpdatabase_dump.sql

 

以下のように、wpdatabaseのデータベースにwordpressのデータが入っていることが確認できると思います。

mysql> use wpdatabase
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------------+
| Tables_in_wpdatabase |
+------------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_popularpostsdata |
| wp_popularpostssummary |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
| wp_yoast_seo_links |
| wp_yoast_seo_meta |
+------------------------+
16 rows in set (0.00 sec)

これで、Cloud SQL側の準備も完了です。

あとは、WordPressからCloud SQLを参照するように設定してあげるだけです。

 

WordPressの設定を書き換える

WordPressから参照するMySQLをローカルホストからCloud SQLに変更してあげます。

wp-config.phpを開き、DB_HOSTを書き換えてあげます。作成したCloud SQLのインスタンスのIPアドレスに書き換えてあげます。

 

...

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wpdatabase');

/** MySQL database username */
define('DB_USER', 'wordpress_user');

/** MySQL database password */
define('DB_PASSWORD', '**********');

/** MySQL hostname */
define('DB_HOST', '35.***.***.***');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

...

これで保存して終わりです。

これでWordPressのサイトをリロードしてみましょう。問題なく変わらず表示されればおっけーです。

問題ない場合って、何が変わったのかよくわからないと思うので、設定が変わったことの確認方法を紹介したいと思います。

1.WordPressのユーザを作成して確認してみる

WordPress上のアカウントを追加してみてください。

f:id:ponkotsu0605:20190422014545p:plain

ここにユーザを追加する前

mysql> select ID,user_login,user_nicename from wp_users;
+----+------------+---------------+
| ID | user_login | user_nicename |
+----+------------+---------------+
| 1 | admin | admin |
+----+------------+---------------+
1 row in set (0.00 sec)

ユーザを追加した後

mysql> select ID,user_login,user_nicename from wp_users;
+----+------------+---------------+
| ID | user_login | user_nicename |
+----+------------+---------------+
| 1 | admin | admin |
| 2 | guest | guest |
+----+------------+---------------+
2 rows in set (0.00 sec)

このようにユーザが追加されていることが確認できます。

2.負荷をかけてみよう

すごい無理やりですが、WordPressサイトをたくさんリロードしてみましょう(F5アタックですね)

するとCloud SQLのモニタリングに変化があると思います。(反映に数分時間がかかると思います)

f:id:ponkotsu0605:20190422014622p:plain

このようにMySQLクエリ数が瞬間的に多くなるので、ちゃんと接続しているのが確認できると思います。

3.古いMySQLサーバを落とそう

以前使っていたWordPressのローカルホストの方のMySQLサーバを止めちゃえば、よりわかりやすいですね。

$ service mysql stop

これで、完了です。実行ユーザによってはsudoをつけないといけないかもしれないです。

この状態でローカルホストに対してmysqlコマンドを叩いても接続できません。

それでもWordPressは正常に表示できると思います。

 

これだけ確認すれば安心ですね!

 

最後に

以上がWordPressのデータベースをCloud SQLに移行させる手順でした。

これで、DBがマネージド・サービスに変わるのでちょっと安心ですね!お財布がちょっとつらいけど。。