PHP7.1からMySQL8に接続するための設定
ポイントは2点。
(1)パスワードの認証方式の変更
(2)文字コードの設定
(1)パスワードの認証方式の変更
以下のようなエラーが出たときの対策。
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
PHP 7.1.16またはPHP 7.2.4よりも前のバージョンのPHPでは、MySQL8のデフォルトのパスワード認証方式caching_sha2_passwordに対応していない。
(参考: PHP: 要件 – Manual)
パスワード認証方式をmysql_native_passwordに変更する必要がある。
(1-1) 既存のユーザーのパスワード認証方式を変更する
既存のユーザーのパスワード認証方式を確認する。
SELECT user, host, plugin FROM mysql.user;
plugin列が「caching_sha2_password」なら新しい認証方式になっている。
既存のユーザーのパスワード認証方式を変更する。
ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'XXXX';
(1-2) 新規のユーザーのパスワード認証方式を変更する
新規に作成するユーザーのパスワード認証方式を変更ため、my.cnfに以下の行を追加する。
[mysqld]
default_authentication_plugin=mysql_native_password
(2)文字コードの設定
以下のようなエラーが出たときの対策。
SQLSTATE[HY000] [2054] Server sent charset unknown to the client.
my.cnfに以下の行を追加する。
[mysqld]
collation-server=utf8mb4_unicode_ci
character-set-server=utf8mb4
最後にMySQLを再起動する。
$ sudo systemctl restart mysqld