参考链接: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. Spring-cloud微服务实战【八】:API网关zuul

      在前面的文章中,我们先后使用了eureka/ribbon/feign/hystrix搭建了一个看似完美的微服务了,那是否还有值得继续优化的地方呢?答案肯定是有的,如果从整个微服务内部来看,基本已经 ...

  2. C# 正则进阶

    .NET 中的正则表达式是基于 Perl 5 的正则表达式. 超时 从 .NET Framework 4.5 开始,正则表达式支持在匹配操作中指定超时时间.如果匹配超时,就会抛出 RegexMatch ...

  3. [Python源码剖析]获取Python小整数集合范围

    #!/usr/bin/env python #-*- coding=utf-8 -*- small_ints = dict() for i in range(-10000,10000): small_ ...

  4. HDU_5094_dfs

    http://acm.hdu.edu.cn/showproblem.php?pid=5094 bfs,vis[x][y][z],z表示钥匙的状态,用二进制来表示,key[x][y]储存当前位置钥匙的二 ...

  5. WeChall_Training: Encodings I (Training, Encoding)

    We intercepted this message from one challenger to another, maybe you can find out what they were ta ...

  6. BZOJ2038 小Z的袜子(莫队之源)

    题意+思路: 给你m个区间询问,问每个区间内的$\displaystyle \frac{\sum x^2-(R-L+1)}{(R-L)(R-L+1)} $,其中x为每种数字的个数,用cnt存储: 所以 ...

  7. codeforces 1020 C Elections(枚举+贪心)

    题意: 有 n个人,m个党派,第i个人开始想把票投给党派pi,而如果想让他改变他的想法需要花费ci元.你现在是党派1,问你最少花多少钱使得你的党派得票数大于其它任意党派. n,m<3000 思路 ...

  8. num08---原型模式

    关键点,实现 Cloneable  接口, 重写clone() 方法.克隆出的对象属性保持一致. 案例: 原型模式在spring 源码中的应用: =========================== ...

  9. Java并发之Exchanger类

    应用场景 如果两个线程在运行过程中需要交换彼此的信息,可以使用Exchanger这个类. Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进 ...

  10. 手把手带你阅读Mybatis源码(一)构造篇

    前言 今天会给大家分享我们常用的持久层框架——MyBatis的工作原理和源码解析,后续会围绕Mybatis框架做一些比较深入的讲解,之后这部分内容会归置到公众号菜单栏:连载中…-框架分析中,欢迎探讨! ...