前からやってみたかった、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のインスタンスを作成します。
今回はMySQLを使っているのでMySQLを選びます。
インスタンスのユースケースを選ぶところになりますが、「開発」「ステージング」「本番」とあるうち、実際は本番だけど、まだそこまでガッツリとやらなくていいかなと思い、「開発」を選びました。
こんな感じにテキトーに入力して作成します。
作成できると、IPアドレスが振られるので確認しておきましょう。下の画像の「Primary IPv4アドレス」というところ。
これで、インスタンスの作成は完了です。まだ設定はこれからたくさんあります。
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側にもユーザを作成してあげます。
「ユーザーアカウント作成」から作成すると上の画像のようにwordpress_userというものを追加することができます。
また、wp-config.phpで定義されているDB_NAMEをメモして、これと同じ名前のデータベースをCloud SQL側に作成してあげます。
「データベースを作成」から作成すると上の画像のように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アドレス
ちゃんと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上のアカウントを追加してみてください。
ここにユーザを追加する前
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のモニタリングに変化があると思います。(反映に数分時間がかかると思います)
このようにMySQLクエリ数が瞬間的に多くなるので、ちゃんと接続しているのが確認できると思います。
3.古いMySQLサーバを落とそう
以前使っていたWordPressのローカルホストの方のMySQLサーバを止めちゃえば、よりわかりやすいですね。
$ service mysql stop
これで、完了です。実行ユーザによってはsudoをつけないといけないかもしれないです。
この状態でローカルホストに対してmysqlコマンドを叩いても接続できません。
それでもWordPressは正常に表示できると思います。
これだけ確認すれば安心ですね!
最後に
以上がWordPressのデータベースをCloud SQLに移行させる手順でした。
これで、DBがマネージド・サービスに変わるのでちょっと安心ですね!お財布がちょっとつらいけど。。