2017年10月22日
  • 自社保有メディアのサイト運営によるインターネット広告事業・WordPressによるサイト制作事業・コワーキングスペース・シェアオフィス・貸会議室の運営事業を行っています。

WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文

こんにちは。株式会社コミュニティコムの星野邦敏です。

昨日のKDDIウェブコミュニケーションズさんで行われました
Web制作を効率化して、クリエイティブに専念しよう~WordPress編~(Facebookイベント)
において、
CPIサーバーでのSmartRelease(スマートリリース)のサービス紹介がありました。

WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文
KDDIウェブコミュニケーションズの阿部さんの発表。

SmartRelease(スマートリリース)というサービスは、共有レンタルサーバーのCPIを使った際に、
・テストサーバーから本番サーバーに移行できる(テストサイトと公開サイトが同じ環境でボタン1つで動作できる)
・過去30日分のバックアップを自動で取ってくれる(30世代前までのバックアップデータを毎日深夜の時間帯で自動で取ってくれる)
この2点が大きなサービス特徴だそうです。

SmartRelease(スマートリリース)は、CPIサーバーの「シェアードプラン ACE01」を使っていれば、無料で利用できるサービスということで、おぉ!素晴らしい!と思いました。

ただ、結局、テストサーバーから本番サーバーに移行する際には、FTPファイルはそのまま移行してくれるので便利ですが、WordPressのように、データベース(MySQL)にURLが相対パスではなく絶対パスで格納されてしまう場合には、SmartRelease(スマートリリース)が用意するテストサーバーの独自ドメインと本番サーバーの独自ドメインは、URLが異なるから、本番に移行するボタンを押した後にSQL文を書いてね、という説明でした。

WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文

この1手間は意外に敷居が高いと感じる人もきっといると思いまして、これだったら、本番環境の階層下のディレクトリでテストサーバー作る方が楽だと思う人もいるかもしれないですし、結局、初心者向けにはSQL文をどう書いて良いのか分からないんじゃないかと思いました。
また、独自ドメインに移行する際に、既にカスタムフィールドを作っている場合には、meta_valueもREPLACE(リプレイス)しないといけないと思うので、阿部さんが解説されていたSQL文だけではカスタムフィールドを作っていた場合でそこにURLを入力していた際にはSQL文が足りない気がしました。

そこで、WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文として、弊社で行なっている方法を、以下に記載します。
この方法は、今回のSmartRelease(スマートリリース)での移行のように、テストサーバーと本番サーバーのURLが異なる場合だけでなく、独自ドメインURLをそもそも変更するような移行の際にも、どのサーバーにおいても実行できる方法だと思います。

要は、WordPressのデータベースにおいて、URLの記述のある場所を、SQL文でREPLACEする(リプレイスする)ということです。

以下、具体的な方法を記載します。

WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文

まず、データベース内に入りましょう。今回は共有レンタルサーバーを前提としているので、多くの共有レンタルサーバーには、予めphpMyAdminがあると思いますので、phpMyAdminから操作します。

(1)
上のタブに[SQL]という箇所があるので、クリックします。

(2)
そこに、以下のSQL文を入力します。

UPDATE wp_options SET option_value=REPLACE(option_value,"旧ドメイン","新ドメイン");
UPDATE wp_posts SET post_content=REPLACE(post_content,"旧ドメイン","新ドメイン");
UPDATE wp_posts SET guid=REPLACE(guid,"旧ドメイン","新ドメイン");
UPDATE wp_postmeta SET meta_value=REPLACE(meta_value,"旧ドメイン","新ドメイン");

例えば、以下のような形です。

UPDATE wp_options SET option_value=REPLACE(option_value,"http://www.wp-sample.com","http://www.wp-sample.net");
UPDATE wp_posts SET post_content=REPLACE(post_content,"http://www.wp-sample.com","http://www.wp-sample.net");
UPDATE wp_posts SET guid=REPLACE(guid,"http://www.wp-sample.com","http://www.wp-sample.net");
UPDATE wp_postmeta SET meta_value=REPLACE(meta_value,"http://www.wp-sample.com","http://www.wp-sample.net");

(3)
最後に、[実行する]をクリックします。
なお、SQL文を実行してしまいますと、元に戻せませんので、URLが正しいか、しっかりと確認しましょう。実行時間自体は、記事数にもよりますが、基本的には、一瞬で実行されると思います。

以上となります。

WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文

KDDIウェブコミュニケーションズの阿部さんの発表の後に、データベースの移行について、やいのやいの議論する人達。
阿部さんは、オープンソースCMS「Drupal」の日本のコミュニティ活動もされているそうです。

WordPressでの独自ドメイン移行時に、phpMyAdminで書くべきSQL文

その後、懇親会でも、色々とお話をしました。
発表者だった、よつばデザインの後藤さん、阿部さん、ありがとうございました!

後藤さんのスライド
(スライド)WordPressを使ったWeb制作効率化のためのTips&Tools | よつば手帖

この様子は、直子さんやサトタカさんも既にブログ記事にしているようです。そちらもご覧ください。
「Web制作を効率化して、クリエイティブに専念しよう~WordPress編~」イベントレポート – ja.naoko.cc
デザイナーが語る効率的なWordPressサイト制作|ロゴ&ウェブデザイナー!

(2012年9月24日追加)
自分は上記のデータベースの一括置換で今まで問題が無かったのですが、
岡本さんのブログを拝見したら、
「ただ wp_options とか wp_postmeta とかにはシリアライズされたデータが入っているので、これらはそのまま置換するとまずいです。
(シリアライズデータの中には、文字列の長さとかも含まれてるので)
そこで、シリアライズされたデータは一度アンシリアライズしてから置換して、シリアライズした後に DB に書き戻してやる必要があります」
とありました。
以下の記事もご参考ください。
WordPress のDB上のサイトURLを一気に変換 | dogmap.jp

(2012年10月9日追加)
山本さんがスクリプトの紹介をしてくださっていました。
以下の記事もご参考ください。
WordPressでサーバ移行時にデータベース上のドメインを書き換える方法 | Webcre Archive