wordpress WordPress マルチサイトのローカル環境からのサーバー移行手順

2013年6月15日

マルチサイトを利用している場合のローカル環境からのサーバー移行手順のメモ。

大まかな手順

  1. ローカル環境のデータベースのエクスポート
  2. エクスポートしたファイルを編集
  3. ローカル環境のファイルをサーバーにアップロード
  4. サーバーのデータベースに 2. で編集した SQL ファイルをインポート
  5. サーバーの wp-config.php と .htaccess の修正
  6. 管理画面の「設定」などの項目を確認して、必要であれば変更する

データベース名、ユーザー名、ディレクトリ構成は同じにしておくと作業は楽になる。以下ではローカル環境で /wp 以下にインストールしたものをサーバーでは、ルートにインストールする例を説明しているが、本来なら、ローカル環境ではサブドメインを利用してサーバー環境に合わせて作成するほうがはるかに簡単。

ローカル環境のデータベースのエクスポート

以下は「XAMPP 1.8.1 」の phpMyAdmin を使用する例。

  • ローカル環境の phpMyAdmin にログインし、データベースタブをクリックして 目的の WordPress のデータベースを選択。
  • エクスポートをクリック。
  • 「エクスポート方法:」で「詳細」を選択。
  • 「テーブル:」で全て選択されていることを確認。(または選択)
  • 「生成オプション 追加コマンド:」の「DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT コマンドを追加する」にチェックを入れる。
  • 後は全てデフォルトで「実行」をクリック。
  • 「データベース名.sql」というファイルがエクスポート(生成)される。

参考サイト:Codex日本語

エクスポートしたファイルを編集

  • WordPress の画像ファイルなどは、ローカル環境の URL にリンクしているので、これらをサーバーのものに置き換える。
  • テキストエディタ(UTF-8N対応)でファイルを開き、ローカル環境の URL(localhostなど)の部分を新しい URL(mysite.comなど)に書き換える。
  • 作成してある記事の数にもよるが、かなりの数があるので一括変換するとよい。

追加情報 2015.2.23

データベース内で保存されている内容がシリアライズされている可能性があるので(プラグイン等)、単にテキストエディタを使って一括置換では、うまくいかない場合もあるらしい。以下参照。

WordPressの引っ越しに便利な wp search-replace(Gatespace)

以下はローカル環境では「http://localhost/wp」にルートサイトをインストールし、その下に「http://localhost/wp/en」と「http://localhost/wp/jp」というサイトをインストールしてある場合の、URL が関係する一部のデータベースのテーブルの値。

xxxx_blogs テーブル
blog_id:1
site_id:1
domain: localhost
path: /wp/

blog_id:2
site_id:1
domain: localhost
path: /wp/en/

blog_id:3
site_id:1
domain: localhost
path: /wp/jp/

xxxx_options テーブル
siteurl: http://localhost/wp

xxxx_2_options テーブル
siteurl: http://localhost/wp/en

xxxx_3_options テーブル
siteurl: http://localhost/wp/jp

xxxx_site テーブル
id: 1
domain: localhost
path: /wp/

xxxx_users テーブル
user login: xxx01

以下は試験的にサーバー側に、WordPressをインストールし、マルチサイト化して、サイトは追加していない状態でのデータベースのテーブルの値。(移行に際して、サーバー側に WordPress をインストールする必要はない。最初はうまくいかなかったので、原因を調べるためにインストールしたもの。)

ローカル環境では、サブディレクトリにインストールしてあるが、サーバーではルートディレクトリにインストールする場合の例。

xxxx_blogs テーブル
domain: www.mysite.com
path: /

xxxx_options テーブル
siteurl:  http://www.mysite.com

xxxx_site テーブル
domain: www.mysite.com
path: /

xxxx_users テーブル
user login: xxx01

両方を見比べると、
「localhost」の部分を 「www.mysite.com」 に置換
「/wp」の部分を 「”」(空)に置換
すればよいことがわかる。

「xxxx_blogs」テーブルや「xxxx_site」テーブルの「domain」の値には「http://」は含まれていないので、置換の際には「http://」の部分は含めないほうがよいと思う。

また、もしかしたらユーザー名(管理者名)も置換が必要になるかも知れない。今回は同じユーザー名にしたので必要はなかった。

うまくいかない場合は、上記のテーブルの値を確認してみるのも1つの方法。

ローカル環境のファイルをサーバーにアップロード

ローカル環境のファイルを全て、サーバーにアップロードする。

サーバーのデータベースに 2. で編集した SQL ファイルをインポート

  • サーバーに空のデータベースを作成。
  • データベース作成の際の、データベース名、データベースユーザー名、パスワード、データベースホスト名は wp-config.php の修正に必要になる。
  • サーバーの phpMyAdmin を使用して、編集したエクスポートファイルをインポートする。
  • 問題がなければ、インポートが完了する。
  • 編集した部分の文字コードが違っていたりするとエラーになることがある。

サーバーの wp-config.php の修正

  • wp-config.php の DB 設定とマルチサイトの設定を修正する。
  • 以下の部分をサーバーのデータベースの設定に変更する。
    /** WordPress のためのデータベース名 */
    define('DB_NAME', '新しいデータベース名');
    
    /** MySQL データベースのユーザー名 */
    define('DB_USER', '新しいユーザー名');
    
    /** MySQL データベースのパスワード */
    define('DB_PASSWORD', '新しいパスワード');
    
    /** MySQL のホスト名 */
    define('DB_HOST', '新しいホスト名');
  • マルチサイトの場合は以下も修正する。
    define('WP_ALLOW_MULTISITE', true);
    define('MULTISITE', true);
    define('SUBDOMAIN_INSTALL', false);
    define('DOMAIN_CURRENT_SITE', 'www.mysite.com');//上記の例ではローカル環境では「'localhost'」となっていた
    define('PATH_CURRENT_SITE', '/');//上記の例ではローカル環境では「'/wp/'」となっていた
    define('SITE_ID_CURRENT_SITE', 1);
    define('BLOG_ID_CURRENT_SITE', 1);

.htaccess の修正

インストールするディレクトリ構成が異なっていれば、.htaccess の修正も必要になる。

上記(前述)の例の場合だと、ローカル環境では「wp」というディレクトリにインストールされていて、サーバーではルートにインストールするので、「RewriteBase」の値を「RewriteBase /wp/」から「RewriteBase /」に変更する。

RewriteEngine On
RewriteBase /    #「RewriteBase /wp/」から「RewriteBase /」に変更
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

管理画面の「設定」の変更

データベースをインポートしても「設定」などの項目の中には、変更が必要なものもある。

  • 管理画面の「設定 → 表示設定」
    「フロントページの表示」はデフォルトの「最新の投稿 」に戻っているので、「フロントページの表示」が固定ページを選択している場合など再設定する。
    「1ページに表示する最大投稿数」もデフォルトに戻っている。
  • 「ディスカッション」
    投稿のデフォルト設定などを確認する。
  • 「メディア」
    画像サイズがデフォルトに戻っている。
  • 「パーマリンク」
    ローカル環境と比較して必要であれば再設定する。
  • 管理画面の「外観 → ヘッダー」
    ヘッダー画像やテキストカラーもデフォルトに戻っている。

プラグイン等の確認

プラグインの中には、再インストールする必要があるものもあるかもしれない。コンタクトフォームなどはローカル環境で設定したものは、うまく機能しない可能性がある。うまく機能しない場合は再インストールするなどしてみるのも1つの方法。