Laravel 6 でmysqlのDBに接続できない!(解決方法)

##環境
macOS Catalina
Laravel Framework 6.17.1
PHP 7.2.28

Laravelを試してみようと思って公式（の和訳）の[Laravel 4.2 Laravelクイックスタート
](https://readouble.com/laravel/4.2/ja/quick.html)をやってみたところルーティング(app/routes.php)がなかったり、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 and table_type = 'BASE TABLE')
```

とかエラー出てなんやねんってなったので解決方法をメモ。

##そもそもLaravel 4.2じゃなかった件
クイックスタート通りに

```
composer create-project laravel/laravel your-project-name --prefer-dist
```

をすると現在(2020年3月2日)ではlaravel6系がインストールされる。
僕の場合でも`Laravel Framework 6.17.1`がインストールされ、laravel4系に比べていくつか変更がありルーティングは`routes/web.php`に書くことになったので`app/routes.php`なんてものはない。

最新の和訳（終）は5.8系だったけどどうせだから最新のものでやりたいじゃん？ってことで6系でクイックスタートできるように試行錯誤した。


##適当にDB作成してなんとなく.envを編集してもlaravelさんはmysqlを認知してくれない
適当にやってたからか` php artisan migrate`でマイグレートしようとしても

```
22 04:17:42 :test-app$ 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 and table_type = 'BASE TABLE')

  at /Users/僕の名前/Documents/勉強/laravel/test-app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll format the error
    666|         // message to include the bindings with SQL, which will make this exception a
    667|         // lot more helpful to the developer instead of just the database's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e
    671|             );
    672|         }
    673| 
```
うーん🤔

laravelちゃんはなんだかmysqlのことがキライみたいで、いつもいつも不愛想にエラードボドボして、メッセージイタイイタイなのだった。

なのでmysqlをlaravelちゃんに認知してもらおう。
とりあえず新規ユーザー作成して権限与えてパスワード認証方式がcaching_sha2_passwordだとlaravelちゃんは対応してないからmysql_native_passwordに変更してあげよう。

###やること箇条書きにするとこんな感じ
- コンソールでmysqlにrootでログイン
    - `mysql -u root `

- ユーザー作成 
    - `create user 'ユーザー名'@'localhost' identified by 'パスワード';`
    - `SELECT Host, User FROM mysql.user;`//作成できたか確認。
- DB作成
    - `create database laravel;`
    - `show databases;`//作成できたか確認。

 
- 権限変更 
    - `grant all privileges on laravel.* to '作成したユーザー名'@'localhost';`
    - `FLUSH PRIVILEGES;`


- ユーザーのパスワード認証方式を変更 
    - `ALTER USER '作成したユーザー名'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード':`
    - `SELECT user, host, plugin FROM mysql.user;`//変更できているか確認


- ユーザーに移動
    - `quit`して一度mysqlから抜ける
    - コンソールで`mysql -u 作成したユーザー名 -pパスワード:`
    - `show databases;`　//DBがあるか一応確認

これでLaravelさんがmysqlにアクセスする準備が整った。

あとは.env を修正する。

```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel（DB名）
DB_USERNAME=作成したユーザー
DB_PASSWORD=作成したユーザーのパスワード
```

これでマイグレートが走るはず
`php artisan migrate`

```
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.02 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
Migrating: 2020_03_01_172839_create_tasks_table
Migrated:  2020_03_01_172839_create_tasks_table (0.01 seconds)
```

できた！やったねチノちゃん🎉！


##参考
Laravel 6 基本のタスクリスト
https://qiita.com/ucan-lab/items/36f6e89abad26a68f69a#laravel%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

Laravel 6.x インストール
https://readouble.com/laravel/6.x/ja/installation.html

Laravel5.7、mysql8の環境でDB接続が失敗する場合の対応
https://qiita.com/akashixi/items/61f2fdb618c591bc41e2