参考链接:http://blog.sina.com.cn/s/blog_7540bf5f0102xjpk.html

最近新入职,用了新版的mysql8数据库,结果连接数据库时出现了问题,报了几个异常,

1:第一个异常一看就知道是驱动包版本不对,于是就换了成mysql-connector-java-8.0.11
 的驱动,就可以了。
Cannot connect to database
server,Exception:com.mysql.cj.jdbc.Driver
java.lang.ClassNotFoundException:
com.mysql.cj.jdbc.Driver
at
at
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.
at
at
at
at com.yascn.test.ConnectionTest.main(ConnectionTest.
第二个异常:
The last packet sent successfully to the server was 0
milliseconds ago. The driver has not received any packets from the
server.
com.mysql.cj.jdbc.exceptions.CommunicationsException:
Communications link failure
 
The last packet sent successfully to the server was 0
milliseconds ago. The driver has not received any packets from the
server.
at
com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.
at
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.
at
com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.
at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.
at
com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.
at
com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.
at
at
at com.yascn.test.ConnectionTest.main(ConnectionTest.
Caused by: com.mysql.cj.exceptions.CJCommunicationsException:
Communications link failure
 

网上说的什么修改的方法对我没有用

诸如此类:

1·修改my.ini
bind-address = 127.0.0.1 为 bind-address = 0.0.0.0
  使非本地网络可以访问数据库

2·检查防火墙是否有开放3306端口

3·网上广为流传的86400秒超时
回收机制
并不和我遇到的问题一致,这种问题是在程序运行过程中因为我们使用的连接池不知道连接被回收了所以报出的异常,解决方案可以是修改连接池配置或修改mysql空闲超时时间配置。

于是按照说明更改了,找到C:\ProgramData\MySQL\MySQL
Server 8.0\my.ini文件新增
wait_timeout=31536000
 
interactive_timeout=31536000 
 
但是都不管用,我就是想是否还是驱动的问题,看到了一版新的帖子,说是useSSL=false就可以了。

Class.forName("com.mysql.cj.jdbc.Driver");

url =
"jdbc:mysql://localhost:3306/jnditest?serverTimezone=GMT&useSSL=false";//数据库的路径

主要是红色字体方面,serverTimezone缺失是很容易从错误找出来的,但是重点是useSSL=false,这个从错误提示是看不出来的,它有个很重要的作用是使用JDBC跟你的数据库连接的时候,你的JDBC版本与MySQL版本不兼容,MySQL的版本更高一些,在连接语句后加上“useSSL=‘true’”
,就可以连接到数据库了。更高版本。但如果是兼容版本的话就会出错。

我试了改成true的确又出现了这个问题。

查下了useSSL
的意思,是说JDBC版本与MySQL版本是否需要兼容,为true的是需要兼容,flase不需要兼容。

引用地址:https://blog.csdn.net/ponxbin/article/details/80608040

回顾下mysql连接url参数设置,与数据库连接中断重新连接时,需要在url中加上autoReconnect=true

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE

jdbc.username=root
jdbc.password=password

database.url=jdbc:mysql://database_server:3306/oauth?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC

特别说明其中的jdbc.url配置:如果你已经升级好了mysql-connector,其中的characterEncoding=utf8可以被自动被识别为utf8mb4(当然也兼容原来的utf8),而autoReconnect配置我强烈建议配上,我之前就是忽略了这个属性,导致因为缓存缘故,没有读取到DB最新配置,导致一直无法使用utf8mb4字符集,多么痛的领悟!!

没有让mysql驱动开启批量执行sql的开关。

怎么开启呢?在拼装mysql链接的url时,为其加上allowMultiQueries参数,设置为true,如下:

jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

mysql JDBC URL格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...

常用的几个较为重要的参数:

参数名称 参数说明 缺省值 最低版本要求 
user 数据库用户名(用于连接数据库) 所有版本 
passWord 用户密码(用于连接数据库) 所有版本 
useUnicode
是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true
false 1.1g 
characterEncoding 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk false
1.1g 
autoReconnect 当数据库连接异常中断时,是否自动重新连接
false 1.1 
autoReconnectForPools 是否使用针对数据库连接池的重连策略 false
3.1.3 
failOverReadOnly 自动重连成功后,连接是否设置为只读?
true 3.0.12 
maxReconnects autoReconnect设置为true时,重试连接的次数 3
1.1 
initialTimeout autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 2
1.1 
connectTimeout 和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本
0 3.0.1 
socketTimeout socket操作(读写)超时,单位:毫秒。 0表示永不超时 0
3.0.1

对应中文环境,通常mysql连接URL可以设置为:

复制代码代码如下:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false 

在使用数据库连接池的情况下,最好设置如下两个参数:

复制代码代码如下:

autoReconnect=true&failOverReadOnly=false 

【MySql】数据库连接异常:Thelastpacketsentsuccessfullytotheserverwas0millisecondsago的更多相关文章

  1. mysql数据库连接异常问题(总结)

    mysql数据库连接异常问题(总结) 1.1 前言   最近项目由1个数据源增加至了3个数据源(连接池使用C3P0),结果各种奇葩的数据库连接问题接踵而至,为防止将来再次遇到同样的问题不犯同样错误,现 ...

  2. 查找Mysql数据库连接jar包和对应的Driver和Url

    以前写jdbc连接向来都是直接copy,对于连接数据库的jar包在哪下载,对应的Driver类是哪一个,数据库连接串怎么找等等都没有做过,今天从零开始整了一遍. 使用的数据库是Mysql 一.已安装了 ...

  3. Python3 MySQL 数据库连接 -PyMySQL

    Python 3  操作mysql http://www.runoob.com/python3/python3-mysql.html Python3 MySQL 数据库连接 本文我们为大家介绍 Pyt ...

  4. TR2021_0000偶发数据库连接异常问题排查

    [问题描述] 数据库连接异常是很难排查的一类问题.因为它牵涉到应用端,网络层和服务器端.任何一个组件异常,都会导致数据库连接失败.开发遇到数据库连接不上的问题,都会第一时间找DBA来协助查看,DBA除 ...

  5. 一个简单的MySql数据库连接池的实现

    package cn.hc.connectionPool; import java.io.IOException; import java.io.InputStream; import java.sq ...

  6. 报表开发工具中mysql数据库连接编码转化失效解决方案

    1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...

  7. Mysql数据库连接、查询、记录集操作代码

    Mysql数据库链接代码 function dbConnect($hostname,$username,$pass,$db_name,$pconnect =0) { $func=empty($pcon ...

  8. Mysql数据库连接查询

                                    Mysql数据库连接查询 连接是关系数据库模型的主要特点.连接查询是关系数据库中最主要的查询,主要包括内连接.外连接等.通过连接运算可以 ...

  9. Python实现Mysql数据库连接池

    python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...

随机推荐

  1. c++中静态成员函数

    静态成员函数 静态成函数和静态成员数据相同,他们都属于某一个类的静态成员而不是某一个对象的成员. 静态数据成员的使用方法和注意事项 1.静态数据成员在定义或说明时前面加上关键字static 2.初始化 ...

  2. 物流跟踪API-快递单订阅

    上一篇文章我们讲解了轨迹查询的接口,通过快递鸟接口可以实现实时查询物流轨迹,这次给大家推荐订阅服务功能. 为了更好的理解订阅服务,我们来做个对比, 即时查询是主动查询物流轨迹,需要我们主动调用接口才能 ...

  3. 在Navicat新建用户

    1.Ctrl+Q,进入查询,创建表空间. 输入create tablespace test datafile 'D:\Oracle\test.ora' size 1000m; 这里的test为表空间名 ...

  4. pugixml简单实用

    实现快递查询,调用快递100的API,未完成. #include <iostream> #include <fstream> #include <string> # ...

  5. [python之路]简单介绍

    python介绍 #python是一个什么样的语言?编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言python是一门动态解释性的强类型定义语言. #Python的优缺点##优点Pyth ...

  6. Codeforces_478_C

    http://codeforces.com/problemset/problem/478/C 水. #include<stdio.h> int main() { long long a,b ...

  7. Codeforces_713_A

    http://codeforces.com/problemset/problem/713/A 将读入的数全都存为二进制,用map保存对应的个数. #include<iostream> #i ...

  8. HDU 1251 统计难题 (Trie树模板题)

    题目链接:点击打开链接 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单 ...

  9. tomcat solr服务无法搜索中文

    把tomcat的配置文件修改一下就好了, vi server.xml <Connector port="8080" protocol="HTTP/1.1" ...

  10. linux 手工释放内存 高内存 内存回收 方法思路

    linux  跑的apache,apache工作模式有   Prefork.Worker和 Event  三种,分别是基于进程.线程.综合模式.        本文中使用的apache是 Event  ...