WordPressのドメイン名変更の安全な方法はこれ(データベース内のURLを置換するスクリプト)

Database Search and Replace Script in PHP

ドメイン名変更は簡単ではないのです

仕事で運営している WordPress サイトを別サーバに移転する際に、ついでだからと OS 自体の更新と、PHP のバージョンを上げてみようということで、テストサーバにコピーをしました。

通常は、以下の手順になると思います。

  1. 既存のWordPressデータベースのバックアップ
  2. 新しいデータベースへリストア
  3. リストアしたデータベース内のサイトURL情報を書き換え

シングルサイトの場合、3の書き換えはwp_optionsテーブルのsiteurlレコードとhomeレコードの編集でだいたい問題なかったのですが、今回のサイトはマルチサイト化していたため、書き換えの場所がかなり多いのと、データベース内にはシリアライズされたデータも含まれるため単なる置換ではエラーになる可能性もあるという情報も多々あったので、安全を取って下記の方法を使いました。

Search and Replace for WordPress Databases Script を使用する

上記のWordPress.orgのサポートで紹介されているスクリプト Search and Replace for WordPress Databases Script を使用して URL の一括変更を行ってみます。

スクリプトのダウンロード

配布サイトは下記ですが、ダウンロードには利用者情報の登録が必要です。

スクリプトのダウンロード申請フォーム

Knowledge check3箇所にチェックを入れるとメールアドレスも入力できるようになるので、必須事項である名前とメールアドレスを入力してSUBMITを押してメールを受け取ります。

しばらくすると、件名が「Dear 名前 – here’s your Search Replace DB download Link」というメールが届くので、本文内にあるリンクからスクリプトを取得します。

最新版(現時点ではv 3.1.0)と、互換性に問題があった場合の旧版(v 2.1.0)がありますが、迷わず最新版をゲット。

スクリプトのアップロードと設置

配布サイトのインストール方法にもありますが、スクリプトは WordPress 設置ディレクトリのルートに展開してはならず、推測できないような名前のディレクトリ(例では your-secret-search-replace-folder)を作ってその中に展開するのが良いです。可能なら、アクセス制限をかけるなどして、自分だけがアクセスできる状態にしてから使用するのが確実でしょう。

スクリプトにアクセス

スクリト実行画面

実行画面はシンプルですがヤバい情報が丸見えなのはご覧の通り。データベースの接続情報が丸見えなのはオープンな環境では怖くて使えないですね。やはりローカルで実行してデータベースを書き換えたものを実環境にインポートするのがより安全な気がします。

使い方としては、

  1. 置換前の現行URLと置換後の新URLを入力
  2. データベース接続情報が問題なければそのまま
  3. 置換対象のテーブルは面倒ばらall tablesでも良さそう
  4. dry run で仮実行、結果が問題なければ live run で実際に置換
  5. 処理完了後、delete me でスクリプト自体を削除(パーミッションが正しくないとエラーになります)

実際に処理した際、実環境では対象のテーブルが300程度あったので数分程度はかかりました。とりあえずエラーが出ないことを祈りながら実行しましょう。

その後、マルチサイトだったので、wp-config.phpdefine('DOMAIN_CURRENT_SITE', 'hogehoge');を適切に変更してやれば、マルチサイト環境でもほぼノートラブルでドメインの変更ができました。

サイトのドメイン変更自体なかなかすることではないですが、テスト環境を作ったりするときには覚えておくと便利な方法かと思います。

何はともあれ、バックアップは確実に行い、セキュリティに注意して作業を行うのが肝要ですね。