访问拒绝用户'宅地'@'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
将localhost
replace为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
启动了本地dev服务器
在上面的服务器已经运行之后,在.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中按照下面。
-
访问您的应用程序的根文件夹。
-
编辑.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解决办法
-
转到您的应用程序根目录并在您的编辑器中打开.env文件(在ubuntu中可能是隐藏的,所以请按Ctrl + h显示隐藏的文件)并更改数据库configuration设置。 然后保存您的.env文件
-
然后重新启动你的Apache服务器/ Web服务器。 刷新你的页面,你完成了
- 如果仍然问题尝试运行下面的命令来清除旧的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
。 所以现在你要么:
- 更改
DB_DATABASE=
[yourdatabase]
或 - 在phpmyadmin中创build一个名为
laravelu
的数据库
这应该可以解决它