我在使用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
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,
]
如何避免此类错误?
我试过了:
在 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
尝试指定环境
php artisan migrate --env=local
通过运行
检查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
这意味着它正在运行。
检查MySQL UNIX套接字(此步骤适用于我)
答案 0 :(得分:229)
用户'homestead'@'localhost'laravel 5错误的访问被拒绝的原因是.env.php文件的缓存问题导致Laravel 5在你的.env中使用基于环境的配置文件。
<强> 1 即可。转到你的应用程序根目录并打开.env文件(在ubuntu中它可能是隐藏的,所以按 ctrl + h 显示隐藏文件&amp;如果你在终端然后输入:ls -a
显示隐藏文件)并更改数据库配置设置。然后保存.env文件
DB_HOST=localhost
DB_DATABASE=laravelu
DB_USERNAME=root
DB_PASSWORD=''
<强> 2 即可。然后重启你的apache服务器/ web服务器。并刷新你的页面,你已经完成了
第3 即可。如果仍然出现问题,请尝试运行以下命令以清除旧的配置缓存文件。
php artisan config:clear
现在你已经完成了错误
答案 1 :(得分:58)
TLDR:您需要停止服务器 Ctrl + c 并使用php artisan serve
重新开始
如果您使用的是Laravel,并且已经php artisan serve
在上面的服务器已经运行之后,你在.env文件中更改了与数据库服务器相关的东西。就像从MySQL迁移到SQLite之类的东西。您需要确保停止上述过程,即Ctrcl C
或任何停止该过程的过程。然后重新启动Artisan Serve,即y php artisan serve
并刷新浏览器,您的问题将与数据库相关。这对Laravel 5.3来说非常有用
答案 2 :(得分:31)
解决问题的两种方法
第一种方式(不推荐)
打开数据库配置文件(laravel_root / config / database.php)&amp;搜索下面的代码块。
'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
现在它可以正常工作。
答案 3 :(得分:21)
如果您使用的是PHP的默认Web服务器(例如php artisan serve
),则需要在更改.env文件值后重新启动服务器。
答案 4 :(得分:19)
如果您使用php artisan migrate
NOT来自流浪汉但不是来自主机,那么您必须在.env
框内192.168.10.10
显然从你的ip设置了对宅基地用户的许可
之类的东西grant all privileges on *.* to 'homestead'@% identified by 'secret';
<{1>}文件中的
.env
答案 5 :(得分:10)
安装Homestead时,会创建默认的“宅基地” VM中的数据库。您应该SSH到VM
homestead ssh
并运行 你从那里迁移。如果您在本地没有VM工作, 您需要手动创建数据库。默认情况下,数据库 应该叫做宅基地,用户名是宅基地和密码 是秘密。
查看此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。
答案 6 :(得分:10)
我遇到了同样的问题,最后我发现我只需要重新启动服务器并重新启动
Ctrl + c 然后
php artisan serve
答案 7 :(得分:9)
答案 8 :(得分:8)
使用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
答案 9 :(得分:8)
退出/关闭“ php artisan serve”命令和
重新运行命令“ php artisan serve”命令。
答案 10 :(得分:7)
将来的某个时间。尝试先清除配置
php artisan config:clear.
关闭所有终端/ cmd窗口,然后重新启动终端/ CMD,这应该摆脱错误消息。看看它是否有效。
答案 11 :(得分:5)
知道了!以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
现在,家庭常规用户可以访问您的所有表格,因此应该可以运行迁移等操作。
答案 12 :(得分:5)
我使用了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下的配置或在这里设置你的配置。
我做了第二次,它适用于我:)
答案 13 :(得分:5)
在配置数据库重启后:
php artisan serve
如果服务在设置数据库配置之前处于活动状态。
答案 14 :(得分:5)
使用新配置更改.env后,您必须停止服务器并再次运行它(php artisan serve)。 laravel在初始化服务器时获取环境的原因。如果你没有重新启动,你将改变.env,问自己为什么没有发生变化!!
答案 15 :(得分:4)
您要做的就是更改您的 .env 文件。
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
在DB_DATABASE前面,输入数据库名称,在DB_USERNAME前面,使用 root 。
答案 16 :(得分:3)
您必须在Homestead内运行$ php artisan migrate
命令,而不是Mac。
答案 17 :(得分:3)
我找到了解决方案
转到您的应用程序根目录并打开.env文件(在ubuntu中可能已隐藏,因此请按ctrl + h显示隐藏文件)并更改数据库配置设置。然后保存.env文件
然后重启您的Apache服务器/ Web服务器。并刷新你的页面,你已经完成了
这对我来说很有用......
答案 18 :(得分:3)
检查您的&#34; .env &#34;根文件夹中的文件。这是对的吗?
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
答案 19 :(得分:3)
我只是想发布这个,因为这个问题让我今天大约3个小时感到沮丧。我没有尝试过其他答案中列出的任何方法,尽管它们看起来都很合理。事实上,我正准备尝试完成上面提出的每个解决方案,但不知怎的,我得到了这种灵感。以下是让我重新开始工作的原因 - YMMV:
1)找到你的.env文件。 2)将.env文件重命名为其他内容。 Laravel 5必须使用此文件作为框架中其他位置的设置的覆盖。我将我改名为.env.old 3)您可能需要重新启动Web服务器,但我没有。
祝你好运!答案 20 :(得分:2)
在我的情况下(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
答案 21 :(得分:1)
检查你的.env文件,如果你已经编辑了任何变量,请重新启动laravel服务器,你的问题就会解决
答案 22 :(得分:1)
一个。用数据库设置更新.env文件后,通过“运行php artisan config:clear”清除幼虫设置
B中。请确保重新启动Apache服务器/重新运行“php artisan serve”命令以使设置生效。
答案 23 :(得分:1)
登录MYSQL - 使用mysql数据库。
从用户中选择*;
确保您的HOST列正确无误。它应该是您从(您的应用程序服务器)连接的主机,无论是IP地址还是DNS名称。还有&#39;%&#39;将起作用(意为通配符)但不安全。
答案 24 :(得分:1)
只需在根文件夹的.env文件中更改这些内容即可。
DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'
对我有用。
答案 25 :(得分:0)
如果您返回PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'
之类的错误,则会导致您将batabase配置更改为DB_DATABASE=laravelu
。所以现在你要么:
DB_DATABASE=
[yourdatabase]
或 laravelu
的数据库
醇>
这应该能够解决它
答案 26 :(得分:0)
我使用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
如果没有正确的路径,您将收到拒绝访问错误
答案 27 :(得分:0)
在我的情况下,错误是由我忘记了的Homestead / Vagrant配置“引起”的:)试图仅从命令行运行迁移。
如果使用Homestead Vagrant Box环境,则应在Homestead机器内运行迁移(使用ssh连接到它之后:vagrant@192.168.10.10:22
),然后访问权限就可以了,并且可以运行迁移。
答案 28 :(得分:0)
从您的问题来看,您似乎正在奔跑。在这种情况下,请确保在VM中运行命令。包括我在内的许多开发人员经常在VM之外出错并运行artisan命令,这些命令将尝试连接到可通过localhost访问的本地数据库,该本地数据库与homestead使用的数据库不同。将CD复制到您的Homestead目录并运行
vagrant ssh
然后将cd插入代码(如果您在其中保留项目,然后将cd插入项目并运行php artisan migrate again
)
我希望这会对其他人有所帮助。
答案 29 :(得分:0)
我的应用已设置为使用 .env.local
。我一直在检查 .env
。
如果有多个文件,请检查您是否正在编辑正确的 .env
文件。