您可能会在Windows上使用XAMPP在Windows上运行MySQL Server。您还拥有WSL2,并希望从WSL2访问您的应用程序。你做什么?
我假设您已经运行XAMPP,并且已经开始使用Apache,并且您还创建了一个要访问的表。好。
您也有一个Laravel应用程序,并且您正在运行问题:
$ php artisan migrate
您遇到的错误:
$ Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel_survey and table_name = migrations and table_type = 'BASE TABLE')
这意味着,当您从远程系统连接(WSL2是远程系统)时,您需要创建具有从WSL2访问的用户,并允许从WSL2进行连接。您可以从此reddit post.
获得更多详细信息接下来,您必须检查WSL2计算机上是否有SQL客户端。该客户端与SQL Server不同。客户端是您将使用Windows上SQL Server连接到SQL Server的方法。
尝试以下任何命令。第二个命令对我有用,我在Ubuntu盒子上。 source
$ sudo apt install mysql-client-core-8.0 # version 8.0.27-0ubuntu0.20.04.1, or
$ sudo apt install mariadb-client-core-10.3 # version 1:10.3.31-0ubuntu0.20.04.1
_make确保如果您在Laravel应用程序上运行,也安装了SQL驱动程序。运行:
$ sudo apt-get install php7.4-mysql
_
接下来,进入phpmyadmin,找到您创建的表格,然后单击它。在屏幕顶部的菜单中导航到特权。使用 root 查找所有用户名,然后单击编辑特权。在全球特权上打勾并单击GO。
现在,使用Windows CMD或Shell从XAMPP中使用Windows CMD或Shell直接连接到MySQL数据库,然后直接输入某些SQL代码。
$ mysql -u root -p -h 127.0.0.1
然后在:
中键入此命令> CREATE USER 'root'@'%' IDENTIFIED BY 'root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
正如我上面写的那样,命令所做的是,创建一个从WSL2访问的用户,并允许从WSL2或任何远程系统中进行连接,并且您可能会告诉您,由于您授予所有特权,因此可能构成安全风险。
接下来,在WSL2上,运行:
$ mysql -u root -p -h "$(hostname).local"
通过点击输入来跳过密码提示。
恭喜,您已连接到WSL2的Windows主机上的MySQL数据库。
现在,要使Laravel应用程序能够运行迁移,您需要进入 .env 文件并编辑SQL部分,但是在此之前,运行:
$ echo $(hostname).local
并复制或注意结果。
接下来,编辑 .env 文件的MySQL部分:
DB_CONNECTION=mysql
DB_HOST=DESKTOP-BB111.local #this should be the result of the last command above and should end with .local
DB_PORT=3306
DB_DATABASE=laravel_counter #this is the name of the database you created and as seen on your PhpMyAdmin
DB_USERNAME=root
DB_PASSWORD= #leave this empty
保存该文件并返回您的终端并运行:
php artisan migrate
观察您的迁移加载并微笑。
您已成功将WSL2框连接到Windows主机上运行的服务。现在,如果您不介意,请稍微奖励自己。欢呼。
显然,从Windows连接到WSL2服务要容易得多,并且由于端口转发而设置。
我希望这篇文章能以某种方式帮助您。谢谢您的阅读。