You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2上Laravel执行php artisan migrate遇SQLSTATE[HY000] [2002]连接拒绝问题

Laravel迁移命令数据库连接失败的解决方案

问题场景

在EC2实例上运行Laravel 8.83.23,应用本身运行正常,但通过EC2 Instance Connect连接实例后执行php artisan migrate:status时,出现SQLSTATE[HY000] [2002] Connection refused错误。将.env文件中DB_HOST从127.0.0.1改为localhost时,出现file not found错误,确认.env文件已生效,且已尝试清除artisan缓存。

提供的.env文件内容(注意:文件存在重复配置块)

APP_NAME=Laravel
APP_ENV=production
APP_KEY=<key>
APP_DEBUG=true
APP_URL=https://<url>/

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=rent
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
# 以下配置块完全重复,建议删除
APP_NAME=Laravel
APP_ENV=production
APP_KEY=<key>
APP_DEBUG=true
APP_URL=https://<url>/

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=rent
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

解决方案步骤

1. 检查MySQL服务状态

确认EC2上的MySQL服务是否正在运行:

sudo systemctl status mysqld
# 针对MariaDB用以下命令
sudo systemctl status mariadb

如果服务未启动,执行启动命令并设置开机自启:

sudo systemctl start mysqld
sudo systemctl enable mysqld

2. 验证MySQL端口监听

确认MySQL正在监听3306端口:

netstat -tuln | grep 3306
# 或用ss命令
ss -tuln | grep 3306

如果输出中没有127.0.0.1:3306或:::3306,说明MySQL未绑定本地端口,需要修改MySQL配置文件(通常是/etc/my.cnf或/etc/mysql/my.cnf):

  • 找到bind-address配置项,设置为127.0.0.1
  • 注释掉skip-networking(如果存在)
    修改后重启MySQL服务:
sudo systemctl restart mysqld

3. 修复.env文件重复配置

你的.env文件存在完全重复的配置块,这可能导致Laravel读取配置异常,必须删除重复的前半部分配置,保留完整的一份即可。

4. 配置MySQL Socket文件(解决localhost连接报错)

当DB_HOST设为localhost时,Laravel会尝试通过socket文件连接,而非TCP端口。出现file not found说明socket路径不正确:

  • 查找MySQL socket文件位置:
mysql -uroot -p -e "show variables like 'socket'"
  • 在.env文件中添加DB_SOCKET配置,指向找到的路径,例如:
DB_SOCKET=/var/lib/mysql/mysql.sock

5. 验证数据库用户权限

确认root用户可本地访问rent数据库:

mysql -uroot -p rent

如果无法登录,为root用户授予本地访问权限:

GRANT ALL PRIVILEGES ON rent.* TO 'root'@'localhost' IDENTIFIED BY '';
FLUSH PRIVILEGES;

(root密码为空,执行时直接按回车即可)

6. 清除缓存并测试

完成上述操作后,重新清除Laravel缓存:

php artisan config:clear
php artisan cache:clear

再次执行迁移状态命令:

php artisan migrate:status

内容的提问来源于stack exchange,提问作者Smalltalkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:20:24