Dupulicatorプラグインを使ってWEBサイトを移管したときに、エラーが発生し、元のWEBサイトと移管先のWEBサイトの両方が表示されなくなった場合の対処法をまとめています。
エラーの内容
エラーの内容は以下のようなものです。
Duplicatorでいざ移管が終わって、ログイン画面を表示しようとしたときに致命的なエラーが発生しました。
-----------------------------
スクリプトファイルテスト: /home/users/0/***/web/photoone/wp-login.php
例外テストスクリプトファイル /home/users/0/***/web/photoone/wp-login.php が存在しません
ファイル: /home/users/0/***/web/photoone/wp-content/wp_test_script_6fa71dc-22043512.php[119]
- - 痕跡 - -
-----
新しいWEBサイトのURLを叩くと404となります。
また、古いURLを叩くと、自動で新しいURLに転送され、同じく404ページが表示されます。
発生原因
発生原因は、次の2つです。
データベース移管時の設定
WEBサイトを移管するときにデータベースはそのままで、ドメイン(URL)だけ変更したいという目的で、「Empty Database」を選択し、HostやDB名、ユーザー名などを既存のデータベースと全く同じにしたことでした。
Empty Databaseは指定したデータベースのすべてのテーブルを削除して空にし、移行元のデータベースからすべてのテーブルを再作成してデータをインポートするという設定だそうで、これにより移行前のWEBサイトも、移行後のWEBサイトもどちらも表示されないという事態になりました。
正しくは「Backup existing tables」を選択すべきでした。
PHPバージョンの相違
移管前と移管後のWEBサイトでPHPバージョンが異なっていることも、最終的に移管が上手くいかない原因でした。(こちらに関しては一番最後の方に詳細を記載しています)
データベースのデータは消えていない
「Empty Database」の設定はデータベースのデータを全て消すとありますが、今回の場合、すべてのデータが消えたわけではなく、古いドメイン名が新しいドメイン名で置き換わったようでした。
試しにphpMyAdminにログインして、対象のデータベースの中で新しいドメイン名があるか検索を行います。
すると、次の6つのテーブルで新しいドメイン名が3874か所見つかりました。
また、wp_postsの中を確認するとこれまでに書いた記事も全て残っていました。
このことから、DBの中身が完全に空になったわけではなく、ドメインの文字列が置き換わった状態で移管作業が途中ストップしていると想定されます。
wp_optoinsを修正する
wp_optionsの「siteurl」と「home」を確認すると、どちらも新しいURLに置き換わっています。
これが原因で、古いURLを叩くと自動で新しいURLに転送がかかっていた原因です。
このURLを古いものに戻します。
この状態で古いWEBサイトのURLを叩くとサイトが表示されました。
一部ロゴなどが表示されていませんが、データは残っていることが確認できました。
ただし、管理画面にログインすることはできません。
管理画面にも無事ログインすることができました。
文字列を置換する
置換のためのSQL構文
WEBサイトが生きていることが確認できたので、データベースで置き換わってしまったURLを元に戻します。
phpMyAdminに一括置換機能はないため、SQLを使って書き換えを行います。
UPDATE テーブル名
SET カラム名 = REPLACE(カラム名, '対象の文字列', '置き換え後の文字列');
複数まとめて行う場合は以下のように記述します。
UPDATE テーブル名
SET カラム名1 = REPLACE(カラム名1, '対象の文字列', '置き換え後の文字列'),
SET カラム名2 = REPLACE(カラム名2, '対象の文字列', '置き換え後の文字列'),
SET カラム名3 = REPLACE(カラム名3, '対象の文字列', '置き換え後の文字列');
wp_optionsテーブルの置換
まずはoptionsテーブルを置換します。対象のテーブルを選択した状態で上部メニューの「SQL」をクリックします。
下の「UPDATE」を選択します。
すると、自動で、UPDATEメソッドを使った例文が記述されます。
これをREPLACEメソッドを使ったものに書き換えます。
UPDATE `wp20230811112911_options`
SET `option_id`=REPLACE(`option_id`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`option_name`=REPLACE(`option_name`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`option_value`=REPLACE(`option_value`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`autoload`=REPLACE(`autoload`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/');
SQLが記述できたら、「クエリをシミュレート」をクリックします。
すると実行結果のシミュレーションが表示されます。
6か所が該当していることがわかります。
これでOKなので「実行」をクリックします。
これで書き換えが完了です。
wp_postmetaの修正
続いてwp_postmetaテーブルを修正します。48件新しいURLになっているので、これを戻します。
wp_optionsと同じ手順でSQLを記述します。
UPDATE `wp20230811112911_postmeta`
SET `meta_id`=REPLACE(`meta_id`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_id`=REPLACE(`post_id`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`meta_key`=REPLACE(`meta_key`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`meta_value`=REPLACE(`meta_value`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/');
クエリをシミュレートで確認して、問題がなければ「実行」をクリックします。
wp_postsの修正
同様にしてwp_postsテーブルも修正します。
カラムが20個あるので少し大変です。
UPDATE `wp20230811112911_posts`
SET `ID`=REPLACE(`ID`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_author`=REPLACE(`post_author`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_date`=REPLACE(`post_date`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_date_gmt`=REPLACE(`post_date_gmt`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_content`=REPLACE(`post_content`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_title`=REPLACE(`post_title`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_excerpt`=REPLACE(`post_excerpt`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_status`=REPLACE(`post_status`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`comment_status`=REPLACE(`comment_status`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`ping_status`=REPLACE(`ping_status`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_password`=REPLACE(`post_password`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_name`=REPLACE(`post_name`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`to_ping`=REPLACE(`to_ping`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`pinged`=REPLACE(`pinged`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_modified`=REPLACE(`post_modified`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_modified_gmt`=REPLACE(`post_modified_gmt`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_content_filtered`=REPLACE(`post_content_filtered`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_parent`=REPLACE(`post_parent`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`guid`=REPLACE(`guid`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`menu_order`=REPLACE(`menu_order`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_type`=REPLACE(`post_type`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`post_mime_type`=REPLACE(`post_mime_type`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`comment_count`=REPLACE(`comment_count`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/');
実行をクリックして置換します。
wp_usermetaの修正
同様にしてwp_usermetaテーブルを修正します。
UPDATE `wp20230811112911_usermeta`
SET `umeta_id`=REPLACE(`umeta_id`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`user_id`=REPLACE(`user_id`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`meta_key`=REPLACE(`meta_key`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/'),
`meta_value`=REPLACE(`meta_value`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/');
wp_users
同様にしてwp_usersテーブルを修正します。
データベースの検索で確認すると、対象のカラムはuser_urlのみで、かつ末尾のスラッシュがありません。
このため、user_urlカラムに絞って置換を行います。
UPDATE `wp20230811112911_users`
SET `user_url`=REPLACE(`user_url`, 'http://photoone.prograshi.com', 'https://prograshi.com/photoone');
wp_cocoon_speech_balloons
同様にしてwp_cocoon_speech_balloonsテーブルを修正します。
データベースの検索で確認すると、対象のカラムはiconのみです。
このため、iconカラムに絞って置換を行います。
UPDATE `wp20230811112911_cocoon_speech_balloons`
SET `icon`=REPLACE(`icon`, 'http://photoone.prograshi.com/', 'https://prograshi.com/photoone/');
以上で置換作業は完了です。
Duplicatorで再移管
Duplicatorで再度移管を行います。
今回は安全のため新しいDBを作成して、そこに移管を行います。
ここで再度同じエラーが発生しました。
PHPの設定を変更する
移管前のドメインと移管後のドメインを確認すると、移管前のドメインのPHPのバージョンは「7.4(CGI版)」となっているのに対し、
移管後のドメインは「8.3(モジュール版)」となっています。
このため、新しい方のPHPバージョンを落として古いドメインと合わせます。
この状態で再インストールすることで無事にWEBサイトの移管が完了しました。