moving wordpress icon

WordPress シングルサイトからマルチサイトへデータ移行 Elementor対応

Wordpressのマルチサイトをサブドメインで構築するのは便利である。だが、シングルサイトからマルチサイトに移行するのは、少々厄介だ。Elementor対応。

Elementor サイトのデーター移行

Elementor サイトの移行の推奨は、シングルサイト同士ならば、

DB丸ごとコピー

uploads丸ごとコピー

URL置換

media regenerate

CSS再生成

この方法が最も安全と考えられる。だが、ここでは、マルチサイトに移行するので、少し手直しが必要です。

データー移行の大きく分けて方法は2つ

WordPress シングルサイト → マルチサイト(サブドメイン型)へ移行する正攻法を、実務向けにまとめます。

(対象:WordPress + Elementor)

 

プラグイン移行

難易度は低いが、うまくいかない時は、ちょっと大変。
小規模サイトであれば、オススメだけど、マルチサイト対応プラグインは、有料版になることが多い。
有料版の移行は、貧乏人には厳しいなぁ!

手動+WP-CLI

サーバーの操作に慣れているのであれば、手動とWP-CLIを使った修正が良いのでは無いかと考える。
バックアップ(元のサーバーのデーターを保存)を使えば、うまくいかない時は、最初からやり直すこともできる。

wordpress icon

WP-CLI インストール

WP-CLI は WordPress を管理するためのコマンドラインインターフェースで、プラグインのアップデートなどの実行ができる。サイトの移行でも安全にURLの変更が可能だ。

Read More »

シングルサイトからマルチサイトへの移行

マルチサイトへの移行で異なる点

シングルサイト同士の移行と異なるところが2点ある。

  1. データーベースのテーブル名の変更
  2. uploadsにあるディレクトリが マルチサイトではuploads/site/X に存在する(Xはマルチサイトの番号 2,3,4,5,…..)

あとは、普通のサイト移行となる。

マルチサイトへの移行の手順

新サーバーにマルチサイト(ここではサブドメイン)を構築して、サブサイト(サブサイトは2とする)を作成する。

  1. 旧サーバーからデータベースを取り出し、テーブルのリネームする。
    リネームしたデーターベースを新サーバーに取り込む。
  2. 旧サーバーのupload を新サーバーの/uploads/sites/2/ にコピーする。
  3. 新サーバーのデーターベースの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)を選択して、上段の「操作」をクリックする。

phpmysql_name_chage

スクロールして「テーブルを(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つだけにチェックが入った状態にする。

画像は3つだが、6テーブル選択する

他の設定はデフォルトのままスクロールしていき「エクスポート」をクリックする。

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を使ったデータベースのテーブルのコピーとリネーム関連が面倒ですね。

WordPress シングルサイトからマルチサイトへデータ移行 Elementor対応

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連コンテンツ

Post Comments

Post Comments の CSS

テーマHelloには、Post Comments の外観のCSSがないので追加しよう。

最近の投稿

Post Comments

Post Comments の CSS

テーマHelloには、Post Comments の外観のCSSがないので追加しよう。

WordPress シングルサイトからマルチサイトへデータ移行 Elementor対応