1. 检查 MySQL 认证方法
- 在 MySQL 5.7 及以上版本中,
root
用户默认可能使用auth_socket
插件而不是密码进行认证。 - 要查看认证方法,可以通过以下命令登录 MySQL:
bash
sudo mysql -uroot -p
然后运行以下查询来查看 root
用户的认证方式:
sql
SELECT user, host, plugin FROM mysql.user WHERE user='root';
如果你看到 auth_socket
插件与 root
用户关联,说明 root
用户使用的是 socket 认证方式。
可以修改认证方式和密码解决,注意,修改了认证方式后密码也要修改
sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
2. 重置密码(如果使用密码认证)
- 如果认证方式是基于密码的,可以通过以下步骤重置
root
用户的密码:
-
停止 MySQL 服务:
bashsudo systemctl stop mysql
-
使用跳过授权表模式启动 MySQL(不进行权限检查):
bashsudo mysqld_safe --skip-grant-tables &
-
登录到 MySQL:
bashmysql -u root
-
更新
root
用户的密码:bashUSE mysql; UPDATE user SET authentication_string=PASSWORD('new_password') WHERE user='root'; FLUSH PRIVILEGES;
-
重新启动 MySQL 服务:
bashsudo systemctl start mysql
-
尝试使用新密码登录:
bashmysql -u root -p
3. 检查用户权限
- 如果
root
用户的权限被限制,可以使用以下命令检查用户权限并进行适当调整:
bash
SHOW GRANTS FOR 'root'@'localhost';
如果需要,可以调整权限,例如:
bash
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
按照上述步骤检查和修复后,应该能够解决 Access denied
错误。