在 IntelliJ IDEA 中连接 MySQL 时出现 Access denied for user 'root'@'localhost' (using password: YES) 错误,通常是由于用户名、密码或权限配置不正确导致的。以下是详细的排查和解决方法:


1. 检查用户名和密码

确认用户名和密码是否正确
  • 确保在 IDEA 中填写的用户名和密码与 MySQL 的实际配置一致。

  • 默认情况下,MySQL 的 root 用户密码可能为空,或者是你安装时设置的密码。

测试连接
  • 使用命令行或 MySQL 客户端(如 MySQL Workbench)测试连接:

    mysql -u root -p
    • 输入密码后,如果能成功登录,说明用户名和密码正确。


2. 检查 MySQL 用户权限

查看 root 用户的权限
  1. 登录 MySQL:

    mysql -u root -p
  2. 查询 root 用户的权限:

    SELECT host, user FROM mysql.user;
    • 确保 root 用户的 host 是 localhost 或 %(允许远程连接)。

修改 root 用户权限
  1. 如果 root 用户没有权限,可以重新授权:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    • 将 your_password 替换为你的密码。

  2. 如果允许远程连接:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3. 检查 MySQL 配置文件

修改 MySQL 配置文件
  1. 找到 MySQL 配置文件:

    • Windowsmy.ini(通常位于 C:\ProgramData\MySQL\MySQL Server X.X\)。

    • Linux/macOSmy.cnf(通常位于 /etc/mysql/ 或 /usr/local/mysql/)。

  2. 确保配置文件中没有限制 root 用户的访问:

    [mysqld]
    bind-address = 0.0.0.0  # 允许所有 IP 访问
    skip-grant-tables       # 如果需要重置密码,可以临时启用
  3. 重启 MySQL 服务:

    • Windows:

      net stop MySQL80
      net start MySQL80

      Linux/macOS:

      sudo systemctl restart mysqld

4. 重置 root 用户密码

如果忘记 root 用户密码,可以重置密码:

  1. 停止 MySQL 服务:

    sudo systemctl stop mysqld
  2. 以安全模式启动 MySQL:

    sudo mysqld_safe --skip-grant-tables &
  3. 登录 MySQL:

    mysql -u root
  4. 重置密码:

    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
    FLUSH PRIVILEGES;
  5. 退出并重启 MySQL 服务:

    sudo systemctl restart mysqld

5. 检查 IDEA 的数据库配置

  1. 打开 IDEA 的 Database 工具窗口。

  2. 检查连接配置:

    • Hostlocalhost 或 127.0.0.1

    • Port3306(默认端口)

    • Userroot

    • Password: 你的密码

    • Database: 可选,如果未指定则连接默认数据库。

  3. 测试连接:

    • 点击 Test Connection,确保连接成功。


6. 检查防火墙

如果 MySQL 运行在远程服务器上,确保防火墙允许 MySQL 端口(默认 3306)的访问:

  • Linux:

    sudo ufw allow 3306/tcp
  • Windows:

    • 在防火墙设置中允许 mysqld.exe 或端口 3306


7. 其他可能的原因

  1. MySQL 版本问题

    • 某些 MySQL 版本(如 8.0+)默认使用 caching_sha2_password 加密方式,可能导致连接问题。

    • 修改加密方式:

      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
      FLUSH PRIVILEGES;
  2. IDEA 插件问题

    • 确保已安装并启用了 Database Tools and SQL 插件。


总结

通过以上步骤,可以解决 Access denied for user 'root'@'localhost' (using password: YES) 错误。如果问题仍未解决,请检查 MySQL 的错误日志(通常位于 /var/log/mysql/error.log 或 C:\ProgramData\MySQL\MySQL Server X.X\Data\*.err),获取更多详细信息。

更多推荐