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

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

应用程序\ 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

localhostreplace为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是否正在运行

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套接字( 这一步为我工作

访问被拒绝的原因是用户'宅地'@'localhost'laravel 5错误是.env.php文件的caching问题导致Laravel 5在您的.env文件中使用基于环境的configuration。

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

 DB_HOST=localhost DB_DATABASE=laravelu DB_USERNAME=root DB_PASSWORD='' 

2 。 然后重新启动你的Apache服务器/ Web服务器。 刷新你的页面,你完成了

3 。 如果仍然问题尝试运行下面的命令来清除旧的configurationcaching文件。

 php artisan config:clear 

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

两种方法来解决它

第一种方式(不推荐)

打开你的数据库configuration文件(laravel_root / config / database.php)并search下面的代码块。

  '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(如果不存在),find.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 

现在它会正常工作。

TLDR: 您需要停止服务器Ctrl + C并使用php artisan serve再次启动


细节:

如果您使用的是Laravel,并且已经通过php artisan serve启动了本地d​​ev服务器

在上面的服务器已经运行之后,在.env文件中更改数据库服务器相关的东西。 就像从MySQL迁移到SQLite之类的东西。 你需要确保你停止上面的过程,即Ctrcl C或任何阻止进程的东西。 然后重新启动Artisan服务,即y php artisan serve和刷新您的浏览器,你的问题相关的数据库将被修复。 这对于Laravel 5.3来说是非常有用的

如果你使用php artisan migrate不是从stream浪者箱子,而是从主机,那么你必须在.env里面定义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 

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

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

检查这个线程在laracasts或这个博客文章的更多细节


如果你正在获取

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

尝试将/app/config/database.php文件中的“host”从“localhost”更改为“127.0.0.1”。 你可以在这里find更多的细节和其他修正。

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

检查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中按照下面。


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

  2. 编辑.env文件

访问您的应用程序的根文件夹

编辑.env文件

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

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

然后按Ctrl + c

 php artisan serve 

将来某个时候 尝试清除你的configuration

 php artisan config:clear. 

closures所有terminal/ CMD窗口,然后重新启动terminal/ CMD,这应该摆脱错误消息。 看看它是否有效。

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

然后写完bdconfiguration,你就可以删除这些configurationvariables了,所以laravel在/ config下configurationconfiguration,或者在这里设置你的configuration。

我做了第二个,它适用于我:)

得到它了! 以root用户身份login并授予homestead @ localhost所有权。

从您的terminal:

 $ 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 

现在,家庭普通用户可以访问所有的表格,因此应该能够运行诸如迁移之类的东西。

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

我只是想发布这个,因为这个问题让我感到沮丧,今天约3个小时。 我还没有尝试其他答案中列出的任何方法,虽然他们都似乎合理。 事实上,我正要试着通过上面提到的每个解决scheme,但不知何故,我得到了这样的灵感。 这是什么让我回到工作 – YMMV:

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

祝你好运!

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

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

login到MYSQL – 使用mysql数据库。

从用户中select*

确保您的HOST列是正确的。 它应该是您连接的主机(您的应用程序服务器)是IP地址或DNS名称。 另外'%'将起作用(意味着通配符),但不会安全。

我find解决办法

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

  2. 然后重新启动你的Apache服务器/ Web服务器。 刷新你的页面,你完成了

  3. 如果仍然问题尝试运行下面的命令来清除旧的configurationcaching文件。

这为我工作gl …

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

我有使用SQLite相同的问题。 我的问题是,DB_DATABASE指向错误的文件位置。

使用touch命令创buildsqlite文件并使用php artisan修补程序输出文件path。

 $ 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" 

然后将确切的path输出到DB_DATABASEvariables。

 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 

没有正确的path,你会得到访问被拒绝的错误

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

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

这应该可以解决它

Interesting Posts