WordPress を、旧サーバーから新サーバーに、移動させた時のメモ。
大きくわけて3つのデータがあった。
- 記事データ (phpMyAdmin で sql データとして Export / Import)
- 画像データ ( FTP で移動)
- plugin ( FTP で移動)
URLが変更になるので、記事データは、Export した後、テキストエディターでURLの置換作業を行う必用があった。
STEP0: 新規 WordPress サーバーを構築する。
新環境に WordPress サーバーをセットアップする。
記事は作らないで(試しに作っても良いが)、稼働する事を確認する。(記事を入れても、この記事の手順では、Import 時に全てなくなる)
STEP1: 既存DBのデータのExport
記事のデータ(記事の本文、カテゴリ等)を phpMyAdmin を使って Eport する。
phpMyAdmin の管理画面から「エクスポート」を選び、同じ接頭文字のテーブルを全て選ぶ。
デフォルトだと wp_ ではじまる全てのテーブルを選択する。
テーブル名は、ユーザーが WordPress インストール時に決めているので、全然違うものの場合もある。
「出力をファイルに保存する」を選択。
「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT コマンドの追加」を選択しておく。
通常は、既存のテーブルがあると例えそれが空でもデータを入れる事ができない場合がある。(ユニークなキーが被ったりすると、データが挿入できずにエラーになる)
そのため、既存のテーブル等があったら一度、テーブルを削除(DROP) して、新規にテーブルを作成した後、データを挿入するというオプション。
後は「実行する」
そうすると以下のような SQL のファイルが生成される。
データとDBにデータを挿入するコマンドからできている。
おまけ:
データの移行とは関係ないがエクスポート時のオプションで他のベンダーのDBのSQLに変換するというものがあった。
個人的には、「すごいなぁ。」と思ったのでメモ。
STEP2: Export したファイルの編集
Export したファイルの中には、旧サイトのアドレスが埋め込まれているので、テキストエディターで、新URLに置換する。
http://xxxx/ の部分は変更していないのだが、http://xxxx/ 以下のディレクトリ構造を変えたので、ディレクトリ構造を置換している所。
こんな感じで、一気に置換をかける。これで、新サイト用の画像以外の移行用データの作成は完了。
作業して「なるほど」と思ったのが、WPの関数で自動生成している <?php bloginfo('url'); ?> 等で生成されているリンクも DB上では、PHPを実行した後の出力値として格納されている。
そのため Word Press 内のサイドバーなどに埋め込んであるリンクも、URLが変わる場合は、全て置換してあげる必要があった。サイドバーの<?php bloginfo('url'); ?> 等のリンクをクリックしてからPHPが実行されてURLが生成されているのでは無く、テーマが表示された時点で既にPHPが実行され、リンクの値がDBに格納されているようだ。
実はこの部分は動的に生成されているので、変更する必用が無いだろう。と当初考えていた。
確かに毎回実行してURLを生成していたらパフォーマンスがでないだろう。。という事はこういう作業をやってみて初めて分かった。
※実際は、旧サーバーと新サーバーの、テーブルの接頭字を変えたので、加えて、DBのテーブル名の置換もここで行った。
Export した中には、プラグインの設定データも含まれます。プラグインの中には、SQLサーバーのホスト名や、ユーザーID/パスワードを埋め込んでいるもの、外部のサイトへのリンクを埋め込んでいるものがあります。(twitter や facebook プラグインなど)それらは、SQL文の中を捜索するのは大変なので、後で一つ一つダッシュボードから直して行く事になると思います。
STEP3: DBファイルのインポート
STEP2でエクスポートしてエディット(URL置換)したファイルを、新サーバーにインポートする。
この状態でサイトは画像が無い状態で表示される。
まずは新規サーバー側で、phpMyAdmin の管理画面を開く。
phpMyAdmin の「インポート」タブから、STEP2で作成したsql ファイルを指定して、
「実行する」を押す。
正常に終わるとこのようなメッセージが表示される。クエリの数は、環境によってもちろん異なる。
ファイルが大きすぎると phpMyAdmin のGUIからのインポートは失敗する。幾つか方法があるが、コマンドラインが使える場合は以下の方法がある。
[コマンドラインで、sql データをインポートする]
この例は、Windows の場合。環境変数に mysql.exe へのパスを追加する。(xamp を使用している場合は、C:\xampp\mysql\bin 辺りにある。)
import.sql が、インポートしたいSQLのファイルである場合、以下のようなコマンドを打つ。不等号の向きを間違えると export になるので注意。
mysql <DB名> < import.sql –u <MySQL ユーザ名> –p
Enter password: *********
STEP4: 画像ファイルの移行
元のサイトの画像ファイルは、 wp-content/blogs.dir/2/files の下にあった。2というフォルダーはマルチサイトの2番目。という意味のようだ。(元のサイトはマルチサイト機能で作ったサイト)
マルチサイトを作ってない、通常のシングル WordPress サイトあれば、wp-content/uploads を単純にコピーするだけで良いかもしれない。
まずは、このフォルダ毎、旧サイトから取得する。
その中から、例えば、test.jpg というサムネイル以外の画像ファイルを1個選んで、その名前で、Export した DBの sql ファイルを検索する。
\r\n<img class="alignnone size-full wp-image-256" title="test1" src=http://newsite.co.jp/wordpress/files/test1.jpg alt="" width="515" height="342" /
STEP2で、新アドレスに置換しているので、どういうアドレスで画像ファイルが参照されているのか出てくる。参照先に画像ファイルが配置されるように、新サイトにFTPで画像を配置する。
このケースの場合は、wordpress のサイトの直下に配置するだけでよかった。(普通は wp-contents/uploads などの下に、日付毎に分かれたフォルダにおく事になるのかも)
以上の作業で、新規サーバーにブログが移行できた。(今の所不具合らしきものは見つかってない)
STEP5: プラグインの移植
プラグインは、旧サイトの wp-content/plugins フォルダにあるので、それをそのまま FTP で旧サイトから新サイトの同じフォルダーにコピーする。
ひょっとしたら、プラグインは手動で「有効化」する必用があるかも。。(移行の最後の方は無意識に作業していたので、次回確認してみよう・・・)
プラグインは普通にやるとプラグインの組み合わせ?のせいか、稼働はするものの「停止」、「削除」ができなくなっている事があった。(はじめての移植の時は何事もなかった)
その場合は、「トラブルシュート」を参照。
移行後に遭遇したトラブル
今回、新規に Apache や、MySQL、PHPを導入した環境にデータを移行した。また移行直後はプラグインなどが綺麗に移行できてないので、幾つかトラブルに遭遇した。
現象1:index.php で記事の一覧は表示されるが、単独記事の表示や、ページの表示が全て 404 not found になってしまった。
ダッシュボードから確認すると確かに記事はあるのだが、プレビューもできない。
原因:「パーマリンク」を使用しているのにも関わらず、Apace サーバーの httpd.conf の設定がされていなかったせいだった。
パーマリンクを使用する場合は、Apache の httpd.conf も設定してあげる必用がある。移行元サーバーはかなり昔に設定したのですっかり忘れていた・・
以下のサイトを見ながら httpd.conf を修正。
mod_rewriteと.htaccessの設定 - パーマリンクの設定 - WordPressの使い方
現象2:稼働しているプラグインが停止・削除できない。ボタンを押しても真っ白な画面になる。
原因:良く分からないが、以下の方法で直った。
1) phpMyAdmin を使い、wp_options テーブルの option_name フィールドで 「active_plugins」という値を探す。(一行しか無いはず)
その行の「option_value field」 の値を a:0:{}
に変更 する。
2) プラグインフォルダの名称(「plugins」) を適当な名前に一時的に変更する
3) 一旦、ダッシュボードからログアウト / ログインする。
4) 全てのプラグインがエラーになっているのを確認する。
5) 一旦、ダッシュボードからログアウト / ログインする。
6) プラグインのフォルダー名を元に戻す。
7) 再度、ダッシュボードにログイン。全てのプラグインが「停止」状態になっているはず。
8) 必要なものを一つ一つ「有効」にして行く。(この状態で、「停止」も「削除」もできるようになっていた)
参考:WordPress › フォーラム » 2.8 アップグレードのトラブルシューティング
現象3:ページが途中までしか表示されない。
原因:必須のプラグインを停止している場合によくおきる。途中まで表示されたページのソースコードを読んでみると、どのプラグインの実行の所で止まっているかがわかる。