てりーのtechブログ

エンジニア向けにITや技術系の発信と哲学を書いてます

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.

原因

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

エラーログでググってみるとどうもmysqlにうまく接続が上手くいっていないらしい。

試した事① 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を見直しました 参考:https://qiita.com/mikaku/items/8e081e08090e814a57db

がしかし結果変わらず。

こうなると 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の設定値自体が間違っている事を疑って見てください。