Windows11+WSL+XAMPP环境下Laravel迁移遇数据库连接错误求助
我来帮你分析解决这个问题哈!你现在是Windows11搭配WSL、用XAMPP跑MySQL的环境,执行Laravel迁移时数据库连不上,试了127.0.0.1和localhost都踩坑了,对吧?先给你还原下你的操作和报错情况:
你的操作与报错细节
- 初始配置
DB_HOST=127.0.0.1,执行php artisan migrate后报错:SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select table_name as
name, (data_length + index_length) assize, table_comment ascomment, engine asengine, table_collation ascollationfrom information_schema.tables where table_schema = 'intsys' and table_type in ('BASE TABLE', 'SYSTEM VERSIONED') order by table_name) - 改成
DB_HOST=localhost后,执行迁移又报错:SQLSTATE[HY000] [2002] No such file or directory (Connection: mysql, SQL: select table_name as
name, (data_length + index_length) assize, table_comment ascomment, engine asengine, table_collation ascollationfrom information_schema.tables...)
问题核心原因
WSL和Windows是两个相对独立的系统环境:
- WSL里的
127.0.0.1是WSL自身的环回地址,而你的MySQL是跑在Windows系统上的XAMPP里,所以WSL直接用127.0.0.1根本访问不到Windows上的MySQL服务; - 换成
localhost时,WSL默认会尝试通过Unix socket文件连接MySQL,但XAMPP的MySQL并没有部署在WSL里,自然找不到对应的socket文件,所以报“无此文件或目录”。
具体解决步骤
- 获取Windows的本地内网IP
打开Windows自带的命令提示符(cmd),输入ipconfig,找到「以太网适配器 WSL」对应的IPv4地址(格式一般是192.168.x.x),把这个IP记下来。 - 修改Laravel的数据库配置
打开项目根目录的.env文件,把DB_HOST改成刚才查到的Windows内网IP,其他配置保持不变:DB_CONNECTION=mysql DB_HOST=192.168.1.100 # 这里替换成你查到的实际IP DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD= - 配置XAMPP的MySQL允许远程连接
打开XAMPP控制面板,点击MySQL模块的「Config」按钮,选择「my.ini」打开配置文件,找到bind-address这一行,把它修改为:
保存后,重启XAMPP里的MySQL服务。bind-address=0.0.0.0 - 给MySQL的root用户授权远程访问
在XAMPP控制面板里点击MySQL的「Shell」按钮,打开MySQL命令行终端,执行以下SQL命令:
这里的GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ''; FLUSH PRIVILEGES;%表示允许任何IP的root用户访问,因为你的root密码为空,所以IDENTIFIED BY后面是空字符串。 - 检查Windows防火墙设置
确保Windows防火墙允许3306端口的入站连接,或者可以临时关闭防火墙测试连接(测试正常后建议重新配置防火墙规则,只允许WSL的IP访问3306端口更安全)。
完成以上步骤后,回到WSL的终端里重新执行php artisan migrate,应该就能正常连接到Windows上的MySQL并完成迁移了!
备注:内容来源于stack exchange,提问作者IrinaB




