Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

111 阅读2分钟

我在 Windows10 折腾 WSL2 Ubuntu 22.04.2。安装了 mysql8.0 后,希望给 root 用户设置密码,按照网上的流程一通操作后:

# 以跳过验证的方式打开 mysql
mysqld_safe --skip-grant-tables &

回车后没有进入控制台,胡乱编一些命令也没发现执行效果。于是我按下 Ctrl + C 终止了进程。然后我发现自己再也无法打开 mysql 控制台了!

# 再次尝试打开 mysql 客户端
mysql -u root

# 控制台输出了:
# ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (13)

无奈,我只好重装了一遍 mysql。

# 首先停止 mysql
sudo service mysql stop

# 然后卸载 mysql 软件包
sudo apt-get purge mysql-server mysql-client

# 接着删除 mysql 配置文件及数据
sudo rm -rf /etc/mysql /var/lib/mysql

# 再接着清理残留的文件与目录
sudo apt-get autoremove
sudo apt-get autoclean

# 通过命令发现 mysql 已成功卸载
mysql --version

然后重新安装 mysql。

# 重装
sudo apt-get install mysql-server mysql-client

再次尝试打开客户端,发现仍然报出同样的错误!Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

# 再次尝试打开 mysql 客户端
mysql -u root

在按照网络上的一堆文章再次折腾后,错误依然无法解决。其实问题的本质在于我之前的操作破坏了 mysqld 的权限。针对这个问题,我们应该这么解决:

# 恢复 mysqld 进程的全部权限
sudo chmod 777 -R /var/run/mysqld

# 进入 mysql 客户端。注意哈:这里绝对不能写成 `mysql -u root`,否则控制台会报类似于 `ERROR 1698 (28000): Access denied for user 'root'@'localhost'` 的错误信息,从而无法进入
sudo mysql

# 进入客户端后,为 root 用户更新密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'INSERT_YOUR_PASSWORD_HERE';

# 然后刷新用户的权限
FLUSH PRIVILEGES;

# 退出 mysql 控制台
exit;

这时候再进入客户端,就完全没问题啦!

# 可以使用 root 用户名进入了
mysql -u root -p

从现在开始,我们又可以愉快地修改 mysql 的用户安全设置了。

# 进行新的安全设置
sudo mysql_secure_installation