[数据库/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 参考文献
- 【MySQL8.0填坑】java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password” - CSDN
- 解决java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) - CSDN
- 数据库之数据库管理篇[mysql] - 博客园/千千寰宇
[数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案的更多相关文章
- 我的成长比价系列:java web开发过程中遇到的错误一:sql语句换行错误
字符串换行导致的错误,确切的说是马虎的错误,自己在编写简单的servlet项目时,在StudentDao.java 中的 查询语句:String sql= "SELECT Type,fl ...
- java web开发过程中的“\”指的是什么,如何区分
- DB-概念-数据库:数据库/Database
ylbtech-DB-概念-数据库:数据库/Database 数据库是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度.与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的 ...
- java文件来演示如何访问MySQL数据库
java文件来演示如何访问MySQL数据库. 注:在命令行或用一个SQL的前端软件创建Database. 先创建数据库: CREATE DATABASE SCUTCS; 接着,创建表: CREATE ...
- 二、spring Boot构建的Web应用中,基于MySQL数据库的几种数据库连接方式进行介绍
包括JDBC.JPA.MyBatis.多数据源和事务. 一.JDBC 连接数据库 1.属性配置文件(application.properties) spring.datasource.url=jdbc ...
- Java数据库操作(MySQL与SQLserver)
在java编程开发中,数据库的开发是重头戏. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品: SQL Server是由Microsoft开发 ...
- JAVAEE——宜立方商城13:Mycat数据库分片、主从复制、读写分离、100%Linux中成功安装Mysql的方法
1 海量数据的存储问题 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL ...
- java开发_mysql中获取数据库表描述_源码下载
功能描述: 在mysql数据库中,有两张表: data_element_config , test_table 我们需要获取表:test_table表的描述信息,然后把描述信息插入到表:data_el ...
- 往MySQL数据库datetime类型字段中插入数据库的当前时间
代码: StringBuilder sb = new StringBuilder(); sb.append(" insert into uosdetailfile ("); sb. ...
- 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件
代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...
随机推荐
- torch直接更改参数
使用model.layer1.weight.data.copy_(w1) 其中model是自定义的参数名字,layer1是某个具体的层,使用某个具体的w1来修改
- 面向对象ooDay6
精华笔记: static final常量:应用率高 必须声明同时初始化 由类名打点来访问,不能被改变 建议:常量所有字母都大写,多个单词用_分隔 编译器在编译时会将常量直接替换为具体的数,效率高 何时 ...
- C#发送字符串转字节含空格与0x需删去
主要作用:清除发送字符串转字节中的空格和16进制前缀0x, 字节转换按两位字符转换为一个字节,多余一位按一位字符转换一个字节 //清除空格和16进制前缀发送 String sendstr;// = n ...
- 数据库自动备份,crontab定时任务
查看crontab运行状态service crond status 查看当前用户的crontab,输入 crontab -l: 编辑crontab,输入 crontab -e: 删除crontab,输 ...
- 正向代理和反向代理和spring的动态代理模式有几种?默认是那种?如何切换?
spring的动态代理模式有几种?默认是那种?如何切换? spring的动态的代理模式有两种 JDK动态代理,基于接口(默认代理模式),CGLIB动态代理(若要使用需要进行配置) JDK动态代理是由j ...
- 10.10 2020 实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发
一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Postman 下发流表. 二.实验任务 推荐阅读:SDNLAB 文章:OpenFlow 协议超时机制简介 ...
- python语言linux操作系统oracle环境安装
金句:如果没把握,最好先Google一下. 1.严格按照 https://oracle.github.io/odpi/doc/installation.html#linux 教程一步步做 包括下载的软 ...
- USB 驱动框架分析
这里先说一些概念性的东西,了解一下USB 一.关于usb设备 都见过很多,用过很多了,每当我们插上一个usb设备到pc的时 右下角就会弹出一个提示信息,提示"发现xxx"设备,再接 ...
- vue-devtools 打开 vscode 可能会报错
据说 99% 的人不知道 vue-devtools 还能直接打开对应组件文件?本文原理揭秘 mac 电脑在 VSCode command + shift + p,Windows 则是 ctrl + s ...
- python之tk学习,闲鱼搜索-小记
(如想转载,请联系博主或贴上本博地址) 编程,逻辑,总是让人如痴如醉. 下面进入正题. 火热的天气配上火热的python,python的入门友好性让门外汉们都看到了希望.当然自己写的程序如果没有GUI ...