Elementor サイトのデーター移行
Elementor サイトの移行の推奨は、シングルサイト同士ならば、
DB丸ごとコピー
+
uploads丸ごとコピー
+
URL置換
+
media regenerate
+
CSS再生成
この方法が最も安全と考えられる。だが、ここでは、マルチサイトに移行するので、少し手直しが必要です。
データー移行の大きく分けて方法は2つ
WordPress シングルサイト → マルチサイト(サブドメイン型)へ移行する正攻法を、実務向けにまとめます。
(対象:WordPress + Elementor)
プラグイン移行
難易度は低いが、うまくいかない時は、ちょっと大変。
小規模サイトであれば、オススメだけど、マルチサイト対応プラグインは、有料版になることが多い。
有料版の移行は、貧乏人には厳しいなぁ!
手動+WP-CLI
サーバーの操作に慣れているのであれば、手動とWP-CLIを使った修正が良いのでは無いかと考える。
バックアップ(元のサーバーのデーターを保存)を使えば、うまくいかない時は、最初からやり直すこともできる。
WP-CLI インストール
WP-CLI は WordPress を管理するためのコマンドラインインターフェースで、プラグインのアップデートなどの実行ができる。サイトの移行でも安全にURLの変更が可能だ。
シングルサイトからマルチサイトへの移行
マルチサイトへの移行で異なる点
シングルサイト同士の移行と異なるところが2点ある。
- データーベースのテーブル名の変更
- uploadsにあるディレクトリが マルチサイトではuploads/site/X に存在する(Xはマルチサイトの番号 2,3,4,5,…..)
あとは、普通のサイト移行となる。
マルチサイトへの移行の手順
新サーバーにマルチサイト(ここではサブドメイン)を構築して、サブサイト(サブサイトは2とする)を作成する。
- 旧サーバーからデータベースを取り出し、テーブルのリネームする。
リネームしたデーターベースを新サーバーに取り込む。 - 旧サーバーのupload を新サーバーの/uploads/sites/2/ にコピーする。
- 新サーバーのデーターベースのURL置換を行う。
新サーバーにマルチサイト構築
wp-config.php に:
define('WP_ALLOW_MULTISITE', true);
管理画面 → ネットワーク作成
サブドメイン型なら:
define('SUBDOMAIN_INSTALL', true);
WordPressのマルチサイトの詳しい構築方法は下の投稿にあります。
サブサイトを作成
マルチサイトでも、第一サイトの場合の移行はシングルサイトと同じなので、サブサイトを新規追加します。
ネットワーク管理 → サイト → 新規追加
subd2.example.com
新規作成ならば、blog_id = 2 となる。
データベースの移行
旧シングルサイトDBをエクスポートの前にテーブル接頭辞を変更
旧サーバーサイトのデータベースのテーブル名「wp_」のまま新サーバーサイトのデータベースにインポートすると、新サーバーサイトにデーターベースを上書きすることになりエラーで停止する。
新しいサイトが壊れてしまう可能性もある。
安全な方法は、旧サーバーのデータベースで、必要なテーブルを別名でコピーしてから新サーバーにインポートするのが安全です。
テーブル接頭辞が必要なテーブル
Elementor サイトの場合は、以下の6つのテーブルを新サーバーサイトのデータベースにインポートする必要がある。
ただし、コピーするデーターベースに同一名のテーブル名がある場合は、上書きされるので、上書きされてデーターが破損されるので十分に注意してください。
phpmyadmin のインポートでは、同じ名前のテーブルがあるのでエラーを吐く。
旧:
wp_posts
wp_postmeta
wp_options
wp_terms
wp_term_taxonomy
wp_term_relationships
新(blog_id=2の場合):
wp_2_posts
wp_2_postmeta
wp_2_options
wp_2_terms
wp_2_term_taxonomy
wp_2_term_relationships
マルチサイトの場合は、この6テーブルのみ上書きになります。
phpmyadminを使う方法
phpmyadmin を使うと目視確認できるので、安心感がある。
慣れていないのであれば、この方法が最も安全かもしれない。
新旧両方のサーバーにphpmyadminをインストールしなければならない。
旧サイトのテーブル名の変更
phpmyadmin で旧サイトのデータベースにアクセスできることが前提条件です。
目的のテーブル(wp_posts)を選択して、上段の「操作」をクリックする。
スクロールして「テーブルを(databases.table)にコピー」を探す
③テーブルの名称(wp_2_posts)を変更する。
④「実行」ボタンをクリック
※ ◉構造とデーター、◉制約を追加 を確認すること。
これらの操作を6つのテーブルで行う。
wp_posts
wp_postmeta
wp_options
wp_terms
wp_term_taxonomy
wp_term_relationships
旧サイトからテーブルをエクスポート
名称を変更したテーブル
wp_2_posts
wp_2_postmeta
wp_2_options
wp_2_terms
wp_2_term_taxonomy
wp_2_term_relationships
をエクスポートして、操作しているパソコンに一旦、保存する。
「テーブル:」スクロールして名称を変更してコピーしたファイル3つだけにチェックが入った状態にする。
他の設定はデフォルトのままスクロールしていき「エクスポート」をクリックする。
MACの場合は、ダウンロードフォルダにダウンロードされる。ブラウザの設定によるけど。
※ MAC OS の場合、ダウンロードすると自動解凍する場合があるので、ファイルの拡張子が「.zip」になっているか確認すること。
面倒だが、解凍されたファイルを右クリックで「 “xxxxx.sql”を圧縮」を選択すると圧縮ファイルが作られる。
新サイトのデータベースにテーブルインポート
phpmyadmin がインストールされてWEBブラウザからアクセスできる前提です。
安全を考えて、適当な名前のデータベースを作成して、インポートや作業用とすると良いかもしれない。
ssh で
# mariadb
MariaDB [(none)]> create database TEST;
MariaDB [(none)]> grant all on TEST.* to 'USERNAME'@'localhost';
のようにデータベースを作成しておく
作業用のデータベースをクリックしてから「インポート」をクリックする。
先ほどダウンロードしたファイル ****.sql.zip を選択する。
デフォルト設定のまま、スクロールして再下段の「インポート」をクリック。
作業用データベースに、
wp_2_posts
wp_2_postmeta
wp_2_options
wp_2_terms
wp_2_term_taxonomy
wp_2_term_relationships
の6テーブルが表示されるはず。
ここで、wordpressのデータベースにコピーしたいが、同名のテーブルは、コピーするとエラーになるので、
元の同名のテーブルを消去、または、移動したい。安全を考えると、移動になるが、
面倒だが、元からあるテーブルをリネームして作業用データベースにコピーする。
元からあるテーブルを消去DROPする。
作業用のデータベースからインポートしたテーブルをwordpressのデータベースにコピーする。
めんどくさいけど、入れ替えるみたいなかんじにする。
わかりづらいが、各々が工夫するのが一番だろう。
ファイルの移行
uploadsのディレクトリ構造
旧シングル:
/wp-content/uploads/
マルチサイト blog_id=2:
/wp-content/uploads/sites/2/
同サーバーにあるサイトの場合のコピー
ディレクトリは、各サーバーに合わせて書き換えてください。
cp -r old_uploads/* wp-content/uploads/sites/2/
異なるサーバーにあるサイトの場合 旧サーバーから
たとえば、scp を使った場合、オプション -rC
ディレクトリ構造は、Debian(Linux)
旧サーバーのディレクトリ;
var/www/wordpress/wp-content/uploads/
新サーバーのディレクトリ:
/var/www/wordpress/wp-content/uploads/sites/2/
新サーバーのアドレス: 192.168.10.50
とすると、旧サーバーのsshから
scp -rC /var/www/wordpress/wp-content/uploads/* root@192.168.10.50:/var/www/wordpress/wp-content/uploads/sites/2/
scp -rC /var/www/wordpress/wp-content/uploads/* root@192.168.10.50:/var/www/wordpress/wp-content/uploads/sites/2/
目的のディレクトリにファイルがコピーされたが確認した方が良いだろう。
新サーバーのssh から、
cd /var/www/wordpress/wp-content/uploads/site/2/
ls -al
データベースやファイルの修正 新サーバーから
WP-CLIでURL置換(超重要)
sshでwordpressのルートディレクトリに移動して、
ex) cd /var/www/wordpress (debian)
wp search-replace \
'https://sing.example.jp' \
'https://subd2.example.com' \
--url=subd2.example.com
同じだが、一行にまとめて
wp search-replace 'https://sing.example.jp' 'https://subd2.example.com' --url=subd2.example.com
WP-CLIは、シリアライズされたデーターを自動で修正されるらしい。
とくにElementorの場合は、WP-CLIを使用すべき。
root でログインした場合は、エラーになるので、推奨ではないが、
wp --allow-root .........
というふうにもできる。
WP-CLIでメディアのURL:
一応、メディアのURLも直しておく。
wp media regenerate --url=subd2.example.com
Elementor再生成
管理画面 →
Elementor → ツール → 一般 → Elementor キャッシュ→ ファイルとデーターの削除 → 変更を保存
※画像ファイル&ディレクトリだけをコピーの場合は「CSS再生成」の必要はない。ex} wp-content/uploads/sites/2/elementor/css/ にあるCSSファイルのこと 削除しても問題ないと思われる。
まとめ(最重要)
マルチサイト移行は:
ファイル移動だけではダメ
URL置換だけでもダメ
attachment構造が一致している必要あり
データベースをphpmyadminで直接書き換えると「シリアライズ」されたデーターが壊れる可能性が高いので、wp-cli を使うのが良いそうだ。
phpmyadminを使ったデータベースのテーブルのコピーとリネーム関連が面倒ですね。






