MySQL 8.0.18连接失败及GRANT语句语法错误求助
解决MySQL 8.0授权语句语法错误及root连接失败问题
你的问题核心在于MySQL 8.0对用户管理语法做了重大变更——旧版本里可以在GRANT语句中直接用IDENTIFIED BY创建/设置用户密码,但8.0之后,创建用户、设置密码和授权操作必须分开执行,这就是你收到1064语法错误的原因。
正确的操作步骤
1. 先创建/修改root@'%'用户的密码
MySQL 8.0要求先确保用户存在并设置好密码,再执行授权:
-- 如果`root@'%'`用户还不存在,执行创建语句 CREATE USER 'root'@'%' IDENTIFIED BY 'mysql'; -- 如果用户已经存在,直接修改密码 ALTER USER 'root'@'%' IDENTIFIED BY 'mysql';
2. 执行授权语句
单独执行授权操作,去掉原来的IDENTIFIED BY部分:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
3. 刷新权限使变更生效
FLUSH PRIVILEGES;
关于Java应用连接失败的额外提示
你提到用root用户连接localhost失败,还要注意:
root@localhost和root@'%'是两个独立的用户!如果Java应用是通过localhost连接MySQL,MySQL会优先匹配root@localhost用户,而不是你授权的root@'%'。你需要确保root@localhost的密码正确,或者也给这个用户授权(如果需要的话)。- MySQL 8.0的JDBC连接需要额外参数,建议你的JDBC URL写成这样:
jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
- 驱动类要使用新版的
com.mysql.cj.jdbc.Driver,而不是旧的com.mysql.jdbc.Driver。
内容的提问来源于stack exchange,提问作者flixe
相关产品推荐
相关产品推荐

