사용자 '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 소켓 확인 ( 이 단계는 저에게 효과적입니다 )


1
가장 좋은 방법은 계정이 mysql에 실제로 존재하는지 확인하는 것입니다 ... "거리에서이 키를 찾았는데 앞문 잠금에서 작동하지 않습니다. 키를 작동 시키려면 잠금을 어떻게 변경할 수 있습니까?"
Marc B

1
홈스테드 VM을 사용한다고 생각하십니까? VM에있을 때만 작동한다는 것을 알았습니다. ssh vagrant@127.0.0.1 -p 2222를 통해 얻을 수 있습니다. 내 기본 머신은 db가 실행 중이라고 말하지 않습니다.
Jay Edwards

답변:


254

사용자 'homestead'@ 'localhost'laravel 5 오류로 인해 액세스가 거부 된 이유는 .env.php 파일의 캐싱 문제 로 인해 Laravel 5가 .env 파일에서 환경 기반 구성을 사용하고 있기 때문입니다.

1 . 편집기에서 응용 프로그램 루트 디렉토리로 이동하여 .env 파일 (우분투에서는 숨겨져있을 수 있으므로 숨겨진 파일을 표시하려면 ctrl+ h를 누르고 터미널에있는 경우 : ls -a숨겨진 파일을 표시하려면 : 을 입력하십시오) 을 열고 데이터베이스 구성 설정을 변경하십시오. 그런 다음 .env 파일을 저장하십시오.

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

2 . 그런 다음 아파치 서버 / 웹 서버를 다시 시작하십시오. 페이지를 새로 고침하면

3 . 여전히 문제가 발생하면 아래 명령을 실행하여 이전 구성 캐시 파일을 지우십시오.

php artisan config:clear

이제 오류가 끝났습니다.


1
database.php 파일에서 수행 한 것처럼 .env 파일에 db 세부 정보를 설정해야하는 한 가지 질문에 대해 감사를 표했습니다.
Dipen

1
어쩌면 나는 당신이 여러 환경, 생산 및 로컬이 필요합니다.
Abdou Tahiri

5
내가 항상 "php artisan serve"를 사용하고있을 때 Apache를 다시 시작하려고했지만, 나와 같은 실수를하지 말 것을 제안한다> <
Carlton

1
작동하지 않아 이제 PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.을 얻습니다 .
Black

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를 다시 시작하십시오. 즉, y를 다시 php artisan serve브라우저를 새로 고치면 데이터베이스 관련 문제가 해결됩니다. 이것이 Laravel 5.3에서 저에게 효과적이었습니다.


오 마이 갓 이것은 나를 위해 고마워했다. 그러나 환경이 바뀌면 어떻게 도구를 사용할 수 있습니까? 이 좋은 경험이다
세이버 tabatabaee 야 즈디

31

그것을 해결하는 두 가지 방법

첫 번째 방법 (권장하지 않음)

데이터베이스 구성 파일 (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',

두 번째 방법 (Laravel 권장)

파일 호출이 .env 인 Laravel 루트를 확인하십시오. 존재하지 않는 경우 .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중복 된 것으로 보입니다.
홀터

정보 용량은 중복되지 않으며 env 기능을 사용하여 .env 파일에서 값을 읽어 서버 정보를 보호합니다.
absiddiqueLive

Homestead에서 호스트 이름, 데이터베이스 이름, 사용자 이름 및 비밀번호를 어떻게 찾거나 생성합니까?
코너 거머리

21

당신이 사용하는 경우 php artisan migrate방랑 상자에서하지만 호스트 컴퓨터에서 NOT 다음은 내부에 정의해야합니다 .env상자의 IP192.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';나를 위해 일했다.
Ryan

21

PHP의 기본 웹 서버 (예 php artisan serve:)를 사용하는 경우 .env 파일 값을 변경 한 후 서버를 다시 시작해야합니다.


11

Homestead를 설치하면 VM에 기본 "homestead"데이터베이스가 작성됩니다. VM에 SSH로 연결 한 후 homestead ssh마이그레이션을 실행해야합니다. VM없이 로컬에서 작업하는 경우 데이터베이스를 수동으로 만들어야합니다. 기본적으로 데이터베이스는 homestead라고하고 사용자 이름은 homestead이고 암호는 비밀입니다.

자세한 내용 은 laracasts 또는이 블로그 게시물 에서이 스레드를 확인 하십시오.


당신이 받고 있다면

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

/app/config/database.php 파일의 "host"를 "localhost"에서 "127.0.0.1"로 변경하십시오. 이 스레드 에서 자세한 내용 및 기타 수정 사항을 찾을 수 있습니다 .

또한 올바른 지정 여부를 확인하십시오 unix_socket. 이 스레드를 확인하십시오 .


@ rangerover.js는 /app/config/database.php 파일의 "host"를 "localhost"에서 "127.0.0.1"로
변경해보십시오

@ 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

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 번째 시도로서 저에게 효과적입니다.이 단계들이 누군가를 돕기를 바랍니다. :디


와우, 저를 구
Petar Vasilev

11

나는 같은 문제가 있었고 결국 서버를 다시 시작하고 다시 시작해야한다는 것이 밝혀졌습니다.

Ctrl+ c그때

php artisan serve

9

Windows PC에서 아래를 따르십시오.


  1. 응용 프로그램의 루트 폴더에 액세스하십시오.

  2. .env 파일 편집

응용 프로그램의 루트 폴더에 액세스

.env 파일 편집

강조 표시를 편집하고 사용자 이름 및 비밀번호를 변경하십시오. adn 데이터베이스 이름.


9

제 경우에는 서버를 다시 시작한 후에 문제가 사라졌습니다.

출구 / 가까이 "PHP 장인 봉사"명령

"php artisan serve"명령을 다시 실행하십시오 .


8

언젠가는 먼저 구성을 지우십시오.

php artisan config:clear. 

모든 터미널 / cmd 창을 닫은 다음 터미널 / CMD를 다시 시작하면 오류 메시지가 사라집니다. 작동하는지 확인하십시오.


고마워 이것은 나를 위해 일했다. 이 오류가 발생한 이유를 모르겠습니다. 난 그냥 모두 닫고 다시로드하고 PHP 장인 구성을 실행 : 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에서 구성을 취하거나 여기에서 구성을 설정하십시오.

나는 두 번째를했고 그것은 나를 위해 일한다 :)


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

이제 일반 사용자는 모든 테이블에 액세스 할 수 있으므로 마이그레이션과 같은 작업을 수행 할 수 있어야합니다.


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 앞에 root를 사용하십시오 .


4

이 문제가 오늘 약 3 시간 동안 좌절했기 때문에이 게시물을 게시하고 싶었습니다. 다른 답변에 나열된 방법 중 하나를 시도하지는 않았지만 모두 합리적으로 보입니다. 실제로 위의 제안 된 각 솔루션을 살펴 보려고했지만 어떻게 든 영감을 얻었습니다. YMMV를 다시 일하게 된 이유는 다음과 같습니다.

1) .env 파일을 찾으십시오. 2) .env 파일 이름을 다른 것으로 바꾸십시오. Laravel 5는이 파일을 프레임 워크의 다른 곳에서 설정에 대한 재정의로 사용해야합니다. 내 이름을 .env.old로 바꿨습니다. 3) 웹 서버를 다시 시작해야 할 수도 있지만 반드시 그럴 필요는 없습니다.

행운을 빕니다!


3

$ php artisan migrateMac이 아닌 Homestead 내 에서 명령 을 실행해야합니다 .


스크린 샷에는 시스템 이름이로 표시됩니다 MBP-bheng-aveniors. 그것은 당신의 VM 이 아닙니다 . Homestead ( $ homestead ssh) 에 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 파일을 엽니 다 (우분투에서는 숨겨져있을 수 있으므로 ctrl + h를 눌러 숨겨진 파일을 표시하십시오). 데이터베이스 구성 설정을 변경하십시오. 그런 다음 .env 파일을 저장하십시오.

  2. 그런 다음 아파치 서버 / 웹 서버를 다시 시작하십시오. 페이지를 새로 고침하면

  3. 여전히 문제가 발생하면 아래 명령을 실행하여 이전 구성 캐시 파일을 지우십시오.

이것은 나를 위해 gl 작동 ...


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 데이터베이스를 사용하십시오.

* from User를 선택하십시오.

HOST 열이 올바른지 확인하십시오. IP 주소 또는 DNS 이름 인 연결하려는 호스트 (응용 프로그램 서버) 여야합니다. 또한 '%'는 작동하지만 (와일드 카드를 의미) 안전하지는 않습니다.



1

A. 데이터베이스 설정으로 .env 파일을 업데이트 한 후 "php artisan config : clear"를 실행하여 애벌레 설정을 지우십시오.

B. 설정을 적용하려면 아파치 서버를 다시 시작하고 "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 환경을 사용하는 경우 ssh :를 사용하여 연결 한 후 Homestead 머신 내에서 마이그레이션을 실행해야합니다. vagrant@192.168.10.10:22그러면 액세스 권한이 정상이며 마이그레이션을 실행할 수 있습니다.


0

귀하의 질문에 따르면, 당신은 농가를 달리고있는 것 같습니다. 이 경우 VM에서 명령을 실행하고 있는지 확인하십시오. 저를 포함한 많은 개발자들은 종종 실수를하고 VM 외부에서 장인 명령을 실행합니다.이 명령은 농가에서 사용하는 데이터베이스와 다른 localhost를 통해 로컬 데이터베이스에 액세스하려고 시도합니다. CD를 홈스테드 디렉토리로 이동하여 실행

vagrant ssh

그런 다음 프로젝트를 유지하고 프로젝트를 실행하고 실행하는 위치에 코드를 넣으면 php artisan migrate again 다른 사람들에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.