wordpressを新サーバーに移行する今回の手順。備忘録的に。
新たにレンタルサーバーを契約し、wordpressを移転しました。今回の作業を備忘録的に書いておきます。
旧サーバー:Rental Orbit Space (無料、個人運営)
新サーバー: mixhost (有料)
作業の流れ
旧サーバーからftpでデータをダウンロード(1.2GBくらいありました)
新サーバーの契約、WordPressの準備
まずは正攻法、プラグインを使わずに移行する方法を試す
WordPressの他サーバーからの移転方法(プラグイン不使用) – mixhost ヘルプ&サポート
データはすでにダウンロード済みなので、MySQLデータベースのダウンロードに進みます。小生がお世話になっていたRental Orbit Spaceさんでは、多くのサイトで移行事案として紹介されているphpmysqlが使えないので、こちらの手順に従ってデータベースをダウンロードします。
データやデータベースの用意ができたら、上記サイトの手順に沿って移行作業を進めますが・・・データベースのインポートに何度やっても失敗してしまいます。エラーメッセージは忘れましたが、有効なデータベースではない的なエラーメッセージだったと思います。原因は分かりませんが、この手順はあきらめて、プラグインに頼ることにしました。
次に、プラグインを使う方法を検討
たった3ステップ!なんて魅力的なプラグイン!いそいそとプラグインをダウンロードし有効化させて、さっそくメディアライブラリ以外のすべてをエクスポートしようとするも・・・
何十分経っても、待てど暮らせどエクスポートが終わらない!夜遅いし仕方なく放置したまま寝て、朝になってみると・・・なんとなくファイルができているものの、いざ新サイトにインポートしようとすると、やっぱり有効なデータベースではないというエラーが出て、インポートできない!
時間をおいて何度か試してみるものの結果は同じ。考えてみると、小生がブログを始めてから3つのサーバー、ブログシステムもsb→serene bach→wordpressとデータを変換させながら強引に移行してきたので、システム内に何らかの整合性がない部分があるのかもしれない。この時点でやや思考が停止し、およそ1,000もある記事と無数の画像データを一から投稿し直す、という考えも生まれてきたりしたものです。
ただ考えてみると、これからもwordpressと付き合っていくだろうし、記事もどんどん増えていくだろうし、サーバーを移行することもあるだろうし・・・すべての記事やデータがwordpress純正の形式になっていることには計り知れないメリットがあるので、すべての記事を一から投稿し直す、というのもまんざら無駄な作業ではないわけです。というか、今風の言葉で言えば未来への投資、ともいえますね。
違うプラグインを使ってみる
特定の固定ページ、投稿記事を別のWordPressへ引っ越す手順 | Easytouse
繰り返しますが、小生のウェブサイトは今は亡きinfoseekのウェブサーバーを借りたHTMLベタ打ちから始まり、初代レンタルサーバーで始めた最初のブログシステムsbではそれを取り込みつつ新規に記事を書き、そのバージョンアップ版であるserene bachを経由しwordpressへ移行、2代目レンタルサーバー(旧サーバー)に移行する際にはwordpressを引き継ぎ、今まで以上にブログ執筆に勤しむなど、時期によって異なるシステム、サーバーから記事を取り込みながら今日に至っています。それぞれの時期によって記事のフォーマットが異なる可能性がありますが、少なくとも旧サーバーに移行して以降の最近の記事群はwordpressの仕様に最も合致した仕様になっているはず・・・それだけでもせめて救い出せないか、と思い、時期を区切ってのエクスポート→インポートができないかと考えました。
そのために使用するのがDeMomentSomTres Exportというプラグインです。
結論からいうと・・・このプラグインを使ってのエクスポート→インポート作業がもっともうまくいきました!

このように、時期を区切ってエクスポートし・・・

新サーバーのwordpressのインポート機能でインポートします。添付ファイルをインポートにチェックを入れておくと、wordpressのメディアデータベースに入っている画像であれば自動でダウンロードし新サーバーにインポートしてくれ超便利!
時々、DeMomentSomTres Exportでエクスポートしたデータが、インポート時にエラーが出ることがあります。
これは WXR ファイルではないか、存在しない又は無効な WXR バージョン番号のようです。
こういうエラーが出ます。検索しても明確な答えは見つけられませんでしたが、おそらく旧サーバーの処理能力の限界のせいで、データが正常にエクスポートできていないのだと思います。何度かエラーを繰り返すうちに分かってきたことは、文章量が格段に増えた最近の記事は、何ヶ月分もまとめてエクスポートではなく、1ヶ月分ごとにこまめにエクスポートをすれば正常なデータを書き出せるということ。また、一度インポート時にエラーが出てしまった月のデータも、もう一度エクスポートすればインポートに成功する場合があることもわかりました。
このようにしてエクスポート→インポートを繰り返すうち、旧サーバーに残っていた、旧サーバーに移行して以降の記事や画像データは新サーバーに正常に移行できました。
移行に関してはここから問題がまだ2つあります。1つは、旧サーバーに移行した旧旧サーバーのwordpress記事は、旧サーバーに移行したときのやり方が悪かったせいか、記事の移行はできても画像データの移行が完璧にできませんでした。運良く旧旧サーバー時代のwordpress記事はいまだに旧旧サーバーに生きていて今でも見ることができますので、この時期の記事は旧旧サーバーからエクスポートすることに。作業内容は前述と同じです。
もう1つの問題は、旧旧サーバーでブログシステムをserene bachからwordpressに移行した際に、serene bachの記事に表示させていた画像データはまとめて専用フォルダに入れ、記事からそこを参照することにしてしまったこと。
詳細は省きますが、wordpressのデフォルト動作は、例えば2019年10月にアップした画像だと、画像データは ルート/wp-content/uploads/2019/10/ こちらに保存され、データベースとリンクされます。しかし、移行時の都合から、serene bach時代に書いた記事の画像データは、 ルート/wp-content/sb-img/ こちらにすべて放り込んでしまい、記事から直接参照するようにしてしまっていたのです。html的には問題ないので記事に画像は表示されますが、wordpress的には意図しない記述なので、いくら有能なプラグインでもこのまま新サーバー用にエクスポートされず、エクスポート前と同じく旧旧サーバーの画像フォルダを参照したままになります。したがって、この時代の記事を今後も正常に表示させるには、画像へのリンクを新サーバーのwordpressにあわせて書き換える必要があります。
具体的には、このような書き換えになります。新サーバーのsb-imgフォルダは /wp-content/uploads/ に置くこととします。
旧旧wordpressのルート/wp-content/sb-img/hoge.jpg → 新wordpressのルート/wp-content/uploads/sb-img/hoge.jpg
画像へのリンクのある記事を一つ一つ探して書き換えるのは骨が折れますので、便利なプラグインを使います。
WordPress の記事内容を一括で置換できるプラグイン Search Regex
こちらを参考に、Search Regexというプラグインを導入します。これを使って、上記のように書き換えればよいのですが、ここでもうひと工夫。
WordPressの画像リンクのパスを絶対パスから相対パスに変更する方法 | ワープレ屋
こちらを参考に、sb-imgフォルダへの参照を相対パスで記述します。具体的には、このような書き換えとなります。
旧旧wordpressのルート/wp-content/sb-img/hoge.jpg → /wp-content/uploads/sb-img/hoge.jpg
このようにしておけば、ルートからのフォルダ構造が変わらない限り、今後別のサーバーに移行することがあっても記事内のリンクを書き換える必要がなくなります。本当は、wordpressのデフォルト動作のとおり、各画像ファイルは記事の投稿日に対応したフォルダに格納し、データベース化するのが理想なのですが・・・10年近く前からそれ以前の記事ですし、さすがにそこまでする必要はないかな、と(笑)
細かい修正←今ここ
以上の作業で、おおむね記事の移行は済みましたが、中にはうまく移行できていない記事や画像があります。また、記事から記事へのリンクはまだ修正しておらず、リンクをクリック旧サイトの対応記事へ飛んでしまいます。
画像や記事のリンク不具合は、先程も紹介したSearch Regexを使って、旧サーバー、旧旧サーバーのurlなどをキーワードに検索すれば見つかります。これらを見つけて地道に修正していきます。またテーマも新たに調整しながら作り込んでいます。
画像のインポートミスについて。インポートできていない画像はバックアップから探し出してftpなどでアップロードしリンクを貼ればとりあえず見られるようになりますが、これだけではデータベースに登録されず、今後の記事でその画像を引用しようにもメディアから参照することはできません。画像はできればデータベース化し参照できる方がベターです。ftpでアップした画像をデータベースに登録するのが、Media from FTPです。
【WordPress】FTPでアップロードした画像をメディアライブラリに反映させるプラグイン「Media from FTP」がすこぶる便利 | 有限会社ノーティーズ
FTP等でアップロードしたファイルをメディアライブラリに登録できる:Media from FTP | WordPress活用術
ftpで任意のフォルダにアップした画像をデータベース化してくれるとても便利なプラグインです。とても便利な、というか、データベースへの登録は力技でどうすることもできないので、このプラグインさまさまです。

デフォルト動作では、Media From FTPでデータベース化した画像は操作した日(今日)のフォルダに格納されます。古い記事の画像であれば特に、その記事を書いたときの時系列フォルダに格納したいものじゃないですか(小生だけ?)そんなときは、設定→日付の項目で、日付を明示的に指定しておきます。画像の作成日時が目的の日時になっている場合は、ファイルの日時を取得を選択することでもOK。
というわけで、まだまだ修正点は多々ありますが、気長に作業していきます。今後もよろしくお願いします。
ディスカッション
コメント一覧
まだ、コメントがありません