php artisan migrateが上手く行かなかった時の対処法/SQLSTATE[HY000] [1045]

はじめに

laravelのDB接続の際に、よく転ぶので、備忘録としてまとめました。

エラーコード

  Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = laravel_chat and table_name = migrations and table_type = 'BASE TABLE')

  at /Users/username/Desktop/laravel_chat/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] [1045] Access denied for user 'root'@'localhost' (using password: YES)")
      /Users/username/Desktop/laravel_chat/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

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

  Please use the argument -v to see more details.


重要そうなのはここの部分ですね。

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = laravel_chat and table_name = migrations and table_type = 'BASE TABLE')

原因

直接和訳すると 「root@localhostのアクセスが拒否された」的な感じ。

エラーログでググってみると、qiitaやzenn、stackoverflowの記事が多数見つかるので、メジャーなエラーっぽい気がする。

それぞれの記事を読んで、色々と試します。

試した事① database.phpと.envファイルの見直し

ググって出てきた記事はほとんどこれで解決できてるっぽい。

'mysql' = [
            'driver' = 'mysql',
            'url' = env('DATABASE_URL'),
            'host' = env('DB_HOST', '127.0.0.1'),
            'port' = env('DB_PORT', '3306'),
            'database' = env('DB_DATABASE', 'XXX'),
            'username' = env('DB_USERNAME', 'XXX'),
            'password' = env('DB_PASSWORD', 'XXX'),

こちらのdatabaseとusername、passwordの部分を見直しました!

さらに追加で

 DB_CONNECTION=mysql
 DB_HOST=127.0.0.1
 DB_PORT=3306
 DB_DATABASE=xxx
 DB_USERNAME=xxx
 DB_PASSWORD=xxx

こちらでもdatabase、username、passwordを見直しました

Qiita

本日php artisan migrateでエラーが発生$ php artisan migrate:refresh Il…

がしかし結果変わらず…

こうなるとdatabaseやusername、passwordそのものが間違っているという説が濃厚になります!

その為、mysqlにログインして1つ1つ確かめて行きました。

試した事② mysqlにログインしてユーザー名やパスワードを思い出す!

mysqlログインする

mysql -u root(ユーザー名) -p;

パスワードを求められたが、さっきのファイルに書いたパスワードだとエラーになる!!

→パスワードが間違っていたことが発覚!!

何回か試した事で無事思い出せました。

案外、ユーザー名とパスワードをちゃんと覚えていない!っていうのもphp artisan migrateのエラー時の原因のあるあるなんじゃないかなーと思います。

試した事③ databaseの作成

show databases;

でDBの一覧を確認したところ、laravelの.envなどのファイルで作ったはずのファイルが反映されていませんでした。

だから上手く接続出来ていなかったらしい。

取り敢えず

CREATE DATASBASE `データベース名`;

で、使いたいDBをmysqlから作っちゃいました!

これで一安心。

php artisan migrate成功!!

mysql内のdatabse、username、passwordとconfig.php、.envファイル内の値が一致して無事、php artisan migrateが成功しました。

結論

php artisan migrateで上手く接続できない時は

1 database.phpか.envの書き間違い

2 mysqlの設定値自体が間違っている

が原因です。

巷の記事では1についての言及が多いので、上手く行かない人は2のmysqlの設定値自体が間違っている事を疑って見てください。

Laravelの案件に初めて入った時、この書籍にお世話になったので、Laravel学習をしたい人はぜひ!!

最近は実務よりの実践編も出ているらしいですね。

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
  • Attributes
  • Custom attributes
  • Custom fields
Click outside to hide the compare bar
Compare
Compare ×
Let's Compare! Continue shopping