WordPressサイトの移転は、All in One Migrationを使えばOKという風潮があります。多くのサイトはそれで問題ないでしょう。しかし、プラグインで移転できないケースも多々あります。
例えば、サーバーの制限でプラグインが動かない、なんてのは結構な頻度で起こります(Xfreeやお名前.com SDサーバー、GMO iclusta)。その場合、プラグインに頼っていると状況は一気に苦しくなります。
もともと便利なプラグインが無かったころは自分でバックアップして移転していたわけですが、最近はファイルの数もサイズも大きくなってきていてFTPでチマチマファイルを移すと時間もかかりますし、サーバーによってはファイルの取りこぼしも起きます。
多くの場合、問題が起きる原因は移転元にあります。
移転元の環境が古かったり、制限があったりするので、まずは移転元から如何に早く確実にファイル一式とデータベースを吸い上げるかがポイントになります。
移転元でうまくデータが吸い上げられたら、移転先では制限が緩いことが多いのでSSHを使って一気に片付ける。
だけど最後はプラグインで最終仕上げをするというのが、私が到達した結論です。
この記事では、過去色々なサイトのWordpress移転をしてきて、移転元がどのようなサーバーでもほぼほぼ対応できる手順をまとめています。
WordPress移転元サイトで行う手順
- 移転元手順1サイト一式をTARで固める
成果物:Wordpressディレクトリ一式をまとめた1つのTARファイル
- 移転元手順2DBをエクスポートする
成果物:wp-config.phpで使用しているDBのSQLダンプファイル
サイト一式をTARで固める
FTPで簡単、確実にダウンロードできるように、Wordpressディレクトリ一式をtarで固めます。
プラグインを使う場合
WP File Managerを使う。
圧縮するとタイムアウトする可能性があるので、無圧縮でTARで固める。
WP File Managerを使って、Wordpressファイル一式があるディレクトリを表示
Ctrl+aですべて選択⇒右クリック⇒Create Archive ⇒ TAR Archiveと進み、Archive.tarを作る
SSHコマンドライン
カレントディレクトリ以下を全て固めるコマンド
tar cvf Archive.tar ./*
DBをエクスポートする
DBのサイズはダンプしてみると意外と大きく、移転先でphpmyadminを使うとインポートできないのが普通。
20MBを超えるあたりからインポートできないので、ある程度の記事があるサイトはphpmyadminではインポートできないと思います。
今回の手順ではphpmyadminをインポート時に使わず、SSHを使うのでファイルサイズは特に気にせずダンプします。
phpmyadminを使う場合
Xserverの場合
DBのエクスポートが管理画面のメニューにあるので、wp-config.phpで調べたDB名を見つけてバックアップボタンを押してダウンロードします。
Xserverのこの機能は意外と便利です
SSH+mysql+mysqldumpを使う場合
# 接頭語 hoge_ というテーブルに対して dump を実行
mysql -h HOST -p -u USER DB_NAME -N -e 'show tables like "hoge_%"' | xargs mysqldump -h HOST -p -u USER DB_NAME > dump_hoge.sql
WordPress移転先サイトで行う手順
- 移転先手順1WordPressを自動インストール
成果物:移転先のDBとwp-config.php
- 移転先手順2DBをインポートする
- 移転先手順3wp-config.phpファイルを編集してバックアップ
- 移転先手順4ファイル一式を移転先にコピー
- 移転先手順5wp-config.phpのバックアップを元に戻す
- 移転先手順6WordPressにログインする
- 移転先手順7All in One Migrationでエクスポートする
- 移転先手順8All in One Migrationで復元する
WordPressを自動インストール
DBを作成するのが面倒なので、Wordpressの自動インストール機能が使える移転先の場合は、簡単インストールを使うと、移転先のDBとwp-config.phpを自動作成できます。
DBをインポートする
phpmyadminでsqlファイルをインポートは9割がた失敗する。そうなるとテーブル分割とかファイル分割とか果てしなく面倒になる。
時間の無駄なので、SSHを使う。
wp-config.phpファイルを編集してバックアップ
wp-config.phpは移転先にあるものを使用します。
ただし、移転先のwp-config.phpに書かれているDB接頭辞は、 移転元のwp-config.phpに書かれていた接頭辞に書き換えます。
/**
WordPress データベーステーブルの接頭辞
*
それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
インストールすることができます。半角英数字と下線のみを使用してください。
*/
$table_prefix = 'wp_';
例えば、移転元がwp_の接頭辞で、移転先がwp2_の場合、移転先でDBをインポートするとwp_の接頭辞でテーブルが作成されます。それに合わせるために、移転先のwp-config.phpの接頭辞をwp2_からwp_に書き換えます。
ドメイン名が変更になる場合だけでなく、同一ドメインの場合もhttpsで設定値が書かれていると面倒なので、wp-config.phpの先頭にhomeとsiteurlを書き足す。
define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');
wp-config.phpを名前を変えてコピー(バックアップ)
cp wp-config.php wp-config.php.org
ファイル一式を移転先にコピー
- FTPで移転先のWordpressディレクトリに、Archive.tarを転送
- Archive.tarを解凍
wp-config.phpのバックアップを元に戻す
tarを展開すると、wp-config.phpが移転元のファイルになっていますので、先ほどバックアップしておいたwp-config.phpで置き換えます。
mv wp-config.php.org wp-config.php
WordPressにログインする
DBの更新やメールアドレスの確認をする。
サイトが表示できて、Wordpressにログインできたら、wp-config.phpのhomeとsiteurlは削除する必要があります。wp-config.php に書かれたままだとダッシュボードの設定から設定値が書き換えられないからです。
ただし、DBのhomeとsiteurlに間違った値が書かれたままの場合は、次の手順で対応します。
All in One Migrationでエクスポートする
移転前後で、ドメイン名が変更になる場合はDB内に古いドメイン名が残っています。
All in One Migrationのエクスポート時のDB置換機能を使うと、新旧ドメイン名の置換を確実に行うことができます。
公式サイトの説明には注意して使用するようにコメントが書かれていますが、移転前後のドメイン名の置換であれば問題は起きないと思います。
Find <text> Replace with <another-text> in the database
This option finds a text in website’s database and replaces it with another on all places for as many pairs – find/replace, as you add. Normal website migration does not suggest using this option because the plugin will take care of renaming the elements of the site to the URL that you import to. This is an advanced feature that should be used with care by people that understand the construct of the WordPress database. Please bear in mind that this change can affect your user access details to the site – be careful what you replace.
https://help.servmask.com/knowledgebase/all-in-one-wp-migration-user-guide/
エクスポート時に、文字列置換のオプションがるので、古いドメイン名と新しいドメイン名を指定することで、エクスポートされたファイルは新ドメインに置き換わったデータになって保存されます。
エクスポートするとバックアップに保存されるので、ファイルはダウンロードする必要はありません。
All in One Migrationで復元する
エクスポートするとバックアップにファイルが作成されるので、そのまま復元すると、一連の移転が完了します。
まとめ
サイト移転のキモは、移転元でファイル一式をtarで固めてFTPでダウンロードできるか、移転先ではSSHが使えてmysqlコマンドでインポートできるか、それにつきます。