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

Access denied for user 'homestead'@'localhost' (using password: YES)

我正在 Mac OS Yosemite 使用 Laravel 5.0.

在我的 local 环境中,我 运行 php artisan migrate 我不断得到:

Access denied for user 'homestead'@'localhost' (using password: YES)

配置

这是我的 .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是否运行ning

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 套接字(这一步对我有用

When you install Homestead, this creates a default "homestead" database in the VM. You should SSH into the VM homestead ssh and run your migrations from there. If you are working locally with no VM, you'll need to create your database manually. By default, the database should be called homestead, the username is homestead and the password is secret.

查看此 thread on laracasts or this 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 .

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

登录 MYSQL - 使用 mysql 数据库。

Select * 来自用户;

确保您的 HOST 列是正确的。它应该是您连接的主机(您的应用程序服务器),可以是 IP 地址或 DNS 名称。 “%”也可以工作(表示通配符)但不安全。

用户 '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 server/web 服务器。并刷新您的页面,您就完成了

3。如果仍然发出尝试 运行 下面的命令来清除旧的配置缓存文件。

php artisan config:clear

现在您已解决错误

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

就是这样。它适用于我的第 4 个 try.I 希望这些步骤对某人有所帮助。 :D

两种解法

第一种方式(不推荐)

打开您的数据库配置文件 (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 root 有一个文件调用 .env 如果不存在,寻找 .env.example,copy/rename 它作为 .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

现在可以正常使用了。

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

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

祝你好运!

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

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

知道了!以 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 普通用户可以访问您的所有表,因此,应该能够 运行 迁移之类的事情。

如果你使用 php artisan migrate 不是来自 vagrant box 而是来自主机那么你必须在 .env 里面定义盒子的 ip 192.168.10.10

并且显然从您的 ip 设置了对 homestead 用户的权限 像

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

.env 文件中

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead

检查根文件夹中的“.env”文件。正确吗?

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

我找到了解决方案

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

  2. 然后重新启动您的 Apache server/web 服务器。并刷新您的页面,您就完成了

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

这对我有用...

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


详情:

如果您正在使用 Laravel,并且已经在 php artisan serve

之前启动了本地开发服务器

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

对我有用的东西

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

Ctrl + c 然后

php artisan serve

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

php artisan config:clear. 

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

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

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

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

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

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

这个应该可以解决

在Windows PC下面关注


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

  2. 编辑 .env 文件

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

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

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

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

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

配置数据库重启后:

 php artisan serve

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

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

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

DB_DATABASE前面写数据库名DB_USERNAME前面用root.

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

exit/close "php artisan serve" 命令

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

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

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

对我有用。

在我的例子中,错误是 "caused" 我的 Homestead / Vagrant 配置,我忘记了 :) 试图 运行 仅从命令行迁移。

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

在我的例子中 (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

从你的问题来看,你似乎是运行ning宅基地。在这种情况下,请确保您 运行 在虚拟机中执行命令。包括我在内的许多开发人员经常在 VM 之外犯 运行 artisan 命令,这些命令将尝试连接到我们的本地数据库,该数据库可通过 localhost 访问,这与 homestead 使用的数据库不同。 Cd 到你的 Homestead 目录和 运行

vagrant ssh

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

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

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

在我的例子中,我没有用那个名字创建数据库。 尝试更改用户名、密码和数据库名称以适合您所拥有的或 访问:https://5balloons.info/fix-access-denied-for-user-homesteadlocalhost/

如果使用 Laravel Dusk 和 GitHub 动作

我 运行 尝试使用 Dusk 文档中的 default GitHub Action workflow 与 Laravel Dusk 建立一个 CI/CD 管道,这 - 因为我'除了与 Dusk 相关的任何东西之外,我已经苏醒了。

我通过将我的 .env.dusk.testing 文件中的数据库环境变量添加到 GitHub Actions 工作流程来修复它,以确保 GitHub Actions runner 可以访问它们。我还可以选择将它们从“运行 Dusk”步骤移动到 job-level,使它们可用于作业中的任何其他步骤:

name: CI

on: [push]

jobs:
  dusk-php:
    env:
      APP_URL: "http://127.0.0.1:8000"
      DB_DATABASE: CICD_test_db
      DB_USERNAME: root
      DB_PASSWORD: root
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Prepare The Environment
        run: cp .env.example .env
      - name: Create Database
        run: |
          sudo systemctl start mysql
          mysql --user="root" --password="root" -e "CREATE DATABASE CICD_test_db character set UTF8mb4 collate utf8mb4_bin;"
      - name: Install Composer Dependencies
        run: composer install --no-progress --prefer-dist --optimize-autoloader
      - name: Generate Application Key
        run: php artisan key:generate
      - name: Upgrade Chrome Driver
        run: php artisan dusk:chrome-driver `/opt/google/chrome/chrome --version | cut -d " " -f3 | cut -d "." -f1`
      - name: Start Chrome Driver
        run: ./vendor/laravel/dusk/bin/chromedriver-linux &
      - name: Run Laravel Server
        run: php artisan serve --no-reload &
      - name: Run Dusk Tests
        run: php artisan dusk --env=testing -vvv
      - name: Upload Screenshots
        if: failure()
        uses: actions/upload-artifact@v2
        with:
          name: screenshots
          path: tests/Browser/screenshots
      - name: Upload Console Logs
        if: failure()
        uses: actions/upload-artifact@v2
        with:
          name: console
          path: tests/Browser/console