SQLSTATE[HY000] [1045] Access denied for user
エラー発生時
マイグレーションをしようと
php artisan migrate
とコマンドを打ったとき。
原因
.envファイルに記載されているデータベース名やユーザー名、パスワードが間違っている。
が、根本的な原因なんですが、対処法はいくつか考えられます。
なぜかと言うと、他の要因が邪魔していて上記原因につながっている場合もあるからです。
エラー内容はMySQL(データベース)のエラーです。
解決法
いくつか考えられます。
上から順に対応していきましょう。
.envファイルを確認&修正する
根本的な原因である「.envファイルに記載されているユーザー名、もしくは、パスワードが間違っている」ことに直接対処する解決法です。
今回のエラー出る場合は、これで解決できることも多いです。
DB_CONNECTION=mysql
DB_HOST=ホスト名
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=データベースのユーザー名
DB_PASSWORD=データベースのパスワード
作成したデータベースの情報と照らし合わせて、誤りがないか確認してください。
パスワードを変更する or ダブルクォーテーションで囲む
これが有用なのは、パスワードに“#”が含まれている場合です。
#は値として認識されないので、パスワードを変更するか、ダブルクオーテーションで囲みましょう。
DB_PASSWORD="データベースのパスワード"
キャッシュを削除する
プロジェクトのルートディレクトリで、
php artisan config:cache
とコマンドを打つと、キャッシュが削除されて上手くいくことがあります。
bootstrap/cache/config.phpというファイルが生成されます。不要なので削除しましょう。
bootstrap/cache/config.phpを削除してから、.envファイルを確認&修正する
上記のキャッシュを削除する方法では、キャッシュが削除されるとともに、bootstrap/cache/config.phpというファイルが出来ます。
php artisan migrate
とコマンドを打ったときに、.envファイルよりこのconfig.phpが優先されてしまいます。
もし、キャッシュを削除する方法を試した後、.envの間違いに気づいて修正してもエラーが解消されることはありません。
このエラー文の検索上位に、キャッシュを削除することだけを推奨している記事(具体的な名前は出しませんが)があります。
その記事を見てキャッシュ削除を試してみた後は、何をやってもエラーが解決されることはないのが恐ろしいところですね。
bootstrap/cache/config.phpを削除すると、.envファイルの変更内容が反映されるようになるので、再度内容が間違っていないか確認&修正をしましょう。
以上、『SQLSTATE[HY000] [1045] Access denied for user の解決法』でした。