Instalei o servidor MySQL no Windows e gostaria de me conectar a ele a partir do WSL2. Infelizmente, parece que o WSL não consegue acessar o servidor MySQL:
$ /mnt/c/Program\ Files/MySQL/MySQL\ Server\ 5.7/bin/mysql.exe -uroot -p
Enter password:
mysql> exit
Bye
$ mysql -uroot -p --protocol=TCP
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)
Em ifconfig
Eu só tenho duas interfaces eth0
e lo
, então parece que o WSL e o Windows compartilham a mesma interface local. Para verificar isso, iniciei um servidor da web Python e acessei do Windows em localhost.
Como se conectar ao MySQL do WSL2?
De acordo com a documentação do WSL vs WSL2 sobre como se conectar ao host, você pode procurar no WSL2 em /etc/resolv.conf o servidor de nomes, que por acaso é o host:
Conforme descrito neste artigo , você deve usar o IP que o adaptador ethernet WSL cria.
Crie a regra de firewall do Windows, se necessário. (Regra de entrada para MySQL)
Corra
ipconfig.exe
e procureEthernet-Adapter vEthernet (WSL)
. Extraia o endereço IP. (Se você usar a linha awk do artigo, tive que alterar os $ 14 para $ 13 para funcionar).Conceda acesso ao endereço IP no mysql:
grant all on *.* to 'root'@'172.0.0.0/255.0.0.0' identified by '<password>' with grant option;
(descobri que o endereço IP muda após a reinicialização do Windows, portanto, tive que usar a versão do intervalo/máscara de IP.)Então você pode ligar
mysql -uroot -p -h<ip-address> --protocol=tcp
Editar Se você quiser pular este
-h
parâmetro, você pode adicionar a exportação e um alias para.bashrc
:(Se você usar,
/mnt/c/
corrija o caminho para ipconfig de acordo.)Então você pode simplesmente digitar
mysql -uroot ...
As etapas acima funcionam, mas há uma maneira um pouco mais fácil de se referir ao host.
A partir de 2021, tudo o que você precisa fazer é se referir ao host do Windows como:
ou
Isso retorna o mesmo endereço IP da brilhante solução acima com o arquivo resolve.conf e é um pouco mais fácil.
Observe que localhost de wsl resolve para um IP diferente, o 127.0.0.1 normal
Isso faz sentido, é uma VM, basicamente.
Consequências não intencionais: se você está tentando fazer login, digamos, MariaDB, isso não conta como host local - portanto, você deve ter a configuração de segurança correta para permitir o login de uma máquina remota (a VM contida)