WordPressの引っ越し作業は大きく分けて
- データベース
- プラグイン
- テーマ
- メディアファイルなどアップロードファイル
のコピーがあります。
これからご紹介する方法はWordPressのマルチサイトでも使えます。
どんなシステムにも引っ越し作業はありますが、WordPressにもあります。
本番環境から開発環境を作る。
開発環境から本番環境を作る。
同じシステムを複数立ち上げ。
システムエラーの復旧作業。
これらの場面に出会ったときスムーズにするための解説です。シンプルに行きます。
コピー先WordPress環境の構築
はじめに、引っ越し先のWordPress環境を用意します。
- Webサーバ
- DBサーバ(使用するデータベース作成も行う)
- PHP(ないとき。Linuxならインストールされていることが多い。)
- WordPressのインストール
KUSANAGIなら、これらをぜんぶまとめてインストール・管理できます。超高速WordPressなのもGoodです。
データベースの引っ越し
WordPressのバックアッププラグインや、mysqladminなどデータベースのバックアップコマンドでバックアップ(.sql)を作成します。
データベース設定の変更
データベースの設定が新しい環境で変わるとき、wp-config.phpの設定情報を変更します。
define('DB_NAME', 'db-name');
define('DB_USER', 'db-user');
define('DB_PASSWORD', 'db-password');
/** ここからは変更する必要がある場合。変えることはほとんどない。 */
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
データベース情報のインポート
mysql -uuser -ppassword db_name < backup.sql
データベースのリストアを行います。上は、MySQL(MarriaDB)での方法です。
ドメインの変更
引っ越し先のドメインが変わらないときは、ここは飛ばしてください。
WordPressのコマンドツールを使って、データベースに登録されているドメインをすべて一括置換します。
ここではSQLの一括置換は使いません。
wp search-replace 'old-domain.com' 'new-domain.com'
マルチサイトのときは、子サイトのテーブルが置換されないので、オプションをつけます。
wp search-replace 'old-domain.com' 'new-domain.com' --network
--networkオプションは、マルチサイトの子サイトのテーブルも置換します。
マルチサイトのときは、wp-config.phpに設定を追加します。
define('DOMAIN_CURRENT_SITE', 'new-domain.com');
- SQLの一括置換は使わない。
- 一括置換は、Wordpressのコマンド『wp search-replace』を使う。
エラーが出て困ったときは
ドメインの一括置換で次のエラーが発生することがあります。
Error: Site 'sample.test/' not found. Verify DOMAIN_CURRENT_SITE matches an existing site or use --url=<url> to override.
このエラーは、DBへ新しいデータをインポートする前に、wp-config.phpでDOMAIN_CURRENT_SITEを指定したら起きるデータの不整合です。
(すでに作成済みのテスト環境に、最新のDBデータをインポートするときなどで発生します。)
wp-config.php | 新しいドメイン |
インポートするデータ | 古いドメイン |
これが発生することも想定してドメイン一括置換のコマンドを変更します。
wp search-replace 'old-domain.com' 'new-domain.com' --url="old-domain.com" --network --path=/home/kusanagi/html/DocumentRoot
ドメインの不整合を直すために、--url="old domain"を使って、インポートするときのDOMAIN_CURRENT_SITEの値を無理やり変更します。
(wp-config.phpの値はそのままです。)
WordPressのインストールディレクトリ以外でwpコマンドが実行できるように、--pathオプションもつけました。
このコマンドはマルチサイト以外でも使えるので、ドメイン一括変更はこれで実行します。
データベースの内容を入れ替えるツールをつくりました。データベースのインポートファイルがあれば、いままでのデータベースの処理を一気に行います。bashシェルスクリプトです。
WordPress環境の引っ越し
プラグインやテーマのソースファイル、アップロードされたメディアファイルなどのバックアップを新しい環境のWordPressへコピーします。
バックアップはWordPressのプラグインが提供されているので、定期バックアップをしておくことをおすすめします。
バックアッププラグインにはデータベースのバックアップが含まれるものもあります。
おすすめなのはBackWPupです。データベース、プラグイン、テーマ、メディアを含めたアップロードファイルのバックアップができます。
WordPress環境全体のバックアップもできます。
プラグインの引っ越し
DocumentRoot/wp-content/pluginsのプラグインファイルを新しい環境へコピーします。すでに存在するプラグインは上書きしてもよいですが、念のため重複するプラグインは引っ越し先で一度削除してからコピーします。
次に、管理画面の「インストール済みのプラグイン」でコピーしたプラグインが表示されることを確認します。表示されることを確認したら各プラグインを有効化します。
DBの引っ越しが終わっていればプラグインの設定情報もコピーされているので作業は以上です。
テーマの引っ越し
DocumentRoot/wp-content/themesのテーマファイルを新しい環境へコピーします。
もしかすると、テーマファイルのカスタマイズでurlのドメインを直接記述しているかもしれません。その場合は、ドメイン名を新しい環境に合わせて変更してください。
本来はドメインを直接記述するのはよくありません。WordPressで用意されている関数を使いましょう。
メディアファイルなどアップロードファイルの引っ越し
DocumentRoot/wp-content/uploadsのファイルを新しい環境へコピーします。
引っ越し作業は以上です。
Permission deniedが出たときの対応
引っ越し作業が無事に終わりいざ動作確認を行ってみると、「Permission denied」が発生する場合があります。
これはファイルやディレクトリの権限エラーが発生しています。tar.gzなどで圧縮されたファイルを展開してから新しい環境へ転送した場合などで起きます。
バックアップファイルはだいたいtar.gzなどで圧縮されているので、新しい環境のサーバ上で展開するようにしましょう。
それでも発生する場合は、それぞれのディレクトリやファイルの権限をchmodコマンドを使って引っ越し前と同じ権限に変更します。