![](/img/trans.png)
[英]Laravel Homestead SQLSTATE[HY000] [2002] Connection refused after server move
[英]SQLSTATE[HY000] [2002] Connection refused within Laravel homestead
使用 Mac OS X 和 Homestead 2.2.1 和 Laravel 5.2。
在终端(在我的项目文件夹中的宅基地内)我可以执行 php artisan 来查看所有可用的命令。 当我尝试运行 php artisan migrate 时,出现连接错误:
SQLSTATE[HY000] [2002] Connection refused
我已经使用这些.env设置设置了一个 Laravel 项目
DB_HOST=127.0.0.1
DB_DATABASE=tcv
DB_USERNAME=homestead
DB_PASSWORD=secret
我还为 DB_HOST 尝试了localhost ,为 DB_USERNAME 和 DB_PASSWORD 尝试了root 。 并将这些的所有可能变化放在一起!
在 Sequel Pro(数据库管理应用程序)中,我可以使用这些设置进行连接
Host 127.0.0.1
Username homestead
Password secret
Database tcv
Port 33060
但是这个数据库显然是空的,因为我不能从终端迁移到它...
据我所知,这是一个配置问题,因为我可以使用 Sequel Pro 连接到它。 但老实说,我不知道什么是设置错误。
谢谢您的帮助 !!
编辑
由于某种原因,在将我的项目移动到 MAMP 并运行 php artisan migrate 时,我得到了相同的SQLSTATE[HY000] [2002] Connection refused
错误。
现在我完全迷失了......
我刚刚遇到这个问题,发现将.env文件中的这个从127.0.0.1
更改为localhost
修复了它。
DB_HOST=localhost
问题
在 Laravel 中,您有config/database.php
,所有连接设置都位于其中。 您的项目的根目录中还有一个.env
文件(每个人都使用它来节省时间)。 这包含可用于整个项目的变量。
在标准 L5 项目中, config/database.php
的 MySql 部分如下所示:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
注意没有设置端口!
虽然在我的.env
文件中我设置DB_PORT=33060
。 但是该value (3306)
从未读入config/database.php
。
所以不要像我一样笨,忘记检查database.php
文件。
'port' => env('DB_PORT', 3306),
添加到您的 config/database.php 并在 .env 中设置该值,如下所示DB_PORT=3306
如果您在 Mac OS 上使用 MAMP,则将以下行添加到您的 mysql 数据库配置文件中
'unix_socket' => env('DB_SOCKET', ''),
并在您的 .env 文件中添加
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
使用localhost
而不是127.0.0.1
(在您的.env文件中),然后运行命令:
php artisan config:cache
问题解决了
我遇到了同样的问题,只需将 .env 文件中的 DB_HOST 常量从127.0.0.1
转换为localhost *JUST DO THIS AS GIVEN IN THE BELOW LINE* DB_HOST = localhost
。
无需将任何内容更改为config/database.php
别忘了跑
php artisan config:clear
其他有问题的人的另一种解决方案。 我的所有设置都是正确的,但由于某种原因我的更改没有更新。 Laravel 实际上缓存了配置文件(我觉得这很愚蠢)。
这是我更新配置后的解决方案:
php artisan config:clear
如果您的后端和数据库在 docker 上启动
而不是将 localhost 或 127.0.0.1 作为 DB_HOST 将指示您的数据库服务的已注册服务的名称放在 docker-compose 文件中。
例如,在我的情况下,我将 127.0.0.1 替换为 db,因为在我的 docker-compose 文件中,我已将数据库的服务名称定义为 db
我的 docker-compose 看起来像这样
services:
db: <------ This is the name of the DB_HOST
container_name: admin_db
image:mysql:5.7.22
.
.
.
我遇到了这个问题。 与 Sequel Pro 连接时,我需要使用33060
作为端口,但在.env文件中它必须是3306
。 我在33060
文件中有33060 。 将其更改为3306
并且可以正常工作。
这是一个简单的修复。 您的 mysql 数据库已失去与服务器的连接。 如果您正在运行本地服务器,请在终端中运行:
mysqld
这将重新连接您的数据库。 然后(如果您使用的是自制软件)运行:
brew services start mysql
这将在登录时自动连接您的数据库。
就我而言,我在使用 docker 时遇到了同样的错误,诀窍是在.env
文件中设置这个DB_HOST=db
其中 db 是运行数据库服务器的容器的名称。
我有同样的问题,试试这个作品
DB_HOST=localhost
有可能是你的mysql
没有启动或者不在3306
端口
就我而言,这个错误突然出现。 在盯着我意识到的那个神秘错误时,我试图在 vm 之外运行命令......
将所有配置放在.env文件上后,如果您已经运行php artisan serve
,请重新启动它。
对我来说,将凭据括在引号中就可以了
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE='zzz'
DB_USERNAME='yyy'
DB_PASSWORD='XXX'
当 Laravel 连接到Homestad盒子上的 mysql 并在本地环境中运行命令时:
DB_HOST=127.0.0.1
该应用程序需要DB_PORT=3306
迁移需要DB_PORT=33060
否则会Connection refused
phpunit 需要DB_PORT=33060
否则会Connection refused
DB_HOST=localhost
该应用程序适用于DB_PORT=3306
或DB_PORT=33060
迁移无法运行
phpunit 无法运行
请记住,phpunit 从.env.testing
文件(如果存在)中获取其值,否则从应用程序根文件夹上的phpunit.xml
文件中获取
我,我正在使用 vagrant,但我在盒子外执行 php artisan 所以基本上它没有权限
我可能是因为您可能很久没有重新启动 PHP artisan
所以在进行数据库更改和配置之后:clear Tinker 工作正常
但是要使浏览器反映新的数据库连接,您需要重新运行
php工匠服务
如果它仍然抛出同样的问题,从根文件夹运行
php artisan cache:clear
php artisan config:cache
php artisan serve
如果仍然有问题,请检查您是否使用了多个 sql server 副本,例如通过 Ubuntu 应用程序,如果是,请在 ubuntu 中停止 MySQL 服务器
sudo 服务 MySQL 停止
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=8080
DB_DATABASE=flap_safety
DB_USERNAME=root
DB_PASSWORD=mysql
以上给出的是我的 .env
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'mysql'),
// 'port' => env('DB_PORT', '8080'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', 'mysql'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
上面给出的是我的 database.php 文件。 我刚刚从 database.php 中注释掉了端口,它对我有用。
如果您使用的是Homestead
,那么您应该使用默认的 mysql 端口运行它。 因此,您应该在 .env 文件中使用DB_PORT=3306
而不是使用DB_PORT=33060
。 另外,记得在你的宅基地安装中运行你的php artisan migrate
命令,一切都应该没问题。
希望有帮助。
为我解决的唯一方法是将连接详细信息放在config/database.php而不是.env文件中。 希望这可以帮助
我有一个类似的问题,这里没有任何建议对我有帮助。 这解决了我的问题是将应用程序名称和数据库主机名设置为相同的值。 就我而言, 127.0.0.1 工作正常。
APP_URL=127.0.0.1
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=zzz
DB_USERNAME=yyy
DB_PASSWORD=XXX
好的更新似乎主机不是问题,但实际上是端口。
因此,它实际上是用于浏览器测试的端口3306以及用于终端和 Sequel Pro 33060的端口。 是否与将其添加到 Homestead.yaml 并设置在这里有关?
在阅读与 Laravel 相关的设置时,它说:
MySQL: 33060 → 转发到3306
我遇到
SQLSTATE[HY000] [2002] 连接被拒绝 (SQL: select * from projects)
原因是我没有启动 MySQL 服务器。
作为排除错误的第一步,检查 MySQL 是否正在运行可能会有所帮助。
我发现我的服务器只需要重新启动并且“bam”它就被修复了。
如果你像我一样使用 Homestead,例如,在运行artisan test之前不要忘记 ssh 进入它。
我认为它甚至不会读取 config/database.php。 一旦将我的条目编辑到 .env 文件中,它就开始工作了。
尝试使用不同的端口 IP?
127.0.0.1 33060
192.168.10.10 3306 或 33060 及其工作
家园 v12
万一这对将来的某人有帮助...我必须使用 WSL 运行工匠命令等,但 MySQL 存在于我的 Windows 环境中。 我为正确的术语而苦恼,但我的大脑说“我不在乎你是否认为你是一个虚拟机,你在我面前是非常真实的,所以当我说连接到自己时,我希望你这样做所以。”
如果我理解正确,PHP 正在神奇的 WSL-land 中执行命令,因此它需要与 WSL-land 相关的数据库 IP。
从命令提示符(Windows,不在 WSL 中)我运行ipconfig
来查找我的 IPv4 并将其用于我的 Laravel DB_HOST。 现在,当我在 WSL 中迁移时,它可以工作。
我意识到这太罗嗦了,但我个人对所有虚拟机的东西都感到很困惑,所以我给出了我希望几周前找到的答案。
希望我永远不会回到 Windows。
如果您有任何类型的proxy
或vpn
,请关闭它们并关闭它们。 这是我的问题。
在 ubuntu/linux 上,您可以尝试使用以下命令重新启动 mysql: sudo service mysql restart
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.