Laravelのphp artisan migrateでSQLSTATE[HY000] [2002] Connection refusedが返る

#エラーメッセージ
```
   Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = homestead and table_name = migrations)

  at /Users/username/code/LaravelSample/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")
      /Users/username/code/LaravelSample/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=homestead", "homestead", "secret", [])
      /Users/username/code/LaravelSample/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.
```

#環境
homesteadを入れたばかり

#原因の目星
PDOが例外を返していることから、PDOの引数が原因のように思われます。この引数をコントロールしている.envの設定がおかしいのではないか？と目星をつけて調べていきます。

#原因を調べる

.envファイルの下記の行がPDOの引数と対応しているようです。

```:.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
```

mysqlにログインして登録されたデータを出してみると下記の結果になりました。

1.vagrant sshしてログイン
2.MySQLにユーザー名rootでログイン（パスワードは未設定）

```
　mysql -u root
```
この状態で事前に登録したデータがきちんと出せることを確認してみます。

```:bash
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| homestead          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> select * from homestead.people;
+----+---------------+----------------------------+-----+---------------------+---------------------+
| id | name          | mail                       | age | created_at          | updated_at          |
+----+---------------+----------------------------+-----+---------------------+---------------------+
|  1 | updatedname01 | updatedmail01@mail.co.jp   |  33 | 2018-01-01 00:00:00 | 2019-04-08 07:06:33 |
|  2 | hanako        | hanako@hanako.jp           |  64 | 2018-01-01 00:00:00 | NULL                |
|  3 | sachiko       | sachiko@sachiko.jp         |  48 | 2018-01-01 00:00:00 | NULL                |
|  4 | sampleName01  | sampleaddress01@mail.co.jp |  11 | 2019-04-08 06:40:27 | 2019-04-08 06:40:27 |
+----+---------------+----------------------------+-----+---------------------+---------------------+
```
登録されたデータが表示されました。つまりこの状態でログインできればmigrationも成功するだろうと予想できます。

MySQLにログインした際のusernameとpasswordは.envファイルのものと異なっている事がわかります。.envファイルの設定をこれに合わせればクリアできそうです。今MySQLにはユーザとしてrootしか登録されていない状態で、rootにパスワードは未設定なので、まずrootのパスワードをsecretに変更します。

```
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> UPDATE user SET authentication_string=password('secret') WHERE user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 2  Changed: 0  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Bye
```

変更したパスワードでログインできるか確認します。

```
vagrant@homestead:~$ mysql -u root -p
Enter password: 
(secretと入力しEnter)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 80
Server version: 5.7.23-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
```
パスワードがきちんと変わっている事が確認できました。
.envファイルのユーザも変更します。

```:.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=secret
```

これで.envファイルの設定と、MySQLにログイン出来た際の設定を合わせることができました。この状態で再度php artisan migrate でイケるか！？と思いましたが、冒頭のエラーが出てダメでした。PDOの引数が原因ではないようです。

#もうちょい調べてみる
調べていたところ、migrateをプロジェクトフォルダに対して行なっていた事が判明。homestead内で行なわなければ意味がない！というわけでvagrant sshでログインして再度migrateしてみます。

```

vagrant@homestead:~$ cd ~/code
vagrant@homestead:~/code$ php artisan migrate
Migrating: 2019_04_08_072752_create_boards_table
Migrated:  2019_04_08_072752_create_boards_table
vagrant@homestead:~/code$ 
```
通りました！

#結論
php artisan migrateはvagrant sshにてログインして行う必要アリ。