WordPressのサーバー移転

正月のアクセスが少ないときを見計らって、この「海外SEO情報ブログ」のサーバーを移転しました。

これまでは、「ナウでヤングな」某レンタルサーバーを利用していました。(笑)

ブログを開設した2年前は、ここまで本格的に運用するとは思っていなかったので、とりあえず安いし使いやすいからという理由だけで、選択していたのです。

とはいえ、これまでは特に目立った不具合やトラブルもなく、快適に運用を続けてこれました。

ところが、記事投稿を重ねてデータベースのサイズが大きくなってくるにつれレスポンスが悪くなり、また画像の数も増えてきて、ディスク容量がMAX間近になってきてしまったのです(増加プランを利用しても、500MB)。

また、僕は早朝に記事を書くのですが、定時にサーバーを再起動するのか、ほぼ毎日決まった時間にアクセスができなくなります。

ロリポは(あ、言っちゃったw)、初級者や規模の小さいサイトで使うにはコストパフォーマンスに優れますが、それなりに本格運用するには適してないと感じます(でも、安価なのは大きなメリットなので利用を続けるサイトもあります)。

というわけで、サーバー移転を決行しました。

WordPressのサーバー移転のケーススタディということで、プロセスを紹介しておきます。

静的なサイトならサーバー移転の手順は簡単ですが、WordPressは記事やコメントなどのデータをMySQLのデータベースとして管理しているので、ファイルとは別にDBも移動させる必要があります。

1.WordPress本体ファイルのアップロード
まず、最初はWordPress本体のファイルのアップロードです。
今回は、それまで使っていたバージョン6.5から最新バージョンの7.0へのアップグレードも兼ねていたので、すべて新規にアップロードしました。


2.テーマ、プラグイン、.htacess、robots.txtなどのアップロード

WordPressで使っていた、テーマファイルやプラグインをアップロードします。
WordPressとは別に、ドメインで使用していた.htacessやrobots.txtなどの諸ファイルもアップロードします。
前のサーバーと同じディレクトリ構造にして同じファイルをそろえるということですね。

ついでに、不要になったファイルの整理もしておきました。

3.MySQLのデータベース移動
これがいちばんの難関でした。

WPには、XML形式で記事などのデータをエクスポートする機能が付いています。
しかしインポートする場合のサイズに上限(たしか10MB)があって、僕の場合はその上限値を超えているので使えません。

そこで、My SQLのDBをそのまま移動することにしました。

WPのデータは、MySQLの複数の複数のテーブルに分かれて格納されています。

DBをエクスポートして、新しいサーバーのMySQLにインポートするだけの単純な作業なのですが、思ったようにすんなりいきませんでした。

僕のブログのDBには次のようなテーブルが存在します。

WordPressのデータベーステーブル

使用しているプラグインなどによって、テーブルの数は変わります。
デフォルトだと10個くらいだったはずです。

まず、始めに利用したのはDBをバックアップ/リストアするための「WP-DBManager」というプラグインです。

このプラグインでバックアップしたデータを戻してみたのですが、23個あるテーブルのすべてが戻らないのです。
何回か試しても成功しません。
しかも、その時々によってインポートされるテーブルの数にも違いがあります。
元の状態に戻らないバックアップほど、無意味なものはありません。

そこで次は、MySQLのDBを管理するツールのphpMyAdminから直接エクスポートです。

23個のすべてのテーブルを一括でエクスポート/インポートしたかったのですが、インポート時のサイズにやはり上限値があって、分割してエクスポート/インポートせざるを得ませんでした。

ところが、ここでも問題が発生。

データがいちばん大きいテーブルの「wp_ss_stats」が、サイズはクリアしているのですが、データの数が多いのか移行先のサーバーに負荷がかかりすぎるようで、完全にインポートできません。

完了前にエラーが発生してしまいます。

何度やっても失敗です。

ググって「wp_ss_stats」について調べましたが、何を格納しているのかはっきりと分かりせん。
「wp_ss_stats」の中身を見てみると、それほど重要でもなさそうなので、結局無視しました。(笑)

4.WPのアップグレード
新規インストールではないので、upgrade.phpにアクセスしてデータベースをアップグレード。
見た目は正常に完了しました。

5.サイトの確認
以前のように正常に表示されるか、アクセスできるかなどを確かめます。
しかしこの時点では、DNSの設定を変更していないので「www.suzukikenichi.com」では接続できません。
(元のサーバーでホストしているサイトにアクセスしてしまいます)

そこで、ちょっとした小細工を施します。

自分のPCから「www.suzukikenichi.com」にアクセスしたときだけは、新サーバーにつながるようにします。

「hosts」というファイルを設定します。

インターネット(TCP/IPネットワーク)では、ドメイン名(ホスト名)をIPアドレスに変換するためにDNSというサービスを利用します。

DNSサービスを実行するためにDNSサーバーが存在します。

ですが、DNSサーバーに頼らずに、個々のコンピュータにホスト名をIPアドレスに解決するためのファイルを置くことができます(もともと、こっちがDNSより先に利用されていました)。

そのファイルが、hostsファイルです。

Windowsの場合は、「OSが入っているドライブ(通常はCドライブ) ⇒ Windowsフォルダ ⇒ System32フォルダ ⇒ Driversフォルダ ⇒ etcフォルダ」とたどるとhostsファイルが見つかります。

hostsファイル

このファイルに、www.suzukikenichi.comと新しいサーバーのIPアドレスをマッピングさせます。

219.94.203.106 www.suzukikenichi.com

上のように「IPアドレス (スペース) ドメイン名」を書くだけです。
サーバーのIPアドレスは、情報として提供されているか、分からなければレンタルサーバー会社に聞いてください(サーバーの名前が分かれば、nslookupというツールで調べられますがここでは省略)。

hostsファイルに情報を記述してサイトにアクセスすると、自分だけは新サイトに接続します。

サイト全体を移動して、正しく表示されているか、リンクが切れていないか、リダイレクトが機能しているか、記事の作成・編集ができるかなどをチェック。

特に問題なさそうでした。

ここで初めて、DNSの設定を変更してwww.suzukikenichil.comが新しいサーバーを向くようにします。

DNSの変更の反映には1日以上かかることもありますが、こちらでは対処のしようがないので時が過ぎるのを待ちます。

完全に新情報がいきわたるまでに、新しいサーバーに接続したり、古いサーバーに接続したりを何回か繰り返しました。

3日ほどで、以前と同じようにアクセスできるようになりました。

そんなこんなで、今あなたが閲覧しているのは新しいサーバーに移動したブログです。

手順をまとめます。

1.WordPress本体をアップロード
2.プラグイン、テーマ、その他必要なファイルをアップロード
3.MySQLデータベースをエクスポート/インポート
4.hostsファイルを設定して動作チェック

【注意点】
1,2は必要に応じてパーミッション設定。
3のエクスポートは「データベースエクスポートオプション」で『「DROP DATABASE」を追加する』を選択。DBのサイズが大きい時は分割。ロリポップのphpMyAdminは、なぜかDBを圧縮して保存するオプションがなく、どデカイをダウンロードすることになるので、WP内でphpMyAdminに接続できる「WP-phpMyAdmin」といプラグインを使う。
4は確認したい場合のみ。hostsファイルはメモ帳などのエディタで編集可能。Windows Vistaではセキュリティ設定で書込み禁止になっているので、アクセス権を変更する必要あり。

作業自体は難しいことはありません。
本来ならば、1,2時間で完了するはずです。
でも、僕の場合はDBの移転で手間取ったのと、回線が悪かったせいか(帰省中だったので実家が契約しているプロバイダの回線)、ファイルを10個以上同時にアップロードするとセッションが固まり、小分けにしてアップロードしたので、ものすごく時間がかかりました。
(サポート体制も悪いし、Ya*h** BBは嫌いです。)

新しいサーバーは、エックスサーバーを使っています。
スペック、サポート、料金などを比較して選びました。
Sphinn Japanもエックスサーバーを使っているので、操作に慣れているという理由もあります。

投稿時のレスポンスも快適で、1週間のお試し期間を経た後に正式に契約しました。

「wp_ss_stats」が完全にインポートできなかったことが気にならなくはありませんが、今のところ不具合はなさそうなので、まあ大丈夫でしょう。(笑)

何はともあれ、新年から新サーバーで気分も新たにブログ更新しています。