WordPress マルチサイトを移行する際のメモ

マルチサイトを移行する際につまづいたところを、自分のために書いておこう。

当サイトの WordPress を長らく更新していなかった。
更新ついでに、ダッシュボードで警告が出ていた PHPのバージョンと MySQL も更新しようとステージングサイトを用意することにした。Web に関わる仕事をしていながら ここをサボっていた理由は マルチサイトのためだ。

マルチサイトはいろいろ面倒くさい。
WordPress を覚えたてのころにお得感を感じて始めたマルチサイトだった。案件では避けたいながら、自サイトをマルチサイトにしたおかげで少し知見ができたのはよかった。
だが面倒くさい。

10年以上運営しててバックアップからレンタルサーバーの乗り換え、ドメイン移管も経て面倒ばかり覚えている。バックアップは無料のプラグインでは対応していないため、手動となる。復元も手動でできるスキルが身についたのようになるので知見としてはよい。
だが面倒くさい。
失敗も多い。今回は PHP、MySQL、WordPress のバージョンを同時に上げたかったので、ステージングを用意してコツコツやることにした。

作業前の環境は

  • PHP 7.4
  • MySQL 7.4
  • WordPress 6.3.7
  • さくらインターネット スタンダードプラン

サブドメインでステージングサイトをつくる

さくらインターネットにステージング環境のサービスがあるものの、3ヵ月で消えると書いてある。それはどうかと思って、サブドメインで用意した。

  • サブドメインを作成
  • SSL を申請 (無料のやつ)
  • ディレクトリを作成して紐づける
  • 1時間ほどで使えるようになる

ファイルを複製

さくらインターネットのコントロールパネルのファイルマネージャーで複製することができる。FTP でやると時間がかかる。

MySQL を複製

  • 運用中のデーターベースをエクスポート
    さくらインターネットのコントロールパネルの phpMyAdmin で 利用中のデータベースにアクセスし、すべてのテーブルを選択してエクスポート
    データベースレベルではなく、テーブルレベルでエクスポートしておく
    マルチサイトのため 109個のテーブルがあった。
  • MySQL 8 でデータベースを作成し、上記をインポート

MySQL のなかでドメインを置換

データベースのなかで、本番ドメインの部分をステージングのドメインに書き換える。phpMyAdmin のSQL 文 で置換することができる。

  • ○○○.jp → staging.○○○.jp みたいなかんじ
  • ディレクトリ名が書いてる部分もあるので、そちらも置換する

UPDATE wp_posts SET content =REPLACE( content , "○○○.jp ", "staging.○○○.jp");

のような SQL の実行を該当のテーブルに対して行った。

マルチサイトでは wp_2_posts のようなテーブルもあるため多い。プラグイン独自のテーブルが加わる場合もある。面倒な場合は post_options だけ置換しておけばいいような気がする 。
みなさんはどのように置換しているのだろうか?

wp-config を書き換える

データーベースに接続すべく、wp-config を書き換える。
こんなのおてのものだ…と思っていたところエラーが表示された。

データベース確率エラー

以前は「データーベースに接続できません」のエラーだったことから本ブログのタイトルに借用したものの、今は「データベース確率エラー」が表示される。

見慣れたエラーとはいえ、英語で表示されるのが気になった。よほどダメってことだろう。
このエラーが表示される原因はといえば、wp-config の修正が間違っていることが多い。

  • WordPress のためのデータベース名
  • MySQL データベースのユーザー名
  • MySQL データベースのパスワード
  • MySQL のホスト名

このへんが間違っていることでエラーがとなる場合が多い。5度ほど見直したものの正しいように見えた。それでいてエラーが出るのはマルチサイトのせいに違いない!納得いかないため一晩放置。

マルチサイト特有のテーブル

やはりマルチサイトが怪しかった。
よく見ると MySQL のなかに wp_site、wp_blogs のテーブルを見つけた。マルチサイト特有のテーブルのため見落としていたのだ。
このなかにもドメイン名があったので置換する。

最終的にドメイン名を置換したのは下記のテーブルだった。

  • post_options の option_value (☆)
  • wp_post の content、pinged,、guid (☆)
  • sb_comments の comment_author_url (☆)
  • wp_commentmeta の meta_value (☆)
  • post_meta の meta_value (☆)
  • wp_site の domain (★)
  • wp_blogs の domain (★)

(☆) はマルチサイトのため 複数ある。
(★) は親サイトのみある。
利用しているプラグインによってこれより多い場合がある。

さくらインターネットで MySQL を更新する場合

今回はステージングサイト用に MySQL を複製したかったので、七面倒くさい手順となった。
単に さくらインターネットで MySQL を 5系から 8系に更新したい場合はツールが用意されているので、ボタンをポチッとするだけで済むよ。


コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください