Table of Contents
PHP で MySQL に接続しようとすると、 次のようなエラーが出ることがあります。
環境
MySQL の バージョン 8 からこのようなエラーが出るようになりました。 私がこのエラーを出した MySQL のバージョンは、 8.0.11 でした。
- macOS High Sierra version 10.13.6
- MySQL 8.0.11 Homebrew
MySQL 8 からの 2種類の認証プラグイン
MySQL 8 から、 2種類の認証プラグインが使えます。
- mysql_native_password
- 従来からあった認証プラグインです。
- caching_sha2_password
- MySQL version 8 から導入された新しい認証プラグインです。
caching_sha2_password
は、 安全なパスワードの暗号化、 キャッシュを用いた認証処理のパフォーマンスの向上等のメリットが多いそうで、 MySQL 8 ではデフォルトで caching_sha2_password
が使われるようになっています。
しかし、 PHP で新しい接続プラグインがサポートされていないので(いずれサポートされるとは思いますが)、 caching_sha2_password
で管理されているパスワードを使って接続しようとするとエラーが出ます。
PHP で接続できない場合の解決策
どの認証プラグインを使うかはユーザごとの設定です。 次のようにして、ユーザごとの設定を確認できます。
そのため既存のユーザで接続できるようにする場合は、既存ユーザの設定を変更する必要があります。 新しく mysql_native_password
を使うユーザを作成して、そのユーザを使って接続することもできます。
既存ユーザの認証プラグインを変更する
次の SQL を実行します。
mysql_native_password を利用する新しいユーザを作る
次のようにして、 mysql_native_password
を使うユーザを作成します。
サーバのデフォルト設定を変える
新しいユーザを作成する場合、 認証プラグインを指定する必要があり、 デフォルトでは caching_sha2_password
が設定されます。 これを、デフォルトで mysql_native_password
を利用するよう設定すれば、 認証方式を指定せずにユーザを作成しても mysql_native_pasword
が使われます。
my.cnf
に次のように記述し、 サーバを再起動します。