はじめに
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の設定値自体が間違っている事を疑って見てください。