web学習日記

プログラミングやweb関係を学んだことを呟くブログ

LaradockでCakePHPを構築した時に起きたphpmyadminに接続できなかったからメモする

f:id:nana205:20190614011943j:plain

何が起きたのか

LradockでCakePHPを構築している際にmysqlに接続したがうまくログインすることができない。 mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] エラー 改めてenvファイルにあるMysql PERCONA_PASSWORDとPERCONA_ROOT_PASSWORDを調べて入力したがエラーが返ってきた。

原因

LradockにあるのはMySQL8.0 の認証方式の変更が原因だったようだ 今までのmysql5.7までの認証方式はmysql_native_passwordだった。 今回はcaching_sha2_password方式変わっていた。そこでmysqlコンテナーに入りdefaultとrootの認証方式を変更した。

解決方法

Before:認証方式をチェックする

mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| default          | %         | caching_sha2_password |
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

ここのdefaultとrootのプラグインを変える

mysql> ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';`
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';

確認

mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| default          | %         | mysql_native_password |
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

変更できています。 一応 laradkck/mysql/my.cofファルにも任意の場所に変更を書き加える default_authentication_plugin=mysql_native_password

余談だがコンテナーを起動する際にあらかじめmysqlフォルダのDockerfileのMysqlバージョンをlatestから5.7に変更するとmysql5.7を利用できる。 あと、途中mysqlに接続できたのはいいがデータベース作れなかったことがあったが、これはenvファイルのDATA_PATH_HOST=/.~laradock/dataの永続化していたようだ。 これをDATA_PATH_HOST=.laradock/dataにしたらエラーが消えた。