PHP
Mac
mamp
laravel
laravel5

migrateで[PDOException]SQLSTATE[HY000] [2002] No such file or directoryと出た時のメモ

環境

  • PC: mac
  • Laravel: 5.1

内容

マイグレーションファイルを作成し、$php artisan migrate を実行すると

[PDOException]                                    
SQLSTATE[HY000] [2002] No such file or directory

とエラーが、、、MySQL接続エラーらしい。database.phpと.envは設定したため、ハマった

解決方法

database.phpで unix_socket を設定すればいい
unix_socketはMySQLから $show variables like '%sock%'; を実行

+-----------------------------------------+-----------------------------------------+
| Variable_name                           | Value                                   |
+-----------------------------------------+-----------------------------------------+
| performance_schema_max_socket_classes   | 10                                      |
| performance_schema_max_socket_instances | 322                                     |
| socket                                  | /Applications/MAMP/tmp/mysql/mysql.sock |
+-----------------------------------------+-----------------------------------------+
database.php
'mysql' => [
      'driver'    => 'mysql',
      #省略#
      'unix_socket' => 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
],

これでマイグレーションできる

どうやらlocalhostの場合はunixSocketで通信を行い、
127.0.0.1の場合はポート経由で通信を行っているらしい。 へぇ〜

unixSocketで接続しようとするが、mysql.sockが見つからないため、No such file or directory

ソケットについてのお話。分かりやすく説明してる人がいたのでお茶を濁す、、、
調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話

.env
DB_HOST=127.0.0.1

とするとunix_socketの指定をしなくてもマイグレーションできる

参考