はじめに
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を見直しました
がしかし結果変わらず…
こうなると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学習をしたい人はぜひ!!
最近は実務よりの実践編も出ているらしいですね。