知り合いのWordPressのサーバを引越ししました。そのブログはサブドメイン型マルチサイトとなっており、その子サイトのみを分離して移転するという作業。
実現するためにはけっこういろいろなことをしないといけなかったので、メモ代わりに残しておきます。参考にしてみてください!
なお、別サーバに移転する方法を書いていますが、少し読み替えていただくと同じサーバの別ディレクトリに構築することもできると思います。
1.移転元の親サイトで下準備
まずは移転元の親サイトで以下の作業を行います。
移転のためにデータを減らすことと、移転先で再構築をしやすくすることを目的とした作業です。
- 不要なテーマを削除
- 不要なプラグインを削除
- 不要ユーザを削除
- 残ったプラグインやテーマをアップデート
- サーバ移転用にDuplicatorというプラグインを入れておく
- WP本体をアップデート
- サイトネットワークをアップデートして子サイト全体に適用
2.移転元の子サイトのバックアップをとる
子サイトのバックアップはDuplicatorというプラグインを使います。上述の通り、親サイトでプラグインをいれておきます。
これを使うとWPがファイルもデータベースも丸ごとバックアップされます。
バックアップを取る前に移転する子サイトのブログIDを控えておきましょう。子サイトが一つあるときは2だと思いますが、たくさん作るとその分、数字が増えます。
今回私が移転を手伝ったサイトはブログIDが12でした(笑)。どんだけ子サイト作ってるのか。この記事では以下wp_12_xxxxと表示しますが、数字のところはご自身の環境に置き換えて下さい。
またバックアップを取る前に「承認待ちコメント」がある場合は消してしまいましょう。どうせスパムなのですから。
phpMyAdminでログインして、対象DBに対して以下のコマンドを打ち込みます。
DELETE FROM wp_12_comments WHERE comment_approved='0';
ここまで終わったら、Duplicatorプラグインの画面に移ります。
Duplicatorは簡単3ステップ。
1. Setup
Archiveの設定
フィルターを指定するFilesタブのDirectoriesでバックアップに不要なディレクトリパスを入力します。
例えば、キャッシュフォルダは不要なのでフィルタに入力してバックアップを取りません。
(例) /xxxxx/www/wp-content/cache;
その他、不要なディレクトリがあれば追加します。行末にはセミコロンを付けます。
File extensionsには除外するファイルの拡張子を入力します。複数の場合はこちらもセミコロンで区切ります。
Databaseタブではバックアップを取るテーブルだけを選択します。
上で述べた子サイトのブログIDを含んだ接頭辞を持つテーブルは必要です。
あと、接頭辞に数字がついていないテーブルは親サイトのデータが入っているテーブルと、マルチサイト全体の情報が入っているテーブルです。
そのうち、親サイトのデータが入っているテーブルは不要です。
例えば、wp_12_postsというテーブルとwp_postsというテーブルがある場合、wp_12_postsが子サイトのデータテーブルになりますので、wp_postsは不要になります。
つまり接頭辞以降のテーブル名がかぶっているものを探し、ブログIDがついている方だけを残せばよいのです。
不要なテーブルにはチェックボックスにチェックを入れて、取り消し線をつけておきます。
また、マルチサイト全体の情報が入っているテーブルの中には不要なものがあるかもしれませんが、大は小を兼ねると言うので念のため。
で、Nextボタンを押す。
2. Scan
サイトのスキャニングが始まります。終わると以下のような画面に。Warmの表示があるけど、細かいことは気にしない。
ただ、Filesのサイズがあまりにも大きい場合は写真などをアップしているアップロードフォルダが原因の場合があるので、前の画面に戻ってアップロードフォルダにフィルターを掛け、移転が終わってからFTPで地道にデータを移動させたほうが良いかも。
で、下のチェックボックスにチェックを入れて、Buildボタンを押す。
3. Build
インストーラとアーカイブの2つのファイルが出来るので、それぞれボタンを押してローカルにダウンロードします。これでバックアップは完了。
しかし、もしバックアップを取得するのに504Gatewayエラーが発生した場合には、こちらの設定で対応して下さい。 → https://platzblog.com/archives/2714
3.移転先のサーバで環境構築
今回の移転先は「処理速度が早い」ということで人気のXserverでした。
初期ドメインはxxxx.xsrv.jpになりますが(xxxxの部分は契約者ごとに違います)、ここにサブディレクトリを作ってその下を移動先とします。
将来的には独自ドメイン移転するのですが、現時点では独自ドメインは引き続き移転前サーバで使うため、Xserverの初期ドメインを使っています。
こんな移転先のURLのイメージ → http://xxxxx.xsrv.jp/itensaki
FTPソフトでWebサーバに接続し、初期ドメイン下のpublic_html下に移転先フォルダを作ります。移転先での準備はこれだけ。
(例) /xxxxx.xsrv.jp/public_html/itensaki
データベースは移転先サーバ側に新しく作ります。
XserverのサーバパネルでMySQL追加をして作ります。ユーザは既存のユーザでもOKですが、その場合はデータベースに対するアクセス権を付与するのを忘れずに。
SQLサーバのアドレス、データベース名、ユーザのID、パスワードの4点は後で必要になるのでメモっておきます。
4.移転先のサーバでの復元
ダウンロードした2つのファイルを移転先サーバの以下の階層にアップロードします。
/xxxxx.xsrv.jp/public_html/itensaki
アップロード後にブラウザから以下のURLにアクセスすると、復元データのインストール画面になります。
http://xxxxx.xsrv.jp/itensaki/installer.php
内容に問題なければNextで次へ。
次の画面はデータベース設定。ここで先程作っておいたデータベースの情報を入力します。
データベース接続テストがあるので、ボタンを押してに合格したらNextで次へ。
次の画面では新しいURLとディレクトリパス、タイトルを確認。Nextを押して次へ。
最後のStep4は現時点ではやってもエラーになるので、やらなくていいです。
5.移転先サーバデータベースのデータ変更
テーブル名の変更
移転先のデータベースにphpMyAdminでアクセスします。
テーブルの接頭辞が子サイトのままのものがあるので、ブログID部分を削除。
テーブルを選んで、操作タブの中にあるテーブルオプションで変更できます。
wp_12_xxxx → wp_xxxx
wp_siteテーブル内のデータ修正
wp_siteテーブルには元サイトのドメインが書かれているので、新しいドメインとサブフォルダ名に変更
xxxxx.xsrv.jp/itensaki
wp_sitemetaテーブル内のデータ修正
wp_sitemetaテーブルの以下のkeyの値を変更。
site_name → 新しいドメイン・サブフォルダ名に http://と最後のスラッシュは不要。
siteurl → 新しいURLに 最後のスラッシュまで
wp_optionsテーブル内のキー修正
wp_optionsテーブルの91行目にwp_12_user_rolesというキーがあるので、それをwp_user_rolesに変更。
6.最後の仕上げ
wp-config.phpの編集
最後に、サーバからwp-config.phpファイルをダウンロードしてマルチサイト用の以下の記述があったら削除します。
define ('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', '');
define('PATH_CURRENT_SITE', '');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
マルチドメインでマルチサイトを作っていた場合は、以下の記述もあるかもしれないので削除。
define('SUNRISE','on');
wp-config.phpファイルをアップロードして上書きし、ブラウザから http://xxxxx.xsrv.jp/itensaki にアクセスすると…見られるはず!ですがいかがでしょうか?
アクセスできましたら、管理者でダッシュボードにログインしましょう。プラグインが全て無効になっているはずなので、有効にします。
とりあえずこれでサーバ移転と独立化ができました!
さらにドメイン変更などをする場合は、自力でがんばってください!(←おぃ!)
Duplicatorを使えばで楽にできるはずです!