WordPressテーマ『十二単』リリース 🎉

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

🙀 エラーメッセージ

$ 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への設定が足りなかった。

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

🐶 細かい説明

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

== 省略 ==

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

== 省略 ==

で、このDB_HOSTやらDB_USERNAMEを確認するためにMAMP(http://localhost:8888/MAMP/?language=English)にアクセスするとこんな記述がある。

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

== 省略 ==

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(http://localhost:8888/phpMyAdmin/index.php)から確認してみるといい。

ここまでやると

$ php artisan migrate
 Migration table created successfully.

migrateできた。

🍭 別の対処法

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

$ php artisan config:cache

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

🎁 database.phpを編集する方法

よくconfig > 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ファイル内でDB_HOGEが設定されていないときのみ渡される値です。つまり、DB_HOGEを.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             |
+-------------------+

CTAエリアイメージ

WordPressテーマ『十二単』

無料のWordPressテーマです。絶賛開発中。
詳しくみる

✒️ Writer ✒️

たかさき

しがないたかさきです。HTML/CSS/JS/PHP/Ruby/SQLちょっと書けます、Photoshopちょっと使えます。Vue勉強中、埼玉とか都内の勉強会良いのあれば教えてください〜。メディア売買経験あります、ミドルレベルでの検索結果1位何回か取ったことあります。詳しくはこちら

Follow Me:)

COMMENT

コメントする

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。


内容をご確認の上、送信してください。