我在使用 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(这一步对我有用)
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
现在你已经完成了错误
TLDR:您需要停止服务器 Ctrl + c 并使用 php artisan serve
重新启动
细节:
如果您正在使用 Laravel,并且已经在 php artisan serve
之前启动了本地开发服务器
在上述服务器已经运行之后,您可以在 .env 文件中更改与数据库服务器相关的内容。就像从 MySQL 迁移到 SQLite 之类的。您需要确保停止上述过程,即 Ctrcl C
或任何停止该过程的东西。然后再次重新启动 Artisan Serve 即 y php artisan serve
并刷新您的浏览器,您与数据库相关的问题将得到修复。这对我来说对 Laravel 5.3 有用
两种方法解决
第一种方式(不推荐)
打开您的数据库配置文件(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
中的此信息似乎是多余的。
如果您使用 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';
为我工作。
如果您使用 PHP 的默认 Web 服务器(例如 php artisan serve
),您需要在更改 .env 文件值后重新启动服务器。
我有同样的问题,最后结果我只需要重新启动服务器并重新开始
Ctrl + c 然后
php artisan serve
当你安装 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 。
检查 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
在 Windows PC 中如下。
访问应用程序的根文件夹。编辑 .env 文件
https://i.stack.imgur.com/GmGij.png
https://i.stack.imgur.com/GK8Al.png
编辑突出显示并相应地更改用户名和密码以及数据库名称。
就我而言,重新启动服务器后,问题就消失了。
退出/关闭“php artisan serve”命令和
重新运行命令“php artisan serve”命令。
就我而言(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
在未来的某个时候。尝试先清除您的配置
php artisan config:clear.
关闭所有终端/cmd 窗口,然后重新启动终端/CMD,这应该可以消除错误消息。看看它是否有效。
配置数据库后重新启动:
php artisan serve
如果在设置数据库配置之前服务处于活动状态。
我使用 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 普通用户可以访问您的所有表,因此应该能够运行迁移等操作。
使用新配置更改 .env 后,您必须停止服务器并再次运行它(php artisan serve)。导致 laravel 在初始化服务器时获取环境。如果您不重新启动,您将更改 .env 并询问自己为什么没有发生更改!
您所要做的就是更改您的 .env 文件。
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
在 DB_DATABASE 前面,写数据库的名称,在 DB_USERNAME 前面,使用 root。
我只是想发布这个,因为这个问题今天让我沮丧了大约 3 个小时。我没有尝试过其他答案中列出的任何方法,尽管它们看起来都很合理。事实上,我正要尝试通过上述每个建议的解决方案,但不知何故,我得到了这个灵感。这是让我重新开始工作的方法——YMMV:
1) 找到你的 .env 文件。 2) 将您的 .env 文件重命名为其他名称。 Laravel 5 必须将此文件用作框架中其他位置的设置的覆盖。我将我的重命名为 .env.old 3) 您可能需要重新启动 Web 服务器,但我不必这样做。
祝你好运!
您必须在 Homestead 中运行 $ php artisan migrate
命令,而不是在您的 Mac 中。
MBP-bheng-aveniors
。那是不是你的虚拟机。您需要通过 SSH 连接到 Homestead ($ homestead ssh
),然后在该 SSH 会话中运行 $ php artisan migrate
。
检查根文件夹中的“.env”文件。这是对的吗?
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
我找到了解决方案
转到您的应用程序根目录并在您的编辑器中打开 .env 文件(在 ubuntu 中它可能是隐藏的,因此按 ctrl+h 显示隐藏文件)并更改数据库配置设置。然后保存您的 .env 文件,然后重新启动您的 apache 服务器/网络服务器。并刷新您的页面,如果仍然存在问题,请尝试运行以下命令以清除旧的配置缓存文件。
这对我有用gl ...
只需在根文件夹的 .env 文件中更改这些内容。
DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'
它对我有用。
登录 MYSQL - 使用 mysql 数据库。
从用户中选择 *;
确保您的 HOST 列是正确的。它应该是您要连接的主机(您的应用程序服务器),无论是 IP 地址还是 DNS 名称。 '%' 也可以工作(意思是通配符),但不安全。
检查您的 .env 文件,如果您编辑了任何变量,请重新启动 laravel 服务器,您的问题将得到解决
A. 使用数据库设置更新 .env 文件后,通过“running php artisan config:clear”清除 laravel 设置
B. 请确保您重新启动您的 apache 服务器/重新运行“php artisan serve”命令以使您的设置生效。
我在使用 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
。所以现在你要么:
更改 DB_DATABASE=[yourdatabase] 或在您的 phpmyadmin 中创建一个名为 laravelu 的数据库
这应该可以解决
在我的情况下,错误是由我的 Homestead / Vagrant 配置“引起”的,我忘记了:) 试图仅从命令行运行迁移。
如果使用 Homestead Vagrant Box 环境,您应该在 Homestead 机器中运行迁移(在使用 ssh:vagrant@192.168.10.10:22
连接到它之后),然后访问权限将正常并允许迁移运行。
从您的问题来看,您似乎正在经营宅基地。在这种情况下,请确保您在 VM 中运行命令。包括我在内的许多开发人员经常犯错误并在 VM 之外运行工匠命令,这些命令将尝试连接到可通过 localhost 访问的本地数据库,这与 homestead 使用的数据库不同。 cd 到你的 Homestead 目录并运行
vagrant ssh
然后 cd 进入代码,如果那是你保存项目的地方,然后 cd 进入你的项目并运行 php artisan migrate again
我希望这对其他人有帮助。
我的应用程序已设置为使用 .env.local
。我一直在检查 .env
。
如果您有多个文件,请检查您是否正在编辑正确的 .env
文件。
PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'
._。.env
和config:clear
cache:clear
所有命令,重新启动apache
但仍然遇到同样的问题。