MySQL 8系で PHPから接続できない場合
どうもfujiharaです。今年も残りわずかですね。
年々寒く感じる度合いが強くなっているのですが、基礎代謝が落ちてるのが
原因かと怯えています。
今回はとある案件でサーバ移行時にMySQLのバージョンが上がり 8.x になったときに
PHPから接続できない現象が発生して解決した方法をご紹介します。
背景
とあるプロジェクトでサーバ移行が必要だったのですが、 コンテンツを移行して、いざページを表示するとMySQLにつながらない。
原因
エラーを確認するとパスワードで弾かれてました。
原因を探すとMySQL 8では パスワードがデフォルトで暗号化されるので(cache_sha2_password)
プログラムから接続する場合もこれに対応していないと接続ができないとのこと。
今回はプログラム側を変更しなかったので、 MySQL側で以下の用に対応しました。
# /etc/my.cnf
[mysqld]
default_authentication_plugin= mysql_native_password
こうした上でユーザを作成するとうまく接続できました。もしくは CREATE USER 時に IDENTIFIED WITH mysql_native_password BY 'password' を使用して パスワードを設定できるとのことです。