クマのブログ

つまづいたところ、学びを書いていきます

【PHP】7.4→8.0へのバージョンアップ

前提

  • Windows 10

  • (前)PHP7.4 → (後)PHP8.0

  • 実務経験歴:21/5~

背景

会社でこれから入るプロジェクトがPHP8.0を使っているとのことでしたので、PHP7.4だった自分のPC環境をバージョンアップすることに。

その中でいくつかエラーにつまづいたので、メモ。

事象

結論:PHP8.0への移行時にたくさんエラーが発生

基本的にコチラの記事を参考に進めてみた

前バージョンのxamppファイルのアンインストール、バックアップファイル(apache, htdocs, mysql, php)を移行し終え、いよいよ動作確認。

エラーの事象ごとに書いていく。

1. MySQL起動時、即切断する

よくあるやつですね。以下エラーです。

f:id:kuma_kuma0121:20210727092145p:plain

↓エラー文

Error: MySQL shutdown unexpectedly. This may be due to a blocked port, missing dependencies, improper privileges, a chash, or a shutdown by another method. Press the Logs button to view error logs and check the Windows Event Viewer for more clues

これは想定の範囲内なので、落ち着いてググる

試したこと

1.頻出対応策を実行

blog.senseshare.jp

コチラがいい感じにまとまっていた。

記事にある通り、

  • ポート競合をチェック

  • 前回クラッシュした際の破損ファイルなどが邪魔していないかチェック

  • 設定ファイルの間違え(ログファイルをチェック)

を実行。

他の記事もざっと目を通したが大体この3つの方法で解決していたので、ほぼエラー対策終了、だと思っていた。

結論:3つとも効果なし。

3つ目のログファイルのチェックについては[ERROR]すら出ておらず、正常動作を示す[NOTE]しかなく原因の特定ができなかった、、、

2.PCを再起動

他の記事を漁りまくったが先述の通り、大体先ほどの対応で解決していることが多く、途方に暮れた

根拠はなかったが、一旦PCを再起動してみた。

結論:効果なし。依然としてMySQLは起動直後即切断される

3.MySQLデータを初期化

これは根本的解決にならず、再現性が非常に低いためあまりやりたくなかったが他に手段がなく実行することに

qiita.com

かなり力技だとわかっていながらも、バックアップファイルによる初期化を実施。

結論:まさかの効果なし。

4.mysqlファイルが空っぽ

途方に暮れる中、もう一度基礎に立ち返って、1.の対応に戻ってみた。

するとエラーログに以下表示されていた

①[ERROR] Could not open mysql.plugin table. Some plugins may be not loaded

②[ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist

2.までではこのエラーは出てなかった。

3.の力技を実行したことで、エラーが発生する準備ができたのだ、と推測。

①はエラーの原因が"Some plugins"とあり、原因特定が難しそうだったので、後回し。

②をググってみると、この記事に出会った

記事では

The only and best way to properly fix this would be restore the ‘mysql’ database or just the ‘servers’ table from your backup. 要は「唯一の解決策はバックアップファイルから'servers' table を持ってくることです。」とのこと。

5.mysql/data/mysqlに一つもデータがない。

'mysql.servers'が本来あるべき場所を特定

特に気になったのは②エラー文内のこの一文。

Table 'mysql.servers' doesn't exist

mysql.serversテーブルというファイルがあるべき場所にないのかな」

と推測したため、今回新しくインストールしたxampp内で'mysql.servers'を検索。結果は…

f:id:kuma_kuma0121:20210727222856p:plain

やっぱりない。

そして、本来'mysql.servers'がどこあるものかわからないので、バックアップとっていたxampp内で'mysql.servers'を検索すると

C:xampp/mysql/data/mysql

に本来あるものだと知った。

そして、加えて今まで作ったテーブル情報がここに保存してあった。保存形式は↓こんな感じ。

servers.MYI servers.MYD servers.frm

こんな感じの拡張子がテーブルごとに保存されていた。

ファイルが一個もない…

そして、今回インストールしたxamppで指定のルートを確認。結果は…

f:id:kuma_kuma0121:20210727223637p:plain

'mysql.servers'のみならずファイルが一つも入っていない。。。

ということで、バックアップxamppファイルの同じパスにあるファイルを全て今回のxamppにコピー。

その後、MySQLを起動すると、、、

f:id:kuma_kuma0121:20210727224711p:plain

無事起動しました!!!

所感

・今回、mysql/data/mysqlにデータが一つもなかった要因については推測ですが

バックアップファイルからちょこちょこファイルをコピーしたり、ファイル消したりしてる中で誤って消した

という可能性が高い。

・結論:バックアップを取っていてよかった。

・尚、今回のエラーはMySQLを正しく止めずに(XAMPPでstopせずに)PCを強制終了したりすると、発生する事象もあるらしいので、ご注意。