ChatGPT解决这个技术问题 Extra ChatGPT

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

我在使用 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

应用程序\配置\数据库.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

通过 run 查看 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 Socket(这一步对我有用)

最佳做法是确保该帐户实际存在于 mysql 中......“我在街上找到了这把钥匙,它在我的前门锁中不起作用。我怎样才能更换锁以使钥匙工作?”
我认为您使用的是宅基地虚拟机?我发现它只有在你在虚拟机中时才会起作用。你可以通过 ssh vagrant@127.0.0.1 -p 2222 进入它。我的默认机器没有树枝说数据库正在运行。

J
J4GD33P 51NGH

Access denied for user '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

现在你已经完成了错误


谢谢我为我工作,一个问题为什么我们必须在 .env 文件上设置我们的数据库详细信息,就像我们在 database.php 文件上所做的那样
也许我你需要多个环境,生产和本地。
当我一直使用“php artisan serve”时一直试图重新启动Apache,我建议你不要犯和我一样的错误><
不起作用,现在我得到 PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu' ._。
我尝试更改 .envconfig:clear cache:clear 所有命令,重新启动 apache 但仍然遇到同样的问题。
M
Mohsin

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

细节:

如果您正在使用 Laravel,并且已经在 php artisan serve 之前启动了本地开发服务器

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


哦,我的上帝,这对我有用,谢谢。但是当环境改变时我怎么能停下来有什么工具吗?这是很好的体验
a
abSiddique

两种方法解决

第一种方式(不推荐)

打开您的数据库配置文件(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

现在它会正常工作。


这个文件有什么意义? root/config/database.php 中的此信息似乎是多余的。
该信息不是多余的,它使用 env 函数从 .env 文件中读取值以保护服务器信息。
你如何使用 Homestead 找到或创建你的主机名、数据库名、用户名和密码?
w
wdog

如果您使用 php artisan migrate 不是来自 vagrant 盒子而是来自主机,那么您必须在 .env 内定义盒子的 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'; 为我工作。
V
Vrushal Raut

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


K
Keshan Nageswaran

我有同样的问题,最后结果我只需要重新启动服务器并重新开始

Ctrl + c 然后

php artisan serve

C
Community

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

查看此 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


@rangerover.js 尝试将 /app/config/database.php 文件中的“host”从“localhost”更改为“127.0.0.1”
@rangerover.js 检查这个线程 stackoverflow.com/questions/20723803/… 。看到任何解决方案都很重要。
@rangerover.js 还检查 mysql 服务是否正在运行 :)
@rangerover.js 可以检查你的 unix_socket 吗? stackoverflow.com/a/25649930/939299
它终于在4日尝试了。请删除您的所有评论,并将此链接 stackoverflow.com/a/25649930/939299 包含在您的答案中,因为它对我有帮助。
C
Community

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


哇,这救了我:)
F
Fred Ondieki

在 Windows PC 中如下。

访问应用程序的根文件夹。编辑 .env 文件

https://i.stack.imgur.com/GmGij.png

https://i.stack.imgur.com/GK8Al.png

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


s
sh6210

就我而言,重新启动服务器后,问题就消失了。

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

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


m
mh. bitarafan

就我而言(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

经过许多其他努力,这个解决方案在 Laravel 8 中为我工作。谢谢。
K
Krishneil

在未来的某个时候。尝试先清除您的配置

php artisan config:clear. 

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


非常感谢这对我有用。我不知道为什么会发生这个错误。我只是关闭所有并重新加载并运行 php artisan config:clear
A
A1Gard

配置数据库后重新启动:

 php artisan serve

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


J
Jesus Gonzalez

我使用 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 下进行配置或在此处设置你的配置。

我做了第二个,它对我有用:)


M
Mike Wright

知道了!以 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

现在 homesteads 普通用户可以访问您的所有表,因此应该能够运行迁移等操作。


L
Luis Lopez

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


A
Apoorv

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

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

在 DB_DATABASE 前面,写数据库的名称,在 DB_USERNAME 前面,使用 root。


E
Eric Hepperle - CodeSlayer2010

我只是想发布这个,因为这个问题今天让我沮丧了大约 3 个小时。我没有尝试过其他答案中列出的任何方法,尽管它们看起来都很合理。事实上,我正要尝试通过上述每个建议的解决方案,但不知何故,我得到了这个灵感。这是让我重新开始工作的方法——YMMV:

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

祝你好运!


M
Martin Bean

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


您的屏幕截图将机器名称显示为 MBP-bheng-aveniors。那是不是你的虚拟机。您需要通过 SSH 连接到 Homestead ($ homestead ssh),然后在该 SSH 会话中运行 $ php artisan migrate
F
Ferhat KOÇER

检查根文件夹中的“.env”文件。这是对的吗?

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

D
DucaBgd

我找到了解决方案

转到您的应用程序根目录并在您的编辑器中打开 .env 文件(在 ubuntu 中它可能是隐藏的,因此按 ctrl+h 显示隐藏文件)并更改数据库配置设置。然后保存您的 .env 文件,然后重新启动您的 apache 服务器/网络服务器。并刷新您的页面,如果仍然存在问题,请尝试运行以下命令以清除旧的配置缓存文件。

这对我有用gl ...


s
sradha

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

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

它对我有用。


b
beiller

登录 MYSQL - 使用 mysql 数据库。

从用户中选择 *;

确保您的 HOST 列是正确的。它应该是您要连接的主机(您的应用程序服务器),无论是 IP 地址还是 DNS 名称。 '%' 也可以工作(意思是通配符),但不安全。


O
Ogbonna Vitalis

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


L
Legionar

A. 使用数据库设置更新 .env 文件后,通过“running php artisan config:clear”清除 laravel 设置

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


C
Connor Leech

我在使用 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

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


B
Byron Wong

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

更改 DB_DATABASE=[yourdatabase] 或在您的 phpmyadmin 中创建一个名为 laravelu 的数据库

这应该可以解决


P
Picard

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

如果使用 Homestead Vagrant Box 环境,您应该在 Homestead 机器中运行迁移(在使用 ssh:vagrant@192.168.10.10:22 连接到它之后),然后访问权限将正常并允许迁移运行。


A
Abdellah Ramadan

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

vagrant ssh

然后 cd 进入代码,如果那是你保存项目的地方,然后 cd 进入你的项目并运行 php artisan migrate again 我希望这对其他人有帮助。


w
watkib

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅