首先我将解释我的设置:我在 WSL(Linux 的 Windows 子系统)中运行 Laravel,并且在 Windows 上有 XAMPP。 我想做的是在 XAMPP 上运行 MySQL 服务并将其与我的 Laravel 项目连接。我已经修改了我的 .env 文件设置 root 密码,并且我已经使用 phpMyAdmin 创建了“laravel”数据库。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=mypassword
通过此设置,我尝试在 WSL 中运行
php artisan migrate
但是我收到了这个错误
SQLSTATE[HY000] [2002] 连接被拒绝
然后我将 DB_HOST 更改为 localhost,这是一个常见的解决方案,但后来我收到了另一个错误。
SQLSTATE[HY000] [2002] 没有这样的文件或目录
现在我不知道还能做什么。我被困住了。任何帮助将不胜感激。
您似乎是在 Windows 下通过 XAMPP 运行 MySQL,而不是在 Linux(Ubuntu?)中。您应该在 WSL2 中运行 MySQL。
看这个—— WSL 堆栈溢出问题
经过大量挖掘,我找到了解决方案。 首先,WSL 不能使用 localhost 与 XAMMP 通信,但它应该使用
$(hostname).local
。您可以通过在 WSL 终端中输入 ping $(hostname).local
进行测试:关键字将被主机名和 IP 替换。
第二点,应用程序将从“外部”地址连接,而不是本地主机。因此,进入 phpMyAdmin 界面,选择 Flask 正在使用的 MySQL 用户,进入“登录信息”并在“主机”部分选择“任何主机:%”。我在这里找到了指南。 请注意,现在该用户可以通过您的网络访问,因此可以选择一个安全密码。
更具体地说,我在 WSL 中运行 python Flask 应用程序时遇到了类似的问题,而 XAMPP 在 Windows 中运行。在应用程序中,我必须更改 SQLALCHEMY_DATABASE_URI 变量以适应不同的本地主机。该变量应如下所示:
export SQLALCHEMY_DATABASE_URI="mysql+pymysql://sql_user:sql_password@$(hostname).local/YOUR_DATABASE"
编辑 2024 年:我在新机器上安装了 WSL 2,但它不再起作用了。它适用于 @$(hostname) 而不是 @$(hostname).local。 这里有关于这个问题的讨论。我还根据此评论安装了libnss-mdns,但我不确定这是必要的。