WS000012

WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう

| 16件の返信

こんにちは。武藤です。
最近WordPressの記事を書くことも増えてきて、WordPressと大分仲良くなってきました。

URLの一括置換は危険

本日はWordPressの移行方法についてのお話です。
WordPressは、DBの中にホスト名やIPを含んだURLが散在しています。私も最初はSQLで一括置換すればOK!と思っていましたが、こちらの
WordPressでサーバ移行時にデータベース上のドメインを書き換える方法
という記事を見てその方法だと危険ということを知りました。
DB内にシリアライズされた情報がデータがあって、整合性が合わなくなる様子。
(具体的にいうと、wp_optionsテーブルなどでurlの長さなどのデータを持っている)
特にテーマやプラグインのデータが壊れる可能性があります。

移行するには、「Search and Replace for WordPress Databases Script」というツールを使います。
CodexのMoving WordPress に書いてある公式な方法です。

こちらのツール、新しいバージョンも出て画面も前と結構変わってます。v3.0.0を使ってみたので、その記録です。

1. バックアップ

移行ではなくホスト名の変更の場合は、必ず作業を始める前に下記バックアップをとりましょう。

  • WordPressフォルダ
  • データベース

2. wp-config.phpファイルでデータベースの接続情報を編集

必要に応じて移行先のwp-config.phpのデータベース接続情報(xxxxxの部分)を変更します。

define('DB_NAME', 'xxxxx');
define('DB_USER', 'xxxxx');
define('DB_PASSWORD', 'xxxxx');
define('DB_HOST', 'xxxxx');

3. 置換ツールのダウンロード

Search and Replace for WordPress Databases Script をダウンロードします。
今回は最新のV.3.0.0 BETAになりますので、下のダウンロードボタンをクリックします。

WS000039

Search-Replace-DB-master.zipというファイルがダウンロードされるので、解凍します。

4. アップロード

解凍したフォルダを、WordPressフォルダ直下にアップロードします。
これで、下記のURLにアクセスすると、Search And Replaceの画面が開きます。

http://[hostname]/Search-Replace-DB-master/

5. replaceとwithを入力

なんの文字列を(replace)、何で置換するか(with)を入力します。
WS000042

ここで気をつけたいのは、replaceにhttp(s)や/(スラッシュ)を付与しないということです。
↑ 重要です!!!!!

※Search and ReplaceのHPにはreplaceに何を書くか詳しく書かれていないため、私の私見となります。私が試した限りでは、http(s)やスラッシュが含まれていないURLもDB内に存在したため、httpなどがないURLの方がDry Runで多くヒットしました。つまり、httpなどを含めた文字列で置換すると、漏れが出てしまうと考えています。

  • 良い例: www.example.com/test
  • 悪い例: http://www.example.com/test/

6. Dry Run: お試し。もし実行したらこうなります

「Dry Run」をクリックすると、実際にはSQLは実行されず、もし実行したらこれだけ変更されるよ、という想定を表示してくれます。

WS000043

7. Live Run: 本番実行

Dry Runで変更される箇所を確認したら、いよいよ本番実行です。
「Live Run」をクリック。

WS000040

コンファームが表示されます。心の準備ができたらOKを押します。

WS000044

SQLが実行され、置換が完了します。

WS000045

8. Delete: 置換ツールのフォルダを消す

最後に必ず置換ツールのフォルダは消しておきましょう。
もしそのままにして外部からアクセスされたら、一括置換される恐れがあり大変危険です。

WS000041

以上となります。
簡単ですね。URLが直書きでDB内に散在しているというWordPressの作りはどうかと思っていましたが、このようなツールがあるととても助かります。

WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう」への16件のフィードバック

  1. ピンバック: 【お知らせ】ドメイン&サーバー移転完了 |

  2. ピンバック: ローカルのWordPressをサーバーに移行する

  3. ピンバック: WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう infoScoop開発者ブログ | ミリオンハイスクール | ネットビジネス | WordPress

  4. ピンバック: WordPress をローカル環境コピーする | あんとんさんち

  5. ピンバック: WordPressでドメイン変更とサーバ移転をやってみた方法のまとめ2 | ここは俺の実験室だ!

  6. ピンバック: 新しいドメインにWordPressを移管する際、ドメインやディレクトリを簡単に変更する方法 | theycm

  7. 松本

    はじめまして。
    サーバー移行関連の検索からこちらの記事を拝見させて頂きました。

    ご多忙の所大変申し訳ありませんが、質問させて頂いてよろしいでしょうか。

    MTブログのサーバ移行を計画し、その際WPへ変更することにしました。
    ローカルでブログ内容をWPに移植後、新サーバーにアップすればよいとだけ考えておりましたが、こちらの記事のような問題があることを知りました。

    お聞きしたいのですが、

    ローカル環境のWPで作成したブログデータをエクスポートし、

    エディタ等でローカルのURL部分を運用中のドメインURLに変更、

    新サーバーでローカルと同じ環境を作って編集済みデータをインポート、

    サーバーの移行手続きをする。

    といった流れだけでは駄目ということでしょうか?

    新サーバーへの移行、並びにMTからWPへの変更、の場合でもこちらの記事のような作業が必要になりますでしょうか?

    サーバー移行ははじめてのこととなります。
    ご多忙中お手間とらせてしまい大変申し訳ありませんが、アドバイス頂けましたら大変助かります。

    よろしくお願いいたします。

    返信
    1. infoscoopdev

      松本様

      記事をお読みいただきありがとうございます。
      はい、エディタでドメインURLを変更するだけだと、漏れがある可能性があります。
      このツールを使うのが良いかと思います。

      >新サーバーへの移行、並びにMTからWPへの変更、の場合でもこちらの記事のような作業が必要になりますでしょうか?
      状況が分かりかねますが、MTからWPに内容を移植後、ということですと特にMTがどうということは関係ないと思います。WPのみの話かと思われます。
      絶対に手作業で上手くいく、頭位確信が得られないので、ツールを使うのが一番間違いないですし、何より手作業より安心で簡単です。

      移行がうまくいくことを願っております。

      返信
  8. ピンバック: ブログの公開準備 | SUNAO のブログ

  9. ピンバック: ワードプレスのサーバー移行を考えている人のための記事20選 | NESTonline Blog

  10. ピンバック: ▼WordPress エラー▼ウィジェットの一部が表示されない

  11. ピンバック: orvalで行こう » Blog Archive » ドメイン変更

  12. ピンバック: サーバーのWordPressをローカルに移行する – Memorandums

  13. ピンバック: WordPressの引っ越し手順! | ちょこでぃあ

  14. ピンバック: 引っ越し時にドメイン名またはURLが変わる場合にはシリアライズされたデータを考慮する | Deadwood

  15. ピンバック: WordPressをローカル開発環境内にVagrantを使用して構築する手順まとめ | System.NormalBlog.net

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>