目次

laradockを利用したmysqlの設定


laradockを利用してmysqlを立ち上げたところ、接続できなかったのでメモ。_φ(・_・

Qiitaのこの記事を参考にlaradockによるdockerで立ち上げたところ、

1
php artisan migrate

の部分で小一時間詰まったのでメモ。

第一のハマりポイント

 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の設定で定義したもの