当サイトのWordPressは、MariaDB/MySQLではなくSQLiteを使うプラグインwp-sqlite-dbを導入しています。
しばらくは問題なく動作していましたが、WordPress6.2.2から6.3への更新後に「DBの更新が必要」という画面で【更新】ボタンを押すと「このサイトで重大なエラーが発生しました。」と表示され、wp-adminが破損してしまいました。
今回の記事は本事象の解決方法について記載します。
Contents
・サーバ側の「/docroot/wordpress/wp-admin/*」と「/docroot/wordpress/wp-includes/*」を削除
・ダウンロードしたバージョン6.2.2のWordPressを解凍し「wp-content/*」を削除
・バージョン6.2.2のWordPressでサーバ側のWordPressを上書き
この状態でいったん動作確認を行い、問題が無いことを確認します。
参考リンク ソロ学 WordPressを手動でダウングレードする方法。(FTP使用|プラグインなし)
SQLite DB内の「db_version」を確認します。
/docroot/wordpress/wp-content/database >sqlite3 .ht.sqlite
SQLite version 3.39.3 2022-09-05 11:02:23
Enter ".help" for usage hints.
sqlite> SELECT option_name, option_value FROM wp_options WHERE option_name = 'db_version';
db_version|53496
この「db_version|53496」の数値が重要のようです。
上記確認後、wp-adminからバージョン6.3に更新します。
更新後、/docroot/wordpress/wp-includes/version.phpに記述されている「$wp_db_version」の値を確認します。
WP本体の更新に伴い、この値と上記DB内のoption_valueの値が不一致になると、前述の「DBの更新が必要」画面で本事象が発生するようです。
/docroot/wordpress/wp-includes >grep db_version version.php
* @global int $wp_db_version
$wp_db_version = 55853;
version.phpに記載されていたdb_versionの値(55853)でSQLite DB内のフィールドを更新します。
sqlite> SELECT option_name, option_value FROM wp_options WHERE option_name = 'db_version';
db_version|55853
UPDATE実行後、db_versionが55853に変更されたことを確認します。
sqlite> SELECT option_name, option_value FROM wp_options WHERE option_name = 'db_version';
db_version|55853
上手く更新出来ました。
ブラウザのキャッシュをクリアし再度wp-adminにアクセスします。
新しいWordPressが問題無く動作していれば、本事象は解消しているようです。
サードパーティのプラグインではなくWordPress公式でSQLiteに対応すべく実装が進んでいるとのことで、公式対応版がリリースされた暁にはDBの中身を移行しなきゃ、という悩みを抱えています。まあなんとかなるでしょう・・
PHPしか動かないレンタルサーバやメモリが少ない環境でも動くようになると思うので導入のハードルも下がりそうですね。