インフラエンジニアのための WordPress サーバーの移行・引っ越しガイド

クラウド
クラウド
スポンサーリンク

サーバーの老朽化やスペック不足などで WordPress をまったく別の新しいサーバーに移行・引っ越しすることがあります。クラウドサーバーが普及したのでこのような作業は少なくなると思っていましたが、オンプレミスで構築した古いサーバーからの移行や、本質的には意味のない政治的な理由で(^^;) サーバーの引っ越しが行われることが時々あります。そこで今回は、WordPress で作られたWEBサイトを別のサーバーに移行・引っ越しする際のポイントをまとめてみました。

移行作業の概要

移行作業の難易度にもよりますが、WordPressのデータ移行からサーバーの切り替えまでを一気にやってしまうと、動作確認にあまり時間をとれなかったり、なにより慌ただしくなってミスも増えますので(これは私だけかもしれませんが、、)「下準備」と「サーバーの切り替え」の二段階に分けて作業を進めることをオススメします。(この段階をフェーズ1、フェーズ2と呼ぶことがあります)

1)下準備(移行先のサーバー構築、WordPressのデータ移行、動作確認まで)
2)サーバーの切り替え(DNSサーバーの設定変更)

段取り八分とはよくいったもので、下準備の作業がほぼ大半を占めています。動作確認までが確実にできていれば、完全無停止でサーバーの移行・引っ越しをすることができます。

移行・引っ越し元のサーバーの調査

まずはじめに行うのは、移行・引っ越し元サーバーの調査です、調査の主な対象は次の通りです。

  • PHPのバージョン
  • PHPの拡張モジュール
  • MySQLのバージョン
  • WEBサーバーのソフトウェアとバージョン
  • WEBサーバーの実行ユーザー(uid)
  • WEBサーバーの設定(ドキュメントルート・SSLの有無など)
  • WordPress のデーターベース名とアカウント

WordPress のデーターベース名とアカウントは、WordPressがインストールされたディレクトリ(WEBサーバーのドキュメントルートになります)の直下もしくはその一つ上の階層にある「wp-config.php」で確認できます。

「wp-config.php」は、セキュリティ確保のため読取りユーザーを制限していることがありますので、読取りできない場合は root権限で確認します。

$ sudo cat wp-config.php
(略)
/** WordPress のためのデータベース名 */
define('DB_NAME', 'sample_db');
 
/** MySQL データベースのユーザー名 */
define('DB_USER', 'sample_user');
 
/** MySQL データベースのパスワード */
define('DB_PASSWORD', '<パスワード>');

移行・引っ越し先のサーバーの構築

調査した情報を参考にして、移行・引っ越し先のサーバーへ PHPやMySQLなどミドルウェアをインストールします。ミドルウェアのバージョンは、移行・引っ越し元のサーバーとまったく同じにする必要はありません。

WEBサーバーソフトウェアについては、移行・引っ越し元のサーバーと合わせておくと移行によるトラブルが少なくて済みます。移行元のWEBサーバーがApacheならApache、NginxならNginxをインストールします。

現時点(2017年6月7日)の WordPress4.7.x 日本語版の推奨動作環境は、以下の通りです。推奨のバージョンをインストールしておけば問題ないはず。なのですが、、、

・PHP バージョン 7 以上
・MySQL バージョン 5.6 以上 または MariaDB バージョン 10.0 以上

https://ja.wordpress.org/ より引用

実際の移行・引っ越しでは、WordPress をカスタマイズしすぎて最新版にアップグレードできない場合や、古いプラグインが最新の PHPに対応していなくてエラーになるなことなど、理想通りにいかないことが多々あります。セキュリティとのころあいを見てミドルウェアのバージョンを選定する必要な場合もあるでしょう。(これが WordPress の移行・引っ越しで一番やっかいなところです)

また、これはよく誤解されていることが多いのですが、移行先のサーバーに WordPress を新たにインストールする必要はありません。移行元のサーバーから WordPressがインストールされたディレクトを丸ごとコピーすればOKです。

WEBサーバーの実行ユーザーの確認

移行・引っ越し先のサーバー構築作業が終わったら WEBサーバーの実行ユーザー(uid)が、移行元のサーバーと一致していることを確認します。下は Apache httpd の実行ユーザーと uid です。

$ ps aux | grep httpd
apache 23243 0.0 1.5 544080 58856 ? S 03:41 0:00 /usr/sbin/httpd
↑実行ユーザー
 
$ id apache
uid=48(apache) gid=48(apache) groups=48(apache)

WEBサーバーの実行ユーザー(正確に言うと uid)が、移行元と移行先のサーバーで異なっていると、移行先のサーバーで WordPressからファイルの書換えができなくなることがありますので、そろえておくのが良いでしょう。

WordPress 用のデーターベースとMySQLユーザーの作成

WordPress 用のデーターベースとMySQLユーザーを作成しておきます。データベース名やユーザー名は、移行・引っ越し元のサーバーの「wp-config.php」で確認したものを指定します。

$ mysql -u root -p
CREATE DATABASE sample_db;
GRANT ALL ON sample_db.* TO 'sample_user'@'localhost' IDENTIFIED BY '<パスワード>';
quit

WordPress のデータ移行

WordPress のデータ移行はややこしそうなイメージがありますが、実は次の2つをコピーするだけで済んでしまいます。

  • WordPress ディレクトリ全体
  • WordPress データーベース

移行・引っ越し「元」のサーバーで実行

WordPress ディレクトリ全体は、オーナーやパーミッションを維持して移行先のサーバーにコピーします。tar コマンドでアーカイブしてコピーする場合は、root権限で実行することでオーナーやパーミッションを維持することができます。

$ sudo tar cvzf wordpress.tar.gz wordpress

WordPress データーベースは mysqldump コマンドで普通にダンプします。

$ mysqldump -u sample_user -p sample_db > sample_db.sql

以上2ファイルを、移行・引っ越し「先」のサーバーに scp などを使いセキュリティを確保してコピーします。

移行・引っ越し「先」のサーバーで実行

root権限で tar アーカイブを展開して、WEBサーバーのドキュメントルートに移動します。

$ sudo tar xvzf wordpress.tar.gz
$ sudo mv wordpress /var/www/

ダンプファイルをWordPress用のデーターベースに読込みます。

$ mysql -u sample_user -p sample_db < sample_db.sql

サーバーの切り替えの実施直前に再度このコピー作業が必要になりますので、可能であればこの一連コピー作業をスクリプト化しておくと、サーバーの切り替え作業を楽に行えます。

WordPress の動作確認

サーバーの細かい設定の違いによりうまく動作しないことも多々ありますので、サーバーを切り替える前に必ず WordPress の動作確認を行います。

移行先のサーバーのIPアドレスが「192.0.2.200」、WordPressサイトのドメイン名が「example.com」の場合、以下を手元のPCの hosts ファイルに追加することで、移行先の WordPressサイトを確認することができます。

sudo vi /etc/hosts

192.0.2.200 example.com

ついつい手薄になってしまう動作確認ですが、動作確認を確実に行うことはサーバーの移行・引っ越しが成功するか否かを左右する一番重要なポイントです。しっかり時間をとって必ず実施しましょう。

サーバーの切り替え

ここまででサーバー移行・引っ越しの第一段階「下準備」が終わりました。ここから第二段階「サーバーの切り替え」になります。

サーバーの切り替え時間帯の告知

サーバーの切り替えは無停止で行えますが、切り替え作業中に WordPress の記事を更新してしまうと、移行元のサーバーで更新したデータが、移行先に反映されていないようなトラブルを招くこともあります。切り替え実施の時間帯を決めて WordPress の管理者や編集者の人に「この時間帯は更新しないでね!」旨のお知らせを出しておきましょう。

AレコードのTTLを短くする

サーバーの切り替えは、DNSサーバーのAレコード(ドメイン名とIPアドレスを紐づけるためのレコード)のIPアドレスを変更することで行います。サーバー切り替えの前日までをめどに、AレコードのTTL(レコードをキャッシュに保存できる期間)を短くしておきます。(ここ近年 DNS AレコードのTTLは短く設定する傾向がありますので、この手順は必要ないかもしれません)

example.com. 7200 IN A 192.0.2.100
  ↓
example.com. 300 IN A 192.0.2.100

上の例は、TTLが7200秒(2時間)でしたが、これを300秒(5分)に変更しました。こうすることでサーバーの切り替え時間を短縮できますし、万が一切り戻しする場合にも素早く移行元のサーバーに戻すことができます。

サーバーの切り替え実施

いよいよサーバーの切り替え本番です。

WordPress のデータ移行をした後に記事が更新されていることもありますので、サーバーの切り替え(AレコードのIPアドレスを変更する)直前に、再度「WordPress ディレクトリ全体」と「WordPress データーベース」を移行元サーバーからコピーします。

データのコピーが終わったら、AレコードのIPアドレスを移行先のサーバーのIPアドレスに変更します。仕組み的にはTTLの300秒(5分)で切り替えが完了するはずです。

example.com. 300 IN A 192.0.2.100
  ↓
example.com. 300 IN A 192.0.2.200

WEBサーバーのログなどで、移行元サーバーにアクセスが来ていないこと、移行先サーバーにアクセスが来ていることが確認できたらサーバーの切り替え完了です。

AレコードのTTLを元に戻す

サーバーの切り替えが終わったら、忘れずにAレコードのTTLを元に戻しておきましょう。

example.com. 300 IN A 192.0.2.100
  ↓
example.com. 7200 IN A 192.0.2.200

おわりに

インフエアエンジニア向けの WordPressサーバーの移行・引っ越しに関する記事をあまり見かけないのでこの記事を書いてみました。自分ではシンプルで確実な方法かなと思っていましたが、記事にまとめてみるとぜんぜんシンプルではありません(^^;) もっと簡単な WordPressサーバーの移行・引っ越し方法があったらぜひ教えてください。

コメント

タイトルとURLをコピーしました