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

Laravel执行php artisan migrate出现SQLSTATE[HY000] [2002]连接错误

问题解决步骤

问题根因说明

你遇到的两类报错+root用户无需密码即可登录的异常,核心来自两个配置问题:

  1. MariaDB默认开启root用户的unix_socket身份认证,仅允许本地系统root用户通过套接字免密登录,不支持密码验证的TCP连接
  2. MariaDB服务端监听配置、PHP的MySQL套接字路径不匹配,导致TCP/UNIX连接分别报错

分步解决方法

1. 确认MariaDB服务监听状态

执行以下命令查看3306端口监听情况:

netstat -tulpn | grep 3306

如果输出中没有127.0.0.1:3306的监听记录,编辑MariaDB配置文件(通常路径为/etc/mysql/mariadb.conf.d/50-server.cnf或/etc/my.cnf),找到bind-address配置项修改为:

bind-address = 127.0.0.1

修改完成后重启服务生效:

sudo systemctl restart mariadb

2. 修复root用户身份认证规则

直接使用系统权限登录MariaDB:

sudo mysql -u root

执行SQL查看当前root用户的认证方式:

SELECT user, host, plugin FROM mysql.user WHERE user='root';

如果plugin字段值为unix_socket/auth_socket,执行以下命令修改为密码认证,并设置实际登录密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的实际数据库密码';
FLUSH PRIVILEGES;
EXIT;

修改完成后验证登录逻辑是否正常:

  • 执行mysql -u root -p错误密码会提示拒绝访问
  • 执行mysql -u root -p你设置的正确密码可正常登录,说明认证规则修复完成

3. 提前创建目标数据库

Laravel迁移不会自动创建数据库,登录MariaDB后执行SQL建库:

CREATE DATABASE IF NOT EXISTS liberty_comerce DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;

4. 修正Laravel .env配置

方案A:使用TCP连接(推荐,兼容性更好)

修改.env数据库配置如下:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=liberty_comerce
DB_USERNAME=root
DB_PASSWORD=你刚才设置的实际数据库密码

无需额外配置套接字参数。

方案B:使用UNIX套接字连接

如果要保留DB_HOST=localhost,需要先查询MariaDB的套接字实际路径:

mysql_config --socket

将返回的路径(通常为/run/mysqld/mysqld.sock)添加到.env配置中:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=liberty_comerce
DB_USERNAME=root
DB_PASSWORD=你刚才设置的实际数据库密码
DB_SOCKET=你查询到的套接字路径

5. 清理Laravel配置缓存

注意修改.env后不要先执行config:cache,会固化旧配置,正确执行顺序:

php artisan config:clear
php artisan cache:clear

确认配置生效后可执行php artisan config:cache生成生产环境缓存。

6. 测试迁移

执行迁移命令验证连接:

php artisan migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:36:04