在 Ubuntu 上 MySQL 登录失败是很常见的问题,原因有很多种。下面我按最常见原因 → 排查方法 → 解决办法给你系统梳理一下。
Ubuntu 上 MySQL 默认使用 Unix socket 登录:
mysql -u root
而不是:
mysql -h 127.0.0.1 -u root -p
❌ 错误示例:
mysql -u root -p
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
✅ 正确方式(Ubuntu 默认):
sudo mysql -u root
auth_socket 插件(最常见)Ubuntu 安装 MySQL 后,root 默认 不能用密码登录,只能用系统用户登录。
查看:
SELECT user, host, plugin FROM mysql.user;
如果看到:
root | localhost | auth_socket
✅ 解决方式一(推荐):
sudo mysql -u root
✅ 解决方式二(改为密码登录):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
FLUSH PRIVILEGES;
如果提示:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
✅ 重置 root 密码:
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &
然后:
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
systemctl status mysql
如果没运行:
sudo systemctl start mysql
例如:
Access denied for user 'root'@'127.0.0.1'
说明 root@127.0.0.1 不存在,只有 root@localhost
✅ 解决:
CREATE USER 'root'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
查看:
cat /etc/mysql/my.cnf
cat /etc/mysql/mysql.conf.d/mysqld.cnf
确认:
bind-address = 127.0.0.1
port = 3306
请依次检查:
sudo mysql -u root 能否登录?systemctl status mysqlSELECT user,host,plugin FROM mysql.user;-h 127.0.0.1 导致 socket 登录失败你可以把完整报错信息发给我,例如:
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
或者:
mysql -u root -p
的输出,我可以直接帮你精准定位。