用户'homestead'@'localhost'的访问被拒绝(使用密码:是)


165

我在使用Laravel 5.0的Mac OS Yosemite上。

在我的本地环境中,php artisan migrate我一直在跑:

用户'homestead'@'localhost'的访问被拒绝(使用密码:是)

组态

这是我的.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个

app / 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


3

通过运行检查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
我认为您正在使用Homestead VM?我发现它仅在您位于VM中时有效。您可以通过ssh vagrant@127.0.0.1 -p 2222进入它。我的默认计算机不会显示db正在运行。
杰伊·爱德华兹

Answers:


254

由于用户'homestead'@'localhost'laravel 5错误而拒绝访问的原因是.env.php文件的缓存问题,原因是Laravel 5在.env文件中使用基于环境的配置。

1。转到应用程序的根目录,然后在编辑器中打开.env文件(在ubuntu中可能是隐藏的,请按ctrl+ h显示隐藏的文件,如果在终端中,请键入:ls -a以显示隐藏的文件)并更改数据库配置设置。然后保存您的.env文件

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

2。然后重新启动apache服务器/ web服务器。并刷新您的页面,您已经完成了

3。如果仍然存在问题,请尝试运行以下命令以清除旧的配置缓存文件。

php artisan config:clear

现在您已经完成了错误


1
我为我工作了,谢谢,一个问题,为什么我们必须像在database.php文件上那样在.env文件上设置数据库详细信息
Dipen

1
也许我您需要多个环境,生产环境和本地环境。
Abdou Tahiri

5
当我一直在使用“ php artisan serve”时一直试图重启Apache,我建议您不要跟我犯同样的错误> <
Carlton

1
不起作用,现在我得到PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._。
黑色

1
我试图改变.envconfig:clear cache:clear所有的命令,重新启动apache,但仍然得到了同样的问题。
卢赞·巴尔

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对我有用的


哦,天哪,这对我有用,谢谢。但是当更改环境时我该如何停止?这是一个很好的经验
saber tabatabaee yazdi

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推荐)

检查您的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似乎是多余的。
露背装

信息不是多余的,它使用env函数从.env文件中读取值以保护服务器信息。
absiddiqueLive

如何使用Homestead查找或创建主机名,数据库名称,用户名和密码?
康纳·里奇

21

如果您使用的php artisan migrate不是NOT VAGrant Box,而是主机,则必须.env在Box的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”数据库。您应该通过SSH进入VM homestead ssh并从那里运行迁移。如果您在没有VM的本地工作,则需要手动创建数据库。默认情况下,数据库应名为homestead,用户名是homestead,密码是secret。

检查此链接在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文件中的“主机”从“本地主机”更改为“ 127.0.0.1”
Sojan V Jose 2015年

@ rangerover.js检查此线程stackoverflow.com/questions/20723803/…。看到任何解决方案都很重要。
Sojan V Jose

@ rangerover.js还检查mysql服务是否正在运行:)
Sojan V Jose 2015年

@ 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',

而已。这是我的第四次尝试。希望这些步骤对您有所帮助。:D


哇,这救了我
:)

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

在配置数据库重启后:

 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配置之后,因此您可以删除那些config vars,以便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)您可能需要重新启动Web服务器,但并非必须如此。

祝好运!


3

您必须$ php artisan migrate从Homestead(而不是Mac)中运行命令。


屏幕快照显示机器名称为MBP-bheng-aveniors。那不是您的VM。您需要通过SSH进入Homestead($ 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

检查您的.env文件,如果您已编辑任何变量,请重新启动laravel服务器,您的问题将得到解决


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. laravelu在您的phpmyadmin中创建一个数据库

这应该能够解决它


0

在我的情况下,错误是我的Homestead / Vagrant配置“引起”的,而我忘记了:)尝试仅从命令行运行迁移。

如果使用Homestead Vagrant Box环境,则应从Homestead机器内部运行迁移(使用ssh:连接到它之后vagrant@192.168.10.10:22),然后访问权限就可以了,并且可以运行迁移。


0

从您的问题来看,您似乎正在奔跑。在这种情况下,请确保在VM中运行命令。包括我在内的许多开发人员经常在VM之外出错并运行artisan命令,这些命令将尝试连接到可通过localhost访问的本地数据库,该本地数据库与homestead使用的数据库不同。将CD复制到您的Homestead目录并运行

vagrant ssh

然后将cd插入代码(如果您可以保留项目),然后将cd插入项目并运行,php artisan migrate again 我希望这会对其他人有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.