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

kyo*_*kyo 155 php database-migration laravel laravel-5 homestead

我使用Laravel 5.0在Mac OS Yosemite上.

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

在此输入图像描述

组态

这是我的.env

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

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Run Code Online (Sandbox Code Playgroud)

应用程序\ 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,
    ]
Run Code Online (Sandbox Code Playgroud)

我该如何避免这种错误?

我试过了 :


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套接字(此步骤适用于我)

Abd*_*iri 248

访问被拒绝用户'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=''
Run Code Online (Sandbox Code Playgroud)

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

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

php artisan config:clear
Run Code Online (Sandbox Code Playgroud)

现在你已经完成了错误

  • 我在整个时间使用"php artisan serve"时都试图重启Apache,我建议你不要和我犯同样的错误> < (5认同)

Moh*_*sin 64

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认同)

abs*_*ive 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', ''),
Run Code Online (Sandbox Code Playgroud)

更改代码块,如下所示

        'host'      => 'yourHostName',
        'database'  => 'YourDatabastName',
        'username'  => 'YoutDatabaseUsername',
        'password'  => 'YourDatabasePassword',
Run Code Online (Sandbox Code Playgroud)

第二种方式(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
Run Code Online (Sandbox Code Playgroud)

修改以下块如下

DB_HOST=yourHostName
DB_DATABASE=yourDatabaseName
DB_USERNAME=yourDatabaseUsername
DB_PASSWORD=youPassword
Run Code Online (Sandbox Code Playgroud)

现在它会正常工作.


小智 21

如果您使用php artisan migrateNOT来自流浪汉但不是来自主机,那么您必须.env在盒子的ip 内部进行定义192.168.10.10

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

grant all privileges on *.* to 'homestead'@% identified by 'secret';
Run Code Online (Sandbox Code Playgroud)

.env文件中

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead
Run Code Online (Sandbox Code Playgroud)


Vru*_*aut 21

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


kyo*_*kyo 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)
Run Code Online (Sandbox Code Playgroud)

然后我去config/database.php

我更新了这一行: 'unix_socket' => '/tmp/mysql.sock',

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

而已.它适合我作为我的第四次尝试.我希望这些步骤可以帮助某人.:d


cod*_*441 11

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

Ctrl+ c然后

php artisan serve
Run Code Online (Sandbox Code Playgroud)


Soj*_*ose 10

安装Homestead时,会在VM中创建默认的"homestead"数据库.您应该通过SSH连接到VM homestead ssh并从那里运行迁移.如果您在本地没有VM工作,则需要手动创建数据库.默认情况下,数据库应该称为homestead,用户名是homestead,密码是secret.

请查看laracasts或此博客文章中的主题以获取更多详细信息


如果你到了

[PDOException] SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

尝试将/app/config/database.php文件中的"host"从"localhost"更改为"127.0.0.1".您可以在此主题中找到更多详细信息和其他修复程序.

还要检查是否指定了正确的unix_socket.检查这个帖子.


Fre*_*eki 9

在Windows PC中按照以下说明.


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

  2. 编辑.env文件

访问应用程序的Root文件夹

编辑.env文件

编辑突出显示并相应地更改UserName和密码adn数据库名称.


Kri*_*eil 8

将来的某个时候.尝试先清除您的配置

php artisan config:clear. 
Run Code Online (Sandbox Code Playgroud)

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


sh6*_*210 8

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

退出/关闭"php artisan serve"命令

重新运行命令"php artisan serve"命令.


mh.*_*fan 8

在我的情况下(laravel 5+),我必须将我的密码用单引号括起来并清除配置缓存:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=user_name
DB_PASSWORD='password'
Run Code Online (Sandbox Code Playgroud)

然后运行:

php artisan config:clear
Run Code Online (Sandbox Code Playgroud)


A1G*_*ard 6

在配置数据库重启后:

 php artisan serve
Run Code Online (Sandbox Code Playgroud)

如果服务在设置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
Run Code Online (Sandbox Code Playgroud)

这就是编写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
Run Code Online (Sandbox Code Playgroud)

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


Lui*_*pez 5

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


小智 5

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

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Run Code Online (Sandbox Code Playgroud)

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