Laravel6.0でmigrateできなかった時の対処方法

4

目次

エラーメッセージ

ターミナル
$ php artisan migrate

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')

  at /../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|

  Exception trace:

  1   PDOException::("SQLSTATE[HY000] [2002] No such file or directory")
       /../vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=localhost;port=8889;dbname=laravel", "root", "root", [])
      /../vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

環境

  • Laravel 6.0
  • MAMP

対処法

僕の場合は.envファイルの DB への設定が足りなかった。

.env
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

細かい説明

Laravel プロジェクトを立ち上げると、.envファイルのデフォルトはこう。

.env
== 省略 ==

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

== 省略 ==

で、この DBHOST やら DBUSERNAME を確認するためにMAMPにアクセスするとこんな記述がある。

mampでの記述の図

デフォルトと違うのはポート番号と mysql.sock が指定されていないこと。なので MAMP に合わせて指定してあげればいい。

.env
== 省略 ==

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=8889
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

== 省略 ==

また、DB_DATABASE についても laravel という DB がなければ当然エラーになるため、MAMP を起動してphpMyAdminから確認してみるといい。

mampでの記述の図

ここまでやると

ターミナル
$ php artisan migrate
 Migration table created successfully.

migrate できた。

別の対処法

.env ファイルをあまりにいじっている人は

ターミナル
$ php artisan config:cache

でキャッシュを削除すると直るケースもあります。

database.php を編集する方法

よくconfig > database.phpを編集してエラー対処する記事を見かけますが、あまり意味ないような気がします……。

database.php
'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),

上の第 2 引数(DB_*の後ろの文字列。例えば 3306 や forge など)を変更する方法ですね。env 関数(laravel のヘルパー関数)の第 2 引数はデフォルト値で、.env ファイル内で DBHOGE が設定されていないときのみ渡される値です。つまり、DBHOGE を.env ファイルで設定している場合においては database.php 並びに env 関数内がエラー原因足りうるケースは想定しづらいです。なので、他の部分にフォーカスした方がいい気がします。

ターミナルから DB 確認

ターミナルで新しいウィンドウを開き、

ターミナル
$ cd /Applications/MAMP/Library/bin/
$ ./mysql -u root -p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

実行。(パスワードはデフォルトだと root。)USE文で使用するデータベースを選択。今回で言えば laravel。

ターミナル
mysql> use laravel;

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

show tables;で作成したテーブルが見れる。

ターミナル
mysql> show tables;
+-------------------+
| Tables_in_laravel |
+-------------------+
| failed_jobs       |
| migrations        |
| password_resets   |
| users             |
+-------------------+
  • SNSでシェアしよう
  • Twitterでシェア
  • FaceBookでシェア
  • Lineでシェア
  • 記事タイトルとURLをコピー
トップへ戻るボタン

\ HOME /

トップへ戻る