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

时间:2015-04-20 18:59:20

标签: php laravel laravel-5 database-migration homestead

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

在我的本地环境中,我一直在运行php artisan migrate

enter image description here

配置

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

localhost替换为127.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套接字(此步骤适用于我

30 个答案:

答案 0 :(得分:229)

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

<强> 1 即可。转到你的应用程序根目录并打开.env文件(在ubuntu中它可能是隐藏的,所以按 ctrl + h 显示隐藏文件&amp;如果你在终端然后输入:ls -a显示隐藏文件)并更改数据库配置设置。然后保存.env文件

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

<强> 2 即可。然后重启你的apache服务器/ web服务器。并刷新你的页面,你已经完成了

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

php artisan config:clear

现在你已经完成了错误

答案 1 :(得分:58)

TLDR:您需要停止服务器 Ctrl + c 并使用php artisan serve重新开始

详细信息:

如果您使用的是Laravel,并且已经php artisan serve

启动了本地开发服务器

在上面的服务器已经运行之后,你在.env文件中更改了与数据库服务器相关的东西。就像从MySQL迁移到SQLite之类的东西。您需要确保停止上述过程,即Ctrcl C或任何停止该过程的过程。然后重新启动Artisan Serve,即y php artisan serve并刷新浏览器,您的问题将与数据库相关。这对Laravel 5.3来说非常有用

答案 2 :(得分:31)

解决问题的两种方法

第一种方式(不推荐)

打开数据库配置文件(laravel_root / config / database.php)&amp;搜索下面的代码块。

        '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

现在它可以正常工作。

答案 3 :(得分:21)

如果您使用的是PHP的默认Web服务器(例如php artisan serve),则需要在更改.env文件值后重新启动服务器。

答案 4 :(得分:19)

如果您使用php artisan migrate NOT来自流浪汉但不是来自主机,那么您必须在.env框内192.168.10.10

中定义

显然从你的ip设置了对宅基地用户的许可

之类的东西
grant all privileges on *.* to 'homestead'@% identified by 'secret';
<{1>}文件中的

.env

答案 5 :(得分:10)

  

安装Homestead时,会创建默认的“宅基地”   VM中的数据库。您应该SSH到VM homestead ssh并运行   你从那里迁移。如果您在本地没有VM工作,   您需要手动创建数据库。默认情况下,数据库   应该叫做宅基地,用户名是宅基地和密码   是秘密。

查看此thread on laracasts或此blog post了解详情


如果你要

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

尝试将/app/config/database.php文件中的“host”从“localhost”更改为“127.0.0.1”。您可以在此处thread找到更多详细信息和其他修补程序。

同时检查您是否指定了正确的unix_socket。检查此thread

答案 6 :(得分:10)

我遇到了同样的问题,最后我发现我只需要重新启动服务器并重新启动

Ctrl + c 然后

php artisan serve

答案 7 :(得分:9)

在Windows PC中关注以下内容。

  1. 访问应用程序的Root文件夹。

  2. 编辑.env文件

  3. Access Root folder of your application

    Edit the .env File

    编辑突出显示并相应更改用户名和密码和数据库名称。

答案 8 :(得分:8)

检查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

答案 9 :(得分:8)

在我的情况下, 重新启动 我的服务器后,问题消失了。

退出/关闭“ php artisan serve”命令

重新运行命令“ php artisan serve”命令

答案 10 :(得分:7)

将来的某个时间。尝试先清除配置

php artisan config:clear. 

关闭所有终端/ cmd窗口,然后重新启动终端/ CMD,这应该摆脱错误消息。看看它是否有效。

答案 11 :(得分: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

现在,家庭常规用户可以访问您的所有表格,因此应该可以运行迁移等操作。

答案 12 :(得分: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下的配置或在这里设置你的配置。

我做了第二次,它适用于我:)

答案 13 :(得分:5)

在配置数据库重启后:

 php artisan serve

如果服务在设置数据库配置之前处于活动状态。

答案 14 :(得分:5)

使用新配置更改.env后,您必须停止服务器并再次运行它(php artisan serve)。 laravel在初始化服务器时获取环境的原因。如果你没有重新启动,你将改变.env,问自己为什么没有发生变化!!

答案 15 :(得分:4)

您要做的就是更改您的 .env 文件。

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

在DB_DATABASE前面,输入数据库名称,在DB_USERNAME前面,使用 root

答案 16 :(得分:3)

您必须在Homestead内运行$ php artisan migrate命令,而不是Mac。

答案 17 :(得分:3)

我找到了解决方案

  1. 转到您的应用程序根目录并打开.env文件(在ubuntu中可能已隐藏,因此请按ctrl + h显示隐藏文件)并更改数据库配置设置。然后保存.env文件

  2. 然后重启您的Apache服务器/ Web服务器。并刷新你的页面,你已经完成了

  3. 如果仍有问题,请尝试运行以下命令清除旧的配置缓存文件。
  4. 这对我来说很有用......

答案 18 :(得分:3)

检查您的&#34; .env &#34;根文件夹中的文件。这是对的吗?

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

答案 19 :(得分:3)

我只是想发布这个,因为这个问题让我今天大约3个小时感到沮丧。我没有尝试过其他答案中列出的任何方法,尽管它们看起来都很合理。事实上,我正准备尝试完成上面提出的每个解决方案,但不知怎的,我得到了这种灵感。以下是让我重新开始工作的原因 - YMMV:

1)找到你的.env文件。 2)将.env文件重命名为其他内容。 Laravel 5必须使用此文件作为框架中其他位置的设置的覆盖。我将我改名为.env.old 3)您可能需要重新启动Web服务器,但我没有。

祝你好运!

答案 20 :(得分:2)

在我的情况下(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

答案 21 :(得分:1)

检查你的.env文件,如果你已经编辑了任何变量,请重新启动laravel服务器,你的问题就会解决

答案 22 :(得分:1)

一个。用数据库设置更新.env文件后,通过“运行php artisan config:clear”清除幼虫设置

B中。请确保重新启动Apache服务器/重新运行“php artisan serve”命令以使设置生效。

答案 23 :(得分:1)

登录MYSQL - 使用mysql数据库。

从用户中选择*;

确保您的HOST列正确无误。它应该是您从(您的应用程序服务器)连接的主机,无论是IP地址还是DNS名称。还有&#39;%&#39;将起作用(意为通配符)但不安全。

答案 24 :(得分:1)

只需在根文件夹的.env文件中更改这些内容即可。

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

对我有用。

答案 25 :(得分:0)

如果您返回PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'之类的错误,则会导致您将batabase配置更改为DB_DATABASE=laravelu。所以现在你要么:

  1. 更改DB_DATABASE= [yourdatabase]
  2. 在phpmyadmin
  3. 中创建一个名为laravelu的数据库

    这应该能够解决它

答案 26 :(得分: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

如果没有正确的路径,您将收到拒绝访问错误

答案 27 :(得分:0)

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

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

答案 28 :(得分:0)

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

vagrant ssh

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

答案 29 :(得分:0)

我的应用已设置为使用 .env.local。我一直在检查 .env

如果有多个文件,请检查您是否正在编辑正确的 .env 文件。