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

LaravelのDB接続の際に出る「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:  1PDOException::("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  2PDO::__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の設定値自体が間違っている事を疑って見てください。

もし現状の仕事に不満があるなら

転職ドラフトに登録して見てはいかがでしょうか?

実際に企業からのオファーを受ける事で、企業から見た自分の強みや市場価値などポジティブな発見がたくさんあります!!

関連記事

「転職ドラフトはハイスペックなエンジニア向けだけ?」と思っていませんか?実は、技術力に自信がない、あるいは業界経験が浅いエンジニアこそ、転職ドラフトを使うべきなんです。そういったエンジニアの多くは転職ドラフトに登録する際、レジュ[…]