WordPressサーバー移行時(ドメイン変更時)にウィジェットやプラグインのデータがなぜか反映されなくて悩んだ件

ローカルにテスト環境をつくろうと思って、以下の手順でサイトのクローンを作成しました。

  1. BackWPupプラグインでバックアップデータを取得
  2. 吐出されたsqlテキストエディタで開き、本番環境のドメイン(example.jp)をテスト環境のドメイン(example.home)に置換
  3. ローカルのphpmyaminで2の置換済sqlをインポート

作ったら、ウィジェットプラグインやテーマのデータが全然反映されていないのです…( ゚д゚)( ゚д゚)( ゚д゚)
とくに問題だったのが、このサイトは「Page Builder by SiteOrigin」という、投稿本文をレスポンシブに対応したカラム分けできるプラグインを使用していたという点。カラム分けしていたレイアウトは見事に1列になり、なんとも無残な姿に…。
データベースにインポートする際にデータが破損したのかと思い、データベースを直接確認しましたが、本番環境と同じように、きちんとデータは入っていました。

原因はドメイン(URL)のバイト数の相違

こんなことではデータのバックアップをとっていても、万が一なにかあった時にすぐに元にもどせないではないですか!!!ふじこふじこ!!!

と憤慨しながら、原因を探してみると、ウィジェットが移行されないという記事を発見。
WPプラグインといえばこの御方、キタジマタカシさんのブログでした。


phpMyAdminでWordPressの移行を行うとウィジェットが表示されない | モンキーレンチ

WPではウィジェットのデータや特定のプラグイン、テーマで使われるデータは、シリアライズされた上でデータベースに保存されるのです。
シリアライズの際に、データのバイト数も保存されるのですが、ここが落とし穴でした。
手順2で書き換えた本番環境のドメインは「example.jp」でテスト環境のドメインは「example.home」。2バイトの違いがあります。そのため、このドメインがデータに含まれている場合、シリアライズされたデータのバイト数に矛盾が生じてしまい、アンシリアライズに失敗してしまうのです。
すごく納得しました。

移行元のドメイン(URL)と移行先のドメイン(URL)のバイト数が一緒であれば問題なしということですね。
つまり万が一本番環境でなにかあって、バックアップから元に戻した場合も大丈夫ということがわかって、まずは一安心。

移行元と移行先のURLのバイト数が違う場合の移行手順

テスト環境やドメインの変更などでデータの移行(コピー)作業を行う場合、ドメインの書き換えとともにバイト数も書き換えてくれるツールが必要になると思われます。
私は以下のツールを使いました。


ウィジェットも対応。WordPressでサーバ移転時にデータベースのドメインを置換する方法 | S・T・K株式会社

今は「DATABASE SEARCH AND REPLACE SCRIPT IN PHP」という名称に変わってしましたが、同じように使えます。

手順をまとめてみると、

  1. 移行元からバックアップデータを取得(プラグインやpypmyadminのエクスポートで)
  2. 移行先でバックアップデータをインポート(phpmyadminでデータベース作成後インポート)
  3. 移行先のphpが実行できる場所に「DATABASE SEARCH AND REPLACE SCRIPT IN PHP」を設置し、ブラウザでアクセス。
  4. 変更前のドメイン、変更後のドメイン、データベース情報を入力して「update details」「live run」で書き換え(「dry run」で書き換え前のテスト)
  5. うまくいったかドキドキしながら確認する

以上です。
疲れましたがWPのことがまた少しわかってよかったです。