我在Windows 10上运行mysqld,如何从WSL连接到其端口

时间:2019-04-25 08:09:43

标签: mysql sockets xampp windows-subsystem-for-linux

mysql(出于充分的理由)在XAMPP mysql服务器位于“ localhost”时会非常努力地尝试连接到套接字文件。但是,由于Win64 mysqld当然不会在Windows子系统(用于Linux的文件系统)中删除套接字文件,因此它无法通过套接字文件进行连接。如何强制它使用端口?

$ mysql --port=3306 -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directo
ry")

Nmap显示端口3306可访问。

$ nmap localhost -p 3306

Starting Nmap 7.60 ( https://nmap.org ) at 2019-04-25 09:58 DST
Problem binding to interface , errno: 92
socket_bindtodevice: Protocol not available
Problem binding to interface , errno: 92
socket_bindtodevice: Protocol not available
Problem binding to interface , errno: 92
socket_bindtodevice: Protocol not available
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0019s latency).

PORT     STATE SERVICE
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

如果不需要,我不想将mysqld绑定到我的外部网络。

我如何告诉mysql软件,“我知道您的想法,但是请使用端口3306,而不要使用套接字”?最好我也想知道如何将同样的信息告诉PHP。

1 个答案:

答案 0 :(得分:0)

已解决,您需要添加var duration = TimeSpan.FromSeconds(1); Vibration.Vibrate(duration); 。示例:

--protocol=TCP

现在这只是我这方面的用户/密码问题。

一旦确定了设置$ mysql --protocol=TCP -p Enter password: ERROR 1045 (28000): Access denied for user 'henk'@'localhost' (using password: YES) /etc/mysql/mariadb.conf.d/50-client.cnf的设置,我将对其进行编辑。

编辑:

/etc/php/7.2/cli/php.ini,在sudo vim /etc/mysql/mariadb.conf.d/50-client.cnf下,用[client]注释掉套接字行,并添加一行内容为#的行。该文件的路径可能与实际的Oracle MySQL安装(而不是MariaDB)不同。

protocol = TCP

如果您连接到127.0.0.1而不是localhost,则PHP的pdo_mysql / mysqli / mysqlnd将使用TCP协议,这可以在localhost套接字文件/命名管道启发式方法中解决。