Acesso negado para o usuário 'homestead' @ 'localhost' (usando a senha: YES)

165

Estou em um Mac OS Yosemite usando o Laravel 5.0.

Enquanto estiver no ambiente local , corro php artisan migrate, continuo recebendo:

Acesso negado para o usuário 'homestead' @ 'localhost' (usando a senha: YES)

Configuração

Aqui está o meu .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,
    ]

Como evito esse tipo de erro?

Eu tentei :


1

em app / database.php

Substitua localhostpor127.0.0.1

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

Além disso, em .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Tente especificar ambiente

php artisan migrate --env=local


3

Verifique se o MySQL está rodando por execução

mysqladmin -u homestead -p status Enter password: secret

Eu tenho

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

O que significa que está funcionando.


4

Verifique o soquete do MySQL UNIX ( esta etapa funciona para mim )

cyber8200
fonte
1
a melhor prática seria garantir que a conta realmente exista no mysql ... "Encontrei essa chave na rua e ela não funciona na fechadura da porta da frente. Como posso alterar a fechadura para que a chave funcione?"
Marc B
1
Presumo que você esteja usando a VM do homestead? Descobri que ele só funcionará quando você estiver na VM. você pode acessá-lo via ssh [email protected] -p 2222. minha máquina padrão não mostra que o db está em execução.
Jay Edwards

Respostas:

254

O motivo do Acesso negado para o erro 'larest' do usuário @ laravel 5 'localhost' é o problema de armazenamento em cache do arquivo .env.php porque o Laravel 5 está usando uma configuração baseada em ambiente no seu arquivo .env.

1 . Vá para o diretório raiz do aplicativo e abra o arquivo .env (no ubuntu pode estar oculto, pressione ctrl+ hpara mostrar os arquivos ocultos e, se você estiver no terminal, digite: ls -apara mostrar os arquivos ocultos) no seu editor e altere a configuração do banco de dados. salve o arquivo .env

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

2 . em seguida, reinicie o servidor apache / servidor web. e atualize sua página e você fez

3 . Se o problema persistir, tente executar o comando abaixo para limpar o antigo arquivo de cache de configuração.

php artisan config:clear

Agora você terminou o erro

Abdou Tahiri
fonte
1
Eu trabalhei para me agradece, uma pergunta por que temos de definir os nossos detalhes db em .env arquivo como o fazemos em database.php arquivo
Dipen
1
Talvez eu precise de vários ambientes ,, produção e local.
Abdou Tahiri 17/01
5
Continuei tentando reiniciar o Apache quando eu estava usando "php artisan serve" o tempo todo, sugiro que você não cometa o mesmo erro que eu> <
Carlton
1
Não funciona, e agora eu recebo PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Black
1
Eu tentei mudar .enve config:clear cache:cleartodos os comandos, reiniciei, apachemas ainda estava recebendo o mesmo problema.
Luzan Baral
67

TLDR: você precisa parar o servidor Ctrl+ ce iniciar novamente usandophp artisan serve


Detalhes:

Se você estiver usando o Laravel e já tiver iniciado o servidor dev local, php artisan serve

E depois de já ter o servidor acima em execução, você altera as coisas relacionadas ao servidor de banco de dados no arquivo .env. Como mudar do MySQL para SQLite ou algo assim. Você precisa ter certeza de que para acima do processo, Ctrcl Cou qualquer coisa que o interrompa. E, em seguida, reinicie o Artisan Serve novamente ou seja, php artisan serveatualize o navegador e o problema relacionado ao banco de dados será corrigido. Isto é o que funcionou para mim no Laravel 5.3

Mohsin
fonte
oh meu deus isso funcionou para mim obrigado. mas como posso parar quando o ambiente mudou existe alguma ferramenta? esta é uma boa experiência
sabre tabatabaee Yazdi
31

Duas maneiras de resolvê-lo

Primeira via (Não recomendado)

Abra o arquivo de configuração do banco de dados (laravel_root / config / database.php) e procure o bloco de código abaixo.

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

Mude o bloco de código como abaixo

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

Segunda via (Recomendado pela Laravel)

Verifique sua raiz do Laravel, se houver uma chamada de arquivo .env, se não existir, procure por .env.example, copie / renomeie-a como .env depois que o arquivo parecer danificado!

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

Modifique o bloco abaixo como a seguir

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

Agora vai funcionar bem.

absiddiqueLive
fonte
1
Qual é o objetivo deste arquivo? Esta informação está em root/config/database.phpparece redundante.
Halter
A dose de informação não é redundante, está usando a função env para ler o valor do arquivo .env para proteger as informações do servidor.
absiddiqueLive
Como você encontra ou cria seu nome de host, nome do banco de dados, nome de usuário e senha com o Homestead?
Connor Leech
21

se você estiver usando php artisan migrateNOT da caixa vagrant, mas da máquina host, deverá definir dentro .envdo ip da caixa192.168.10.10

e, obviamente, definir permissão para homestead usuário do seu ip algo como

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

no .envarquivo

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead
wdog
fonte
Não consegui fazer isso funcionar, mas grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';funcionou para mim.
22918 Ryan
21

Se você estiver usando o servidor web padrão do PHP (por exemplo php artisan serve), precisará reiniciar o servidor após alterar os valores do arquivo .env.

Vrushal Raut
fonte
11

Quando você instala o Homestead, isso cria um banco de dados "homestead" padrão na VM. Você deve fazer o SSH na VM homestead sshe executar suas migrações a partir daí. Se você estiver trabalhando localmente sem VM, precisará criar seu banco de dados manualmente. Por padrão, o banco de dados deve ser chamado de homestead, o nome de usuário é homestead e a senha é secreta.

verifique esta discussão em laracasts ou esta postagem no blog para obter mais detalhes


se você está recebendo

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

tente alterar "host" no arquivo /app/config/database.php de "localhost" para "127.0.0.1". Você pode encontrar mais detalhes e outras correções aqui neste tópico .

Verifique também se você especificou o correto unix_socket. verifique esta discussão .

Sojan V Jose
fonte
@ rangerover.js tente mudar "host" no arquivo /app/config/database.php de "localhost" para "127.0.0.1"
Sojan V Jose
@ rangerover.js verifique este tópico stackoverflow.com/questions/20723803/… . veja qualquer uma das soluções importa.
precisa saber é o seguinte
@ rangerover.js também verificar se o serviço mysql está funcionando :)
Sojan V Jose
@ rangerover.js pode verificar seu unix_socket? stackoverflow.com/a/25649930/939299
Sojan V Jose
1
Finalmente funcionou no dia 4 tentou. Exclua todos os seus comentários e inclua este link stackoverflow.com/a/25649930/939299 como parte de sua resposta, pois isso me ajuda.
cyber8200
11

Verifique o soquete do MySQL UNIX

Encontre a localização do unix_socket usando o MySQL

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)

Então eu vou para config / database.php

Eu atualizo esta linha: 'unix_socket' => '/tmp/mysql.sock',

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

É isso aí. Ele funciona para a minha quarta tentativa. Espero que essas etapas ajudem alguém. : D

cyber8200
fonte
Uau, isso me salvou:)
Petar Vasilev
11

Eu tive o mesmo problema e, no final, acabou precisando reiniciar o servidor e começar de novo

Ctrl+ centão

php artisan serve
code511788465541441
fonte
9

No PC com Windows, siga abaixo.


  1. Acesse a pasta raiz do seu aplicativo.

  2. Edite o arquivo .env

Pasta raiz de acesso do seu aplicativo

Edite o arquivo .env

Edite o destaque e altere o nome de usuário e a senha e o nome do banco de dados de acordo.

Fred Ondieki
fonte
9

no meu caso, depois de reiniciar o servidor, o problema desapareceu.

saia / feche o comando "php artisan serve" e

execute novamente o comando "php artisan serve" .

sh6210
fonte
8

Algum tempo no futuro. Tente limpar sua configuração primeiro

php artisan config:clear. 

Feche todas as janelas do terminal / cmd e, em seguida, reinicie o terminal / CMD e isso deve eliminar a mensagem de erro. Veja se funciona.

Krishneil
fonte
muito obrigado isso é trabalhado para mim. Eu não sei por que esse erro aconteceu. eu apenas fecho tudo e recarrego e executo o php artisan config: clear
sabre tabatabaee yazdi
6

após o config db reinicie o:

 php artisan serve

Se o serviço estiver ativo antes de definir a configuração do banco de dados.

A1Gard
fonte
5

Estou usando o laravel 5. * Eu acho que tenho uma chamada de arquivo .envna raiz do projeto que se parece com isso:

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

E isso acabou de escrever a configuração do bd para que você possa excluir esses arquivos de configuração para que, em geral, assuma a configuração em / config ou defina sua configuração aqui.

Eu fiz o segundo e funciona para mim :)

Jesus Gonzalez
fonte
5

Entendi! Faça login como root e conceda a homestead @ localhost os direitos de tudo.

Do seu terminal:

$ 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

Agora, o usuário comum do homesteads tem acesso a todas as suas tabelas e, como tal, deve poder executar coisas como migrações.

Mike Wright
fonte
5

Após alterar .env com a nova configuração, você deve parar o servidor e executá-lo novamente (php artisan serve). Causa O laravel obtém o ambiente ao inicializar o servidor. Se você não reiniciar, alterará o .env se perguntando por que as alterações não estão ocorrendo !!

Luis Lopez
fonte
5

Tudo o que você precisa fazer é alterar o arquivo .env .

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

Na frente de DB_DATABASE, escreva o nome do banco de dados e, na frente de DB_USERNAME, use root .

Apoorv
fonte
4

Eu só queria postar isso porque esse problema me frustrou por cerca de três horas hoje. Eu não tentei nenhum dos métodos listados nas outras respostas, embora todos pareçam razoáveis. Na verdade, eu estava prestes a tentar percorrer cada uma das soluções propostas acima, mas de alguma forma recebi esse golpe de inspiração. Aqui está o que funcionou para eu voltar a trabalhar - YMMV:

1) Encontre o seu arquivo .env. 2) Renomeie seu arquivo .env para outra coisa. O Laravel 5 deve estar usando esse arquivo como uma substituição para configurações em outro lugar da estrutura. Renomeei o meu para .env.old 3) Pode ser necessário reiniciar o servidor da Web, mas não foi necessário.

Boa sorte!

Eric Hepperle - CodeSlayer2010
fonte
3

Você precisa executar o $ php artisan migratecomando no Homestead, não no seu Mac.

Martin Bean
fonte
Sua captura de tela mostra o nome da máquina como MBP-bheng-aveniors. Essa não é sua VM. Você precisa fazer o SSH em Homestead ( $ homestead ssh) e depois executar a $ php artisan migratepartir dessa sessão do SSH.
Martin Bean
3

Verifique seu arquivo " .env " na pasta raiz. está correto?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Ferhat KOÇER
fonte
3

eu encontrei solução

  1. Vá para o diretório raiz do aplicativo e abra o arquivo .env (no ubuntu pode estar oculto, pressione ctrl + h para mostrar os arquivos ocultos) no seu editor e altere a configuração do banco de dados. salve o arquivo .env

  2. em seguida, reinicie o servidor apache / servidor web. e atualize sua página e você fez

  3. Se o problema persistir, tente executar o comando abaixo para limpar o antigo arquivo de cache de configuração.

Isso funcionou para mim gl ...

DucaBgd
fonte
3

basta alterar essas coisas no arquivo .env da sua pasta raiz.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Funcionou para mim.

sradha
fonte
3

no meu caso (laravel 5+), tive que agrupar minha senha entre aspas simples e limpar o cache de configuração:

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

e então execute:

php artisan config:clear
mh bitarafan
fonte
1

Entre no MYSQL - use o banco de dados mysql.

Selecione * do usuário;

Verifique se sua coluna HOST está correta. Deve ser o host do qual você está se conectando (seu servidor de aplicativos), seja o endereço IP ou o nome DNS. Também '%' funcionará (significando curinga), mas não será seguro.

beiller
fonte
1

Verifique o seu arquivo .env, se você editou alguma das variáveis, reinicie o servidor laravel e seu problema será resolvido.

Ogbonna Vitalis
fonte
1

A. Depois de atualizar o arquivo .env com as configurações do banco de dados, limpe a configuração larval "executando php artisan config: clear"

B. Certifique-se de reiniciar o servidor apache / execute novamente o comando "php artisan serve" para que suas configurações entrem em vigor.

SoftwarerHelp
fonte
0

Eu tive o mesmo problema usando o SQLite. Meu problema era que DB_DATABASE estava apontando para o local do arquivo errado.

Crie o arquivo sqlite com o comando touch e produza o caminho do arquivo usando o 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"

Em seguida, imprima esse caminho exato para a variável 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

Sem o caminho correto, você receberá o erro de acesso negado

Connor Leech
fonte
0

Se você tiver um erro ao retornar algo como, PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'é porque você está alterando sua configuração do batabase como DB_DATABASE=laravelu. Então, por enquanto você:

  1. Mude o ouDB_DATABASE=[yourdatabase]
  2. crie um banco de dados chamado laraveluem seu phpmyadmin

isso deve ser capaz de resolvê-lo

Byron Wong
fonte
0

No meu caso, o erro foi "causado" pela minha configuração Homestead / Vagrant sobre a qual eu esqueci :) tentando executar a migração apenas na linha de comando.

No caso de usar o ambiente Homestead Vagrant Box, você deve executar sua migração a partir da sua máquina Homestead (depois de conectar-se a ela usando ssh:) [email protected]:22, os direitos de acesso serão válidos e permitirão a migração.

Picard
fonte
0

Da sua pergunta, parece que você está executando o homestead. Nesse caso, verifique se você está executando os comandos na sua VM. Muitos desenvolvedores, inclusive eu, frequentemente cometem erros e executam comandos artesanais fora da VM, os quais tentarão se conectar ao nosso banco de dados local acessível através do host local, que é diferente do banco de dados usado pelo homestead. Faça o CD no diretório Homestead e execute

vagrant ssh

depois cd no código, se é aí que você mantém seus projetos e o cd no seu projeto e executa php artisan migrate again . Espero que isso ajude outras pessoas.

Abdellah Ramadan
fonte