You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows11+WSL+XAMPP环境下Laravel迁移遇数据库连接错误求助

Windows11+WSL+XAMPP环境下Laravel迁移遇数据库连接错误求助

我来帮你分析解决这个问题哈!你现在是Windows11搭配WSL、用XAMPP跑MySQL的环境,执行Laravel迁移时数据库连不上,试了127.0.0.1localhost都踩坑了,对吧?先给你还原下你的操作和报错情况:

你的操作与报错细节

  • 初始配置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) as size, table_comment as comment, engine as engine, table_collation as collation from 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) as size, table_comment as comment, engine as engine, table_collation as collation from 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文件,所以报“无此文件或目录”。

具体解决步骤

  1. 获取Windows的本地内网IP
    打开Windows自带的命令提示符(cmd),输入ipconfig,找到「以太网适配器 WSL」对应的IPv4地址(格式一般是192.168.x.x),把这个IP记下来。
  2. 修改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=
    
  3. 配置XAMPP的MySQL允许远程连接
    打开XAMPP控制面板,点击MySQL模块的「Config」按钮,选择「my.ini」打开配置文件,找到bind-address这一行,把它修改为:
    bind-address=0.0.0.0
    
    保存后,重启XAMPP里的MySQL服务。
  4. 给MySQL的root用户授权远程访问
    在XAMPP控制面板里点击MySQL的「Shell」按钮,打开MySQL命令行终端,执行以下SQL命令:
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '';
    FLUSH PRIVILEGES;
    
    这里的%表示允许任何IP的root用户访问,因为你的root密码为空,所以IDENTIFIED BY后面是空字符串。
  5. 检查Windows防火墙设置
    确保Windows防火墙允许3306端口的入站连接,或者可以临时关闭防火墙测试连接(测试正常后建议重新配置防火墙规则,只允许WSL的IP访问3306端口更安全)。

完成以上步骤后,回到WSL的终端里重新执行php artisan migrate,应该就能正常连接到Windows上的MySQL并完成迁移了!

备注:内容来源于stack exchange,提问作者IrinaB

火山引擎 最新活动