拒绝访问用户‘ homestead’@‘ localhost’(使用密码: YES)

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

在我的 本地环境中,我运行 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

App 配置数据库

   '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

127.0.0.1代替 localhost

'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 Socket (这一步对我有用)

318564 次浏览

安装“宅地”时,会创建一个默认的“宅地” 您应该 SSH 到 VM homestead ssh并运行 如果您在本地工作时没有使用 VM, 您需要手动创建数据库 应该叫宅基地,用户名是宅基地和密码 是秘密。

检查这个 长丝虫上的线或这个 博客文章了解更多细节


如果你得到了

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

尝试将/app/config/database. php 文件中的“ host”从“ localhost”更改为“127.0.0.1”。你可以在这个 线上找到更多的细节和其他补丁。

还要检查您是否指定了正确的 unix_socket。检查这个 线

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

登录到 MYSQL-使用 MYSQL 数据库。

从用户中选择 * ;

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

用户‘ homestead’@‘ localhost’laravel 5错误拒绝 Access 的原因是。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

现在您已经完成了这个错误

检查 MySQL UNIX Socket

使用 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',

就是这样。这对我的第四次尝试有效。我希望这些步骤能帮助到别人

有两种解决方法

第一条路(不推荐)

打开数据库配置文件(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 根有一个文件调用。如果不存在,寻找。Example,复制/重命名为。之后的文件看起来很糟糕!

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个小时。我没有尝试其他答案中列出的任何方法,尽管它们似乎都是合理的。事实上,我正准备把上面提出的每一个解决方案都看一遍,但不知怎么的,我突然灵光一闪。以下是让我重新开始工作的方法—— YMMV:

1)找到你的.env 文件。 2)重新命名你的。Env 文件转换为其他文件。Laravel5必须使用这个文件作为框架中其他地方设置的覆盖。我把我的名字改成了。Env.old 3)你可能需要重新启动你的网络服务器,但我没有必要。

祝你好运!

我用的是 Laravel 5。* i figure i have a file call .env in the root of the project that look like this:

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

现在普通用户可以访问所有的表,因此,应该能够运行像迁移一样的东西。

如果你使用的 php artisan migrate不是从流浪汉箱子,而是从主机,那么你必须在 .env里面定义 192.168.10.10箱子的 ip

并且显然从你的 IP 地址设置了宅地用户的权限 比如

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 服务器/web 服务器,刷新你的页面

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

这招对我很管用。

您需要停止服务器 ABC1 + ABC2并使用 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 窗口,然后重新启动终端/CMD,这应该可以消除错误消息。看看有没有用。

如果你正在使用 PHP 默认的 web 服务器(例如 php artisan serve) ,你需要重新启动你的服务器。Env 文件值。

我在使用 SQLite 时遇到了同样的问题,我的问题是 DB _ DATABASE 指向了错误的文件位置。

使用 touch 命令创建 sqlite 文件,并使用 php artian 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'的错误,那是因为您正在将数据库配置更改为 DB_DATABASE=laravelu。所以现在你要么:

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

这个应该能解决

在 WindowsPC 中按照下面的步骤操作。


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

  2. 编辑. env 文件

Access Root folder of your application

Edit the .env File

编辑“高亮显示”并相应地更改 UserName 和密码以及数据库名称。

改变之后。使用新的配置,您必须停止服务器并重新运行它(php artian service)。因为 Laravel 在初始化服务器时获得了环境。如果不重新启动,将更改。问问你自己为什么这些变化没有发生! !

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

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

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

在配置 db 之后重新启动:

 php artisan serve

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

你所要做的就是修改你的 。 env文件。

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

在 DB _ DATABASE 前写入数据库名称,在 DB _ USERNAME 前使用 根号

对我来说, 重新启动之后,我的服务器的问题消失了。

退出/关闭“ php artian service”命令

重新运行命令“ php artian service”命令

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

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

这招对我很管用。

在我的例子中,错误是由我的 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

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

vagrant ssh

然后 cd 到代码,如果这是您保存您的项目和 cd 到您的项目和运行 php artisan migrate again 我希望这能帮到其他人。

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

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

在我的情况下,我没有创建该名称的数据库。 尝试更改用户名、密码和数据库名称以适应您所拥有的或 访问: < a href = “ https://5globons.info/fix-access--user-homesteadlocalhost/”rel = “ nofollow norefrer”> https://5balloons.info/fix-access-denied-for-user-homesteadlocalhost/

如果使用 Laravel Dusk 和 GitHub 操作

我遇到了这个问题,试图用 Laravel Dusk 建立一个 CI/CD 管道,使用 Dusk 文档中的 默认的 GitHub 操作工作流,除了与 Dusk 相关的内容之外,我发现缺乏这个功能。

我通过将我的数据库环境变量从 .env.dusk.testing文件添加到 GitHub Actions 工作流来修复它,以确保 GitHub Actions 运行程序能够访问它们。我还有选择性地将它们从“运行黄昏”步骤转移到工作级别,使它们适用于工作中的任何其他步骤:

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