我在 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