[数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案
前言
吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了。
下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现的情况。
- 为方便快速检索,本文按照【MySQL错误代码】升序排列
- 在后续的开发过程,本文将把所遇MySQL错误的相关问题持续更新
- SELECT VERSION()查看数据库当前版本
1 针对问题 【登录/鉴权 1045(28000)】Access denied for user 'root'@'localhost' (using password: YES)
- 原因分析
- 可能情况1: 用户名和密码不匹配 (乃至可能, 数据库连接的配置信息存在空格、多打或少打了字符)
- 可能情况2: 用户的权限不足 (用户授权 详见 https://www.cnblogs.com/johnnyzen/p/7922780.html)
- GRANT ALL PRIVILEGES ON databaseName.* TO userName@host IDENTIFIED BY password;
- 可能情况3: 数据库与应用程序的数据传输过程中产生的【编码 不匹配】问题
- 可尝试在数据库连接的Url后 添加 useUnicode=true&characterEncoding=UTF-8
2 针对问题 【授权 1410(42000)】ERROR 1410 (42000): You are not allowed to create a user with GRANT
- 原因:
- MySQL8.0的重大改版,导致 【创建用户】与【授权】分开执行 ( 即 必须先创建用户,才能后续授权)
- 解决办法
USE mysql; ## 使用mysql数据库UPDATE user SET host='%' WHERE user='userName'; # 修改指定用户的host范围FLUSH PRIVILEGES; # 刷新权限表GRANT ALL PRIVILEGES ON dataBaseName.* to userName@host; # 授权FLUSH PRIVILEGES; # 刷新权限表
3 针对问题 【登陆/鉴权 1698(28000)】ERROR 1698 (28000):Access denied for user 'root'@'localhost'" error
参见博客 数据库之MySQL ERROR 1698 (28000) 错误:Access denied for user 'root'@'localhost'" error【摘抄】
4 针对问题 【登陆/鉴权 2059】Unable to load authentication plugin 'caching_sha2_password”
- 原因
- MySQL数据库8.0以后,改变了身份验证插件为’caching_sha2_password’ 而之前的身份验证方式(default_authentication_plugin)=mysql_native_password
- 解决方法
- 方法一 使用老版本的身份验证插件方式 [in MySQL]
- ALTER USER userName@host IDENTIFIED WITH mysql_native_password BY ‘用户密码’;
- 方法二 使用8.0以后的MySQL驱动(java的jdbc包) [in POM.xml and driverName]
- 1 更新 jdbc的驱动程序(8.0+)
- [2 修改驱动名(原先的旧驱动名也可继续使用)] com.mysql.jdbc.Driver → com.mysql.cj.jdbc.Driver
- 方法一 使用老版本的身份验证插件方式 [in MySQL]
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version></dependency>
5 针对问题 java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
- 背景
- 多出现在使用MySQL 8.0以上版本(MySQL连接驱动和版本都是8.0以上)的时候易出现本错误
- 解决方法
- 数据库连接的 Url 中 添加: allowPublicKeyRetrieval=true
6 针对问题 Unknown system variable 'query_cache_size'
- 背景
- jdbc(mysql-connecter-java)驱动程序的版本太低,导致 数据库驱动程序与数据库版本不适配 (注:查看数据库版本 SELECT VERSION() )
- MySQL官方: query cache在MySQL5.7.20就已经过时了,而在MySQL8.0之后就已经被移除了。
- 解决方法
- 1 更新 jdbc的驱动程序(8.0+)
- [2 修改驱动名(原先的旧驱动名也可继续使用)] com.mysql.jdbc.Driver → com.mysql.cj.jdbc.Driver
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version></dependency>
7 针对问题 The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
- 背景
- 多出现在使用MySQL 8.0以上版本(MySQL连接驱动和版本都是8.0以上)的时候易出现本错误
- 解决方法
- 法一 show variables like '%time_zone%'; set global time_zone='+8:00';
- 法二 数据库连接的Url后面加上 &serverTimezone=GMT%2B8 【未亲测】
8 参考文献
![[数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案 _ JavaClub全栈架构师技术笔记 [数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案 _ JavaClub全栈架构师技术笔记](https://www.javaclub.cn/zb_users/theme/tpure/style/images/lazyload.png)
本文作者:千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
作者:千千寰宇
来源链接:https://www.cnblogs.com/johnnyzen/p/12599171.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。