laradockを利用してmysqlを立ち上げたところ、接続できなかったのでメモ。_φ(・_・
Qiitaのこの記事を参考にlaradockによるdockerで立ち上げたところ、
の部分で小一時間詰まったのでメモ。
第一のハマりポイント
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| $php artisan migrate
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations)
at /var/www/laradock/links/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|
Exception trace:
1 PDOException::("SQLSTATE[HY000] [2002] Connection refused")
/var/www/laradock/links/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel", "laravel", "p@ssw0rd", [])
/var/www/laradock/links/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Please use the argument -v to see more details.
|
原因: 作成したアプリの直下に生成される .envファイルの DBHOSTが 127.0.0.1 (デフォルト)のため
解決:DBCONNECTIONと同じにしてあげれば良い
第二のハマりポイント
DBCONNECTIONの設定見直しで解決したと思っていたが、あいかわらずエラーがでていた。
当初1と同じエラーが出たとおもっていたため、IPアドレスやコンテナ名にしてためしていた(ためにエラーメッセージをよく見ていなかった)ため、ハマった。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| root@a2fed1d769ca:/var/www/laradock/links# php artisan migrate
Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations)
at /var/www/laradock/links/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|
Exception trace:
1 PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")
/var/www/laradock/links/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct("mysql:host=mysql;port=3306;dbname=laravel", "laravel", "p@ssw0rd", [])
/var/www/laradock/links/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Please use the argument -v to see more details.
|
原因:デフォルトのまま、mysqlをmysql のLatest(Server version: 8.0.15 MySQL Community Server – GPL)をいれたため、Mysql8のデフォルト認証方式が(Mysql5以前と)かわったため
解決:Mysqlで接続するユーザ の方式を旧方式に変更しておけば良い
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| laravel | % | caching_sha2_password |
| laravel | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
8 rows in set (0.00 sec)
mysql> ALTER USER 'laravel'@'%' IDENTIFIED WITH mysql_native_password BY 'p@ssw0rd';
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'laravel'@'localhost' IDENTIFIED WITH mysql_native_password BY 'p@ssw0rd';
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT user, host, plugin FROM mysql.user where user = 'laravel';
+---------+-----------+-----------------------+
| user | host | plugin |
+---------+-----------+-----------------------+
| laravel | % | mysql_native_password |
| laravel | localhost | mysql_native_password |
+---------+-----------+-----------------------+
2 rows in set (0.01 sec)
|
※laravel ユーザ は 作成したアプリの .envの設定で定義したもの