ユーザー 'homestead' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)


165

Laravel 5.0を使用しているMac OS Yosemiteを使用しています。

私のローカル環境にいる間、私は実行しphp artisan migrate続けます:

ユーザー 'homestead' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)

構成

ここに私の.envがあります

APP_ENV=local
APP_DEBUG=true
APP_KEY=*****

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

app \ config \ database.php

   'mysql'       => [
    'driver'      => 'mysql',
    'host'        => env('DB_HOST', 'localhost'),
    'database'    => env('DB_DATABASE', 'homestead'),
    'username'    => env('DB_USERNAME', 'homestead'),
    'password'    => env('DB_PASSWORD', 'secret'),
    'unix_socket' => '/tmp/mysql.sock',
    'charset'     => 'utf8',
    'collation'   => 'utf8_unicode_ci',
    'prefix'      => '',
    'strict'      => false,
    ]

この種のエラーを回避するにはどうすればよいですか?

私はもう試した :


1

アプリ/ database.phpで

交換するlocalhost127.0.0.1

'host'=> env('DB_HOST', 'localhost') ->'host' => env('DB_HOST', '127.0.0.1')

また、.env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

環境を指定してみてください

php artisan migrate --env=local


MySQLが実行されているかどうかを確認します。

mysqladmin -u homestead -p status Enter password: secret

わかった

Uptime: 21281 Threads: 3 Questions: 274 Slow queries: 0 Opens: 327 Flush tables: 1 Open tables: 80 Queries per second avg: 0.012

つまり、実行中です。


4

MySQL UNIX Socketを確認します(この手順は私にとって有効です


1
ベストプラクティスは、アカウントが実際にmysqlに存在することを確認することです...「通りでこのキーを見つけました。フロントドアのロックでは機能しません。ロックを変更してキーを機能させるにはどうすればよいですか?」
Marc B

1
ホームステッドVMを使用していると思いますか?VM内でのみ機能することがわかりました。ssh vagrant@127.0.0.1 -p 2222でアクセスできます。私のデフォルトのマシンでは、dbが実行中であるとは言えません。
ジェイエドワーズ

回答:


254

ユーザー 'homestead' @ 'localhost' laravel 5エラーでアクセスが拒否された理由は、.env.phpファイルのキャッシュの問題です。Laravel5が.envファイルで環境ベースの構成を使用しているためです。

。エディターでアプリケーションのルートディレクトリに移動し、.envファイルを開きます(ubuntuでは非表示になっている可能性があるため、ctrl+ hを押して非表示のファイルを表示します。ターミナルにいる場合は、「:」ls -aと入力して非表示のファイルを表示します)。データベースの構成設定を変更します。次に.envファイルを保存します

DB_HOST=localhost
DB_DATABASE=laravelu
DB_USERNAME=root
DB_PASSWORD=''

。次に、Apacheサーバー/ Webサーバーを再起動します。そして、あなたのページを更新してください

。それでも問題が発生する場合は、以下のコマンドを実行して、古い構成キャッシュファイルをクリアしてください。

php artisan config:clear

これでエラーは完了です


1
私はおかげで、database.phpファイルで行うように.envファイルでdbの詳細を設定しなければならない理由の1つの質問
Dipen

1
多分私は複数の環境、生産、ローカルが必要です。
Abdou Tahiri、2016年

5
私が "php artisan serve"をずっと使用しているときにApacheを再起動しようとし続けたので、私と同じ過ちを犯さないことをお勧めします> <
Carlton

1
動作しません、そして今私はPDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._ を取得します。
ブラック

1
私は変更.envしてconfig:clear cache:clearすべてのコマンドを試しましたapacheが、再起動しましたが、それでも同じ問題が発生します。
Luzan Baral

67

TLDRは:あなたは、サーバーを停止する必要がCtrl+ cと使用して再起動しますphp artisan serve


詳細:

Laravelを使用していて、すでにローカル開発サーバーを起動している場合 php artisan serve

上記のサーバーを既に実行している後、データベースサーバーに関連するものを.envファイルで変更します。MySQLからSQLiteなどに移行するようなものです。上記のプロセス、つまりプロセスCtrcl Cを停止するものをすべて停止する必要があります。次に、Artisan Serveを再起動しphp artisan serveます。つまり、ブラウザーを更新すると、データベースに関連する問題が修正されます。これは、Laravel 5.3でうまく機能したものです


ああ、これはうまくいきました。しかし、環境が変更されたときにツールを停止するにはどうすればよいですか?これは良い経験です
セイバータバタバエヤズディ

31

それを解決する2つの方法

最初の方法(非推奨)

データベース構成ファイル(laravel_root / config / database.php)を開き、以下のコードブロックを検索します。

        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'blog'),
        'username'  => env('DB_USERNAME', 'root'),
        'password'  => env('DB_PASSWORD', ''),

以下のようにコードブロックを変更します。

        'host'      => 'yourHostName',
        'database'  => 'YourDatabastName',
        'username'  => 'YoutDatabaseUsername',
        'password'  => 'YourDatabasePassword',

2番目の方法(Laravelが推奨)

Laravelルートに.envというファイルが存在するかどうかを確認し、存在しない場合は.env.exampleを探し、.envとしてコピー/名前を変更してから、ファイルが壊れているように見えます!

APP_ENV=local
APP_DEBUG=true
APP_KEY=someRandomNumber

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

以下のブロックを次のように変更します

DB_HOST=yourHostName
DB_DATABASE=yourDatabaseName
DB_USERNAME=yourDatabaseUsername
DB_PASSWORD=youPassword

これで問題なく動作します。


1
このファイルの意味は何ですか?この情報はroot/config/database.php冗長であるようです。
ホルター2017

情報は冗長ではありません。サーバー情報を保護するためにenv関数を使用して.envファイルから値を読み取ります。
absiddiqueLive

ホームステッドを使用して、ホスト名、データベース名、ユーザー名、パスワードをどのように検索または作成しますか?
コナーリーチ

21

php artisan migratevagrant boxからではなくホストマシンから使用している場合は、.envは、ボックスのIPがあります192.168.10.10

そして明らかにあなたのIPからホームステッドユーザーに次のような許可を設定します

grant all privileges on *.* to 'homestead'@% identified by 'secret';

.env、ファイル

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead

うまくいきませんでしたが、うまくいきgrant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';ました。
ライアン、

21

PHPのデフォルトのWebサーバー(例php artisan serve:)を使用している場合は、.envファイルの値を変更した後でサーバーを再起動する必要があります。


11

Homesteadをインストールすると、VMにデフォルトの「homestead」データベースが作成されます。VMにSSH接続し、homestead sshそこから移行を実行する必要があります。VMなしでローカルで作業している場合は、データベースを手動で作成する必要があります。デフォルトでは、データベースはhomesteadと呼ばれ、ユーザー名はhomesteadで、パスワードは秘密です。

詳細については、ララキャストのこのスレッドまたはこのブログ投稿を確認してください


あなたが得ているなら

[PDOException] SQLSTATE[HY000] [2002] No such file or directory

/app/config/database.phpファイルの「ホスト」を「localhost」から「127.0.0.1」に変更してみてください。このスレッドで、詳細とその他の修正をここで見つけることができます

また、正しいを指定したかどうかも確認してくださいunix_socket。このスレッドを確認してください。


@ rangerover.jsは、/ app / config / database.phpファイルの「ホスト」を「localhost」から「127.0.0.1」に変更してみてください
Sojan V Jose

@ rangerover.jsはこのスレッドをチェックしますstackoverflow.com/questions/20723803/…。重要なソリューションのいずれかを参照してください。
Sojan V Jose

@ rangerover.jsは、mysqlサービスが実行されているかどうかもチェックします:)
Sojan V Jose

@ rangerover.jsはunix_socketをチェックできますか?stackoverflow.com/a/25649930/939299
Sojan V Jose、

1
ようやく4日目で動作しました。コメントをすべて削除し、このリンクstackoverflow.com/a/25649930/939299を回答の一部として含めてください。
cyber8200 2015

11

MySQL UNIXソケットを確認する

MySQLを使用してunix_socketの場所を見つける

mysql -u homestead -p

mysql> show variables like '%sock%';
+-----------------------------------------+-----------------------------+
| Variable_name                           | Value                       |
+-----------------------------------------+-----------------------------+
| performance_schema_max_socket_classes   | 10                          |
| performance_schema_max_socket_instances | 322                         |
| socket                                  | /var/run/mysqld/mysqld.sock |
+-----------------------------------------+-----------------------------+
3 rows in set (0.00 sec)

次に、config / database.phpに移動します

私はこの行を更新します: 'unix_socket' => '/tmp/mysql.sock',

へ: 'unix_socket' => '/var/run/mysqld/mysqld.sock',

それでおしまい。これは私の4回目の試みとして機能します。これらの手順が誰かの役に立てば幸いです。:D


うわー、それは私を救った:)
Petar Vasilev

11

私は同じ問題を抱えていて、結局サーバーを再起動して再起動する必要があることがわかりました

Ctrl+ cその後

php artisan serve

9

Windows PCの場合以下に従ってください。


  1. アプリケーションのルートフォルダーにアクセスします。

  2. .envファイルを編集する

アプリケーションのルートフォルダにアクセスする

.envファイルを編集する

ハイライトを編集して、ユーザー名とパスワードを変更し、それに応じてデータベース名を変更します。


9

私の場合、サーバーを再起動した後、問題はなくなりました。

「php artisan serve」コマンドを終了/閉じる

"php artisan serve"コマンドを再実行します。


8

いつか将来。最初に設定をクリアしてみてください

php artisan config:clear. 

すべてのターミナル/ cmdウィンドウを閉じてから、ターミナル/ CMDを再起動すると、エラーメッセージが表示されなくなります。機能するかどうかを確認します。


おかげでたくさんこれは私のために働いています。このエラーが発生した理由がわかりません。私はすべてを閉じてリロードしてphp artisan config:clearを実行します
saber tabatabaee yazdi

6

config dbを再起動した後:

 php artisan serve

db configを設定する前にサーブがアクティブである場合。


5

私はlaravel 5. *を使用しています。.envプロジェクトのルートに次のようなファイル呼び出しがあると思います。

APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

そして、それはbd構成の上書きでしたので、それらの構成変数を削除して、laravelが/ configの下の構成を取るか、ここで構成をセットアップできます。

私は2番目を行いました、そしてそれは私のために働きます:)


5

とった!rootとしてログインし、homestead @ localhostにすべての権限を付与します。

端末から:

$ homestead ssh

$ mysql -u root -p

Enter password: secret

mysql> grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';

Query OK, 0 rows affected (0.00 sec)
exit

これで、Homesteadsの通常のユーザーがすべてのテーブルにアクセスできるようになり、移行などを実行できるようになります。


5

新しい設定で.envを変更した後、サーバーを停止して再度実行する必要があります(php artisan serve)。原因laravelは、サーバーを初期化するときに環境を取得します。再起動しない場合は、.envを変更して、なぜ変更が行われないのかを自問します。


5

.envファイルを変更するだけです。

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

DB_DATABASEの前には、データベースの名前とDB_USERNAME、使用の前に記述したルートを


4

この問題が今日約3時間私を苛立たせたので、私はこれを投稿したかっただけです。他の回答にリストされている方法はどれも試していませんが、すべて妥当なようです。実際、私は上記の提案された解決策のそれぞれを試してみるところですが、どういうわけか私はこのインスピレーションのストロークを得ました。ここに私が私を働かせるために働いたものがあります-YMMV:

1).envファイルを見つけます。2).envファイルの名前を別の名前に変更します。Laravel 5は、このファイルをフレームワーク内の別の場所の設定のオーバーライドとして使用する必要があります。私の名前を.env.oldに変更しました3)Webサーバーを再起動する必要があるかもしれませんが、そうする必要はありませんでした。

幸運を!


3

$ php artisan migrateMacではなくHomestead内からコマンドを実行する必要があります。


スクリーンショットには、マシン名がと表示されていMBP-bheng-aveniorsます。それはあなたのVMではありません。ホームステッドにSSHで接続し($ homestead ssh)、$ php artisan migrateそのSSHセッション内から実行する必要があります。
Martin Bean、

3

ルートフォルダーの「.env」ファイルを確認します。それが正しいか?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

3

私は解決策を見つけました

  1. エディターでアプリケーションのルートディレクトリに移動し、.envファイルを開きます(ubuntuでは非表示になっている可能性があるため、ctrl + hを押して非表示のファイルを表示します)。データベース構成設定を変更します。次に.envファイルを保存します

  2. 次に、Apacheサーバー/ Webサーバーを再起動します。そして、あなたのページを更新してください

  3. それでも問題が発生する場合は、以下のコマンドを実行して、古い構成キャッシュファイルをクリアしてください。

これは私のためにうまくいきました...


3

ルートフォルダの.envファイルでこれらを変更するだけです。

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

それは私のために働いた。


3

私の場合(laravel 5+)、パスワードを一重引用符で囲み、構成キャッシュをクリアする必要がありました。

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=user_name
DB_PASSWORD='password'

次に実行します:

php artisan config:clear

1

MYSQLにログイン-mysqlデータベースを使用します。

ユーザーから*を選択します。

HOST列が正しいことを確認してください。接続元のホスト(アプリケーションサーバー)は、IPアドレスまたはDNS名である必要があります。また、「%」は機能します(ワイルドカードを意味します)が、安全ではありません。



1

A.データベース設定で.envファイルを更新した後、「php artisan config:clearを実行して」幼虫設定をクリアします。

B.設定を有効にするには、Apacheサーバーを再起動するか、「php artisan serve」コマンドを再実行してください。


0

SQLiteを使用して同じ問題が発生しました。私の問題は、DB_DATABASEが間違ったファイルの場所を指していることでした。

touchコマンドでsqliteファイルを作成し、php artisan tinkerを使用してファイルパスを出力します。

$ touch database/database.sqlite
$ php artisan tinker
Psy Shell v0.8.0 (PHP 5.6.27  cli) by Justin Hileman
>>> database_path(‘database.sqlite’)
=> "/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite"

次に、その正確なパスをDB_DATABASE変数に出力します。

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite
DB_USERNAME=homestead
DB_PASSWORD=secret

正しいパスがないと、アクセス拒否エラーが発生します


0

次のようなエラーが返さPDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'れる場合は、batabase構成をに変更していることが原因ですDB_DATABASE=laravelu。だから今のところあなたはどちらか:

  1. またはを変更するDB_DATABASE=[yourdatabase]
  2. laraveluphpmyadminで呼び出されるデータベースを作成します

これで解決できるはずです


0

私の場合、エラーはHomestead / Vagrantの設定が原因であると私が忘れていました:)コマンドラインからのみ移行を実行しようとしました。

Homestead Vagrant Box環境を使用している場合、Homesteadマシン内から(ssh:を使用してそれに接続した後vagrant@192.168.10.10:22)移行を実行する必要があります。そうすると、アクセス権がOKになり、移行を実行できるようになります。


0

あなたの質問から、あなたは家屋を経営しているようです。その場合は、VMでコマンドを実行していることを確認してください。私を含む多くの開発者は、ホームステッドが使用するデータベースとは異なるlocalhostを介してアクセスできるローカルデータベースに接続しようとする、VMの外で誤解して職人コマンドを実行することがよくあります。HomesteadディレクトリにCdして実行します

vagrant ssh

次に、コードをcdして、プロジェクトを保持し、プロジェクトにcdして実行しますphp artisan migrate again 。これが他の人々の役に立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.