WSL:无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器

13

我正在尝试在Windows Subsystem for Linux (Ubuntu)上使用全新安装的MySQL,但似乎无法连接。我一直收到以下错误:

WSL:无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器

我已经尝试过:

  • 将配置更改为使用localhost而不是套接字(然后我得到了一个错误,说我不能通过localhost连接)
  • 通过编辑并重启/etc/mysql/mysql.conf.d/mysqld.cnf来使用--skip-grant-tables

/var/run/mysqld/mysqld.sock文件也从未显示,虽然我认为这是因为WSL始终无法完美支持套接字,但它仍应该工作。我怀疑问题可能特定于WSL,也许我应该尝试更新到WSL2?我不知道问题可能是什么。

6个回答

26

我通过以下步骤解决了相同的问题。

将以下行放置在文件/etc/mysql/my.cnf的末尾:

[mysqld]                                                                                                                
bind-address = 0.0.0.0                                                                                                    
user=root                                                                                                               
pid-file     = /var/run/mysqld/mysqld.pid                                                                                
socket       = /var/run/mysqld/mysqld.sock                                                                               
port         = 3306                                                                                                                                                                                                                              

[client]                                                                                                                
port         = 3306                                                                                                      
socket       = /var/run/mysqld/mysqld.sock

然后在终端上输入以下命令(注意:如果该目录不存在,请先创建):

chmod 777 -R /var/run/mysqld
chmod 777 -R /var/lib/mysql
chmod 777 -R /var/log/mysql

接下来使用以下命令启动MySQL:

mysqld

然后打开一个新终端并使用以下命令进行连接:

mysql -uroot -pYourPass

1
mysqld:realpath()在'/var/lib/mysql-files'上出错(错误2-没有这样的文件或目录) - stapmoshun
通过添加[client]配置,解决了wsl-socket连接问题“无法通过套接字连接到本地MySQL服务器”。谢谢先生!由于我将mysql-server托管在其他地方,所以不需要做其他操作。 - zeg
1
截至2023年,使用WSL 2并安装了mysql-server后,/etc/mysql/my.cnf似乎已经包含了这些行。对我有效的是对这三个目录进行chmod操作。 - Tyler
对我来说,mysqld命令启动MySQL出了一些问题,所以我只是用sudo mysql来启动。我不知道为什么它不起作用,也许是因为我使用了sudo权限安装。 - undefined

9
我遇到了相同的问题。
按照 Microsoft 提供的步骤操作:在 WSL 中添加或连接数据库
  1. 更新 Ubuntu 包: sudo apt update
  2. 安装 MySQL: sudo apt install mysql-server
  3. 启动 MySQL 服务器: sudo /etc/init.d/mysql start
  4. 启动安全脚本提示: sudo mysql_secure_installation
  5. 打开 MySQL 提示符: sudo mysql

5
3- 抛出错误:"su: warning: cannot change directory to /nonexistent: No such file or directory",然后启动服务器。 - Daniel Saito

3
尽管M. Hamza Rajput的回答可行(已检查),但问题可能仅仅是因为mysql没有运行。因此,请启动mysql服务:
sudo service mysql start

然后您可以调用安全安装。
sudo mysql_secure_installation

3
在WSL2的Ubuntu版本中使用以下方法。
sudo chmod g+rx /var/run/mysqld
sudo usermod -aG mysql $USER

2
我最近不得不安装一个新的WSL2实例,使用的是Ubuntu 22.04版本,以下是我成功的方法。这个方法适用于从零开始安装WSL 2到使mysql -u root正常工作。据我所知,这是获取最新的WSL和mysql工作的最佳和最新方法。我刚刚在WSL2 Ubuntu 22.04.2 LTS和mysql 8.0.34上成功实施了这个方法。
更新Ubuntu,安装mysql,启动mysql服务器:
sudo apt update && sudo apt upgrade
sudo apt install mysql-server
sudo /etc/init.d/mysql start

在这个时候,sudo mysql命令可以让你登录到mysql,但是如果你运行mysql -u root命令,你会遇到WSL: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)错误。
以下是解决sock错误的方法:
sudo chmod 777 -R /var/run/mysqld

然而,当你尝试运行 mysql -u root 时,你会得到 ERROR 1698 (28000): Access denied for user 'root'@'localhost' 的错误。你需要更新mysql的root密码。可以通过进入mysql控制台手动完成这个操作:

sudo mysql

然后在MySQL控制台运行以下命令以更新密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'INSERT_PASSWORD_HERE';
FLUSH PRIVILEGES;

然后,退出mysql控制台后,输入以下内容:
mysql -u root -p

输入你的用户名和密码,你就可以进入mysql控制台了!这样一来,你就可以运行sudo mysql_secure_installation(如果你想的话),而不会出现访问被拒绝或sock错误。

关于sudo mysql也出现访问被拒绝的问题:你可能已经通过尝试另一个帖子上的某个答案搞砸了你的mysql root用户。从技术上讲,通过授权表格可以恢复它,但我花了4个小时尝试,发现重新设置我的WSL实例并按照上面的指南操作比弄清楚如何使其工作更快。由你决定。


0
sudo /etc/init.d/mariadb start 然后 sudo mysql 这对我有效

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接