MySQL root用户无法密码登录
在Ubuntu下安装了 MySQL 8, 未设置密码,root 用户下直接 mysql 命令就能登录
# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.45-0ubuntu0.24.04.1 (Ubuntu) Copyright (c) 2000, 2026, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
当用MySQL客户端进行SSH连接却无法登录
Access denied for user 'root'@'localhost'
这个错误表示系统拒绝了用户 root 从本地(localhost)发起的连接。如果是密码错误会提示
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES/NO)。
尝试修改了 root 用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
依然无法登录,提示一样的错误信息,并且在命令行下,root用户直接打mysql或mysql -p 输入错误的密码都能登录
这是 MySQL 8 的 root 用户在 Linux 上默认用 auth_socket 方式登录, auth_socket 认证插件会忽略密码。
所以即使你执行了:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
仍然可以 不用密码登录。
| 插件 | 是否用密码 |
|---|---|
auth_socket | 不使用 |
caching_sha2_password(MySQL 8 默认) | 使用 |
mysql_native_password | 使用 |
如果 root 的 plugin 是:auth_socket
MySQL 会使用 操作系统用户认证:
只要你是 Linux 的 root 用户
就可以直接登录 MySQL
例如:
sudo mysql
或者:
mysql -u root
MySQL 会检查:
当前系统用户 == root
如果是,就允许登录。
因此:
密码完全不会被使用
查看当前认证方式
执行:
SELECT user,host,plugin FROM mysql.user;
如果看到:
root localhost auth_socket
说明 root 是 socket 登录。
想让 root 使用密码登录
必须 修改认证插件:
ALTER USER 'root'@'localhost'
IDENTIFIED WITH caching_sha2_password
BY 'NewPassword123!';
或者兼容旧程序:(老版本PHP,老数据库驱动,老 CMS)
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'NewPassword123!';
然后:
FLUSH PRIVILEGES;
为什么 Ubuntu 默认用 auth_socket
优点:
更安全
root 只能本机登录
防止远程爆破
生产服务器推荐:
root@localhost auth_socket
日常管理:
sudo mysql
再给其他应用创建用户:
CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;