「データベースの更新が必要です」無限ループを解決|WordPressエラー復旧事例
こんにちは、webエンジニアのゾノ( @ozonosho )です。
現在請け負っている開発案件が保守フェーズに入り時間的余裕が出てきたため、先日より『WordPressのエラー復旧サービス』を再開しました。
エラー復旧は短い時間で毎回違う課題と向き合えるので、コードを早く読む勉強になるし、仮説検証のスピードアップにも繋がるし、エンジニアとしては非常に良い経験になります。(1,000本ノック的な)
そんなわけで早速昨日1件対応したので、今回の記事はその作業ログになります。
症状:「データベースの更新が必要です」の無限ループ
今回起きていた不具合は『WordPressのログイン画面で「データベースの更新が必要です」という表示が無限ループする』というものでした。
そのまま更新ボタンを押すと「更新が成功しました」と表示されるのに、その後またログイン画面にリダイレクトされて「データベースの更新が必要です」と表示される無限ループにハマっていました。
原因
そもそもなぜ「データベースの更新が必要です」というメッセージが表示されるのかというと、WordPressのファイルで定義されているデータベースバージョン値と、DBに入っているデータベースバージョン値が異なるからです。
(僕も今回/wp-admin/upgrade.phpのコードを読んで初めて知りましたw)
WordPressのアップデートをおこなうと、(データベースのバージョンが上がる場合)まずはファイルで管理されているデータベースバージョン値(/wp-includes/version.php内に記載)が更新されます。
その後、ログイン画面を開いた際に、ファイルの値とDBに保存されている値(wp_postmetaテーブルにmeta_key「db_version」として保存されています)を比較して差分があればWordPressは「データベースの更新が必要だ!」と認識してメッセージを表示します。
つまり、このエラーが起こる可能性としては、
- ファイルで管理されているデータベースバージョン値がおかしい
- データベースの更新をしたのにDBに入っているデータベースバージョン値が更新されていない
上記いずれかあるいは両方に当てはまるだろうと考えられます。
解決方法
まずググるとプラグイン「DB Cache Reloaded Fix」を利用している場合にこの問題が起こるという事例が出てきます。
このプラグインを利用するとデータベースバージョン値を見る時に最新の情報ではなくキャッシュされているものを見るためですね。
その場合は下記2つのファイルを消すことで解決するようです。
/wp-content/db.php
/wp-content/plugins/db-cache-reloaded-fix
ただ、僕が請け負った依頼ではこのプラグインを利用していなかったので、ファイルの値がおかしいか、DBの値がおかしいかのどちらかでした。
そして、どちらもおかしくなっていましたw
version.phpの中身は空になっていて、さらにDBの値も空になっていました。
そのためWordPress公式サイトから現在のバージョンに対応するversion.phpを持ってきてファイルを置き換え、そこに記載されているデータベースバージョン値をDBに保存したところ、、、
正常に更新して無限ループも解消されました。
おわりに
以上、今回の記事ではWordPressの不具合「データベースの更新が必要です」無限ループを解決する方法を紹介させていただきました。
当サイトではWordPressのエラー復旧を【一律18,000円】【完全成功報酬】で請け負っています。お困りの方は下記ページよりご相談ください。