升级Ubuntu后Play Framework连接MySQL8提示root@localhost访问被拒绝
问题引发原因
- MySQL 8.0版本默认将用户认证插件从旧版的
mysql_native_password更换为caching_sha2_password,命令行客户端原生支持该新认证方式,而JDBC连接逻辑默认不兼容,因此会出现命令行可正常登录、Java应用连接被拒的情况。 - 现有配置中使用的JDBC驱动类
com.mysql.jdbc.Driver已被废弃,对MySQL 8.0的兼容性不足,易引发连接异常。 - MySQL 8.0的JDBC连接URL要求显式指定时区等必填参数,旧版URL格式不符合新版驱动的校验规则,也可能触发权限报错。
解决方案
- 调整root用户的认证插件
登录MySQL命令行,依次执行以下SQL语句,注意将语句中的你的实际密码替换为application.conf中配置的数据库密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的实际密码'; FLUSH PRIVILEGES;
- 更新
application.conf中的数据库配置,参考配置如下:
db.default.driver=com.mysql.cj.jdbc.Driver db.default.url="jdbc:mysql://localhost/mydatabase?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true" db.default.user=root db.default.pass="你的实际密码"
可根据实际业务需要调整serverTimezone参数的取值,如GMT+8也可正常使用。
3. 重启Play Framework应用,即可正常连接数据库。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

