質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.52%

Laravel6.7 でテーブルを作成しようとしていますが、エラーで作成されません

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 509

hidepon

score 184

PHP のフレームワークのLaravel でデータベースのテーブルを作成しようとしていますが

なぜか、実行するとエラーになります。
MySQLのバージョンは8.017です
データベースは作成済です。

  Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user 'database_user'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = Database_Name and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll format the error
    666|         // message to include the bindings with SQL, which will make this exception a
    667|         // lot more helpful to the developer instead of just the database's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e
    671|             );
    672|         }
    673|

  Exception trace:

  1   PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'database_user'@'localhost' (using password: NO)")
      /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=Database_Name", "database_user", "", [])
      /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.


となります。
該当するデータベースは作成されており、
コマンドラインからユーザー名、パスワードでログインでき、データベースにもアクセスできています。
.envのファイルにもユーザー名、パスワードを書き込んでいます。
対処方法が分からず困っています。よろしくお願いいたします。

(修正・追記)
すでに修正していますが、
Laravelのバージョン 6.7
MySQL   8.0.17
CentOS 8
です。

コマンドラインからユーザー名、パスワードでログインでき、データベースにもアクセスできています。
.envのファイルにもユーザー名、パスワードを書き込んでいますが、
パスワードが無い状態で認識されています。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE= DB_Name
DB_USERNAME=db_user
DB_PASSWORD=db_pass

(DB_DATABASE,DB_USERNAME,DB_PASSWORDはダミー)

config/database.phpを

'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'DB_Name'),
'username' => env('DB_USERNAME', 'db_user'),
'password' => env('DB_PASSWORD', 'db_pass'),
(以下省略)

と編集
コマンドラインで
php artisan config:clear
を実行しました。
php artisan migrate
をしたところ
エラーになります。

(追記)
パスワードの先頭に "#" を含んでいたためコメントと認識されていたようでした。
パスワードの記号部分を変更して
コマンドラインで
php artisan config:clear
を実行しました。
php artisan migrate
したところ、
エラーメッセージが変わりました。

SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = DB_Name and table_name = migrations and table_type = 'BASE TABLE')

PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'localhost' (using password: YES)")
      /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=DB_Name", "user_name", "password", [])
      /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70


となっています。
database/migration.php
にあるファイルのテーブルを作成しようとしているのですが、
エラーになってテーブル作成が出来ません。

(修正)
記述ミスがありました。
database/migrations  ディレクトリにある
日付_create_(テーブル名).php
というファイルのテーブルを作成しようと
php artisan migrate
を実行しましたが、
上記のようなエラーが出ます。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hidepon

    2019/12/23 20:17

    Configuration cache cleared!
    というメッセージが表示されます。
    .envファイルの内容が反映されるはずですよね。。。。
    認識が違ってるでしょうか??

    キャンセル

  • hidepon

    2019/12/23 20:22

    mysql のuser の作りが悪いのかもしれませんね。。。ちょっと考えてみます。

    キャンセル

  • Kosuke_Shibuya

    2019/12/23 20:25

    表面的なことしか理解していないようなので解説(回答)します。

    キャンセル

回答 3

checkベストアンサー

0

$ mysql -h 127.0.0.1 -u db_user -D DB_Name -P 3306 -pdb_pass

まず db_user@127.0.0.1 ユーザーでMySQLに接続できていますか?

$ php artisan tinker

config('database.default');
config('database.connections.mysql.host');
config('database.connections.mysql.port');
config('database.connections.mysql.database');
config('database.connections.mysql.username');
config('database.connections.mysql.password');

.env に設定されたデータベース設定は反映されてますか?
tinkerコマンドでデータベース設定値を確認してください。

$ echo $DB_CONNECTION
$ echo $DB_HOST
$ echo $DB_PORT
$ echo $DB_DATABASE
$ echo $DB_USERNAME
$ echo $DB_PASSWORD

サーバー環境変数が設定されている場合、.env よりサーバー環境変数が優先されます。
あまりない気がしますが念のためご確認ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/25 15:25

    わけわからなくなったので、再度一般ユーザのパスワードを更新しました。
    そのあとで
    php artisan config:clear
    を実行しました。
    php artisan migrate
    を実行するとテーブルが生成されました。
    有難うございました。
    もしかしたら、.envのファイルを保存していなかったか?clearしていなかったかのどちらかもしれません。
    本当に有難うございました。

    キャンセル

  • 2019/12/25 15:30

    tinker で確認した config('database.connections.mysql.password'); の値が正しかったのであれば
    .envを保存していなかったやconfig:clearしてなかったかの問題はなさそうです。

    複数のことを一度にやってしまうと原因の特定が難しくなるので、
    変更したら横着せずに1つ1つ検証するようにしてください。

    ひとまずはマイグレーションできるようになってよかったです!
    おめでとうございます!

    キャンセル

  • 2019/12/25 15:42

    素晴らしいアドバイスを頂き有難うございました。
    バージョンが変わるとこんなに変わるのか?と思っていたら、パスワードのコメント化という、つまらない部分で、のたうち回っていました。
    お恥ずかしいです。
    本当に有難うございました。

    キャンセル

0

SQLSTATE[HY000] [1045] Access denied for user 'database_user'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = Database_Name and table_name = migrations and table_type = 'BASE TABLE')

このエラーメッセージから何がわかるのか?

ユーザー名: database_user
ホスト名: localhost
データベース名: Database_Name
パスワード: 未設定

こういう条件で接続しようとしてエラーになったということです。

では、.env の設定はどうなっているのか?

上記の設定どおりならば、

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=Database_Name
DB_USERNAME=database_user
DB_PASSWORD=

こうなっているはず。

こうなっていないのであれば、.env の変更が反映されていないということを疑う。

.env の設定値は、bootstrap/cache/config.php というキャッシュファイルに反映され、config/database.php から読まれる。

なので、.env を編集した後では、必ず、php artisan config:clear を実行しなくてはならない。
ただし、bootstrap に書き込み権限がなければ、作成も削除もできないので、適切に書き込み権限が与えられていることが必要。
この辺りはマニュアルにもしっかり書かれているが、初心者は読み飛ばしているケースが多い。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/24 22:51

    隠すことなく出してもらうといっているにもかかわらず、ダミーで出すなら意味がありません。
    お手伝いはここで修了します。

    キャンセル

  • 2019/12/24 23:01

    実際に上記のDB名、ユーザー名、パスワードにしても同じ結果になるのですが。。。特段おかしい文字種を使っているという訳ではありません。
    ご厚意に感謝いたします。
    有難うございます。

    キャンセル

  • 2019/12/25 13:20

    > ただ、パスワードの先頭に # が入っているのが問題なのではないかと思えてきました

    やっと出たか。

    > 特段おかしい文字種を使っているという訳

    思い込みがあると回答者を困らせるだけ。だから隠さず出せと言ったのに。

    DB_PASSWORD="#password" のように、ダブルコーテーションで囲むこと

    キャンセル

0

ログイン情報が間違っている場合と、権限周りの切り分けの確認方法?をみつけたので書いておきます

DB::select('SHOW DATABASES');

を実行した時(tinker or適当なroute/controllerで試してください)

Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [1044] Access denied for user 'dev'@'%' to database 'aaa' (SQL: SHOW DATABASES)'

の時、データベースへのアクセス権がない可能性が高い(今回は存在しないデータベース名aaaを使用)

Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [1045] Access denied for user 'dev'@'192.168.48.7' (using password: YES) (SQL: SHOW DATABASES)'

の時、パスワードが間違っている(適当なパスワードにしました)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/24 12:28

    どうも.envの中身のパスワードが認識できていないように思います。
    ユーザー名が表示されて、パスワードの部分が空欄のような認識のようで・・・
    権限も設定しているのですが、なぜかうまくいきません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る