无法连接localhost:3306上的MySQL服务,重装后仍未解决怎么办?
问题根因定位
- 第一个配置错误:
bind-address是MySQL服务端参数,需要写在[mysqld]配置段下,你当前把它写在[mysql](客户端配置段)里,服务端完全不会读取该配置,导致mysqld仅监听unix套接字,没有开启3306 TCP端口监听 - 第二个配置错误:
[client]段下强制设置了protocol = tcp,所有本地mysql客户端连接都会强制走TCP协议,不会使用默认的unix套接字,自然连接不上未监听TCP端口的服务端 - 你执行
mysqld --skip-grant-tables启动时,依旧读取错误的配置,不会开启TCP监听,所以客户端走TCP连接直接报错111拒绝连接
修复步骤
- 首先修改mysql.cnf配置,修正配置段归属:
[mysqld] bind-address = 127.0.0.1 [client] # 临时注释该行,允许客户端优先使用unix套接字连接,后续可根据需要再开启 # protocol = tcp
- 杀死所有残留的mysql进程:
sudo pkill -9 mysqld
- 正常启动mysql服务:
sudo systemctl start mysql
- 测试连接,Ubuntu下MySQL 8.0默认root用户使用auth_socket认证,本地直接用sudo即可无密码登录:
sudo mysql -u root
- 登录后可根据需要修改root密码为普通密码登录模式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; FLUSH PRIVILEGES;
- 后续如果需要强制客户端走TCP连接,再把
[client]段的protocol = tcp注释取消即可,此时服务端已经正常监听127.0.0.1的3306端口,不会再出现连接报错。
内容的提问来源于stack exchange,提问作者Myuser03
相关产品推荐
相关产品推荐

