参考链接: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. t-io Java构建p2p网络

    Java 构建p2p网络 这篇文章是一篇关于pbft算法实现的一篇补充文章,但是在这里不会涉及pbft的算法方面,所以可以当做一篇单独的文章食用.如果想查看关于区块链或者PBFT算法的文章,可以参考一 ...

  2. JavaScript 初学者容易犯的几个错误,你中招没?

    JavaScript 是对初学者比较友好的一门编程语言,基本上花个半小时看下语法就能写出能运行的代码.JavaScript 是动态脚本语言,对数据类型没有太多的限制,写起来非常灵活.但正因为如此,初学 ...

  3. python学习记录(二)

    0824--https://www.cnblogs.com/fnng/archive/2013/02/24/2924283.html 如果需要写一个非常非常长的字符串,它需要跨多行,那么,可以使用三个 ...

  4. Rust学习笔记一 数据类型

    写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差. 自学了Java.Kotlin.Python. ...

  5. Cheat Sheet pyspark RDD(PySpark 速查表)

  6. Go语言实现:【剑指offer】二叉树中和为某一值的路径

    该题目来源于牛客网<剑指offer>专题. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路 ...

  7. MySQL中遍历查询结果的常用API(c)

    本中所使用的table: MySQL中的错误处理函数 unsigned int mysql_errno(MYSQL *mysql) const char *mysql_error(MYSQL *mys ...

  8. 适合产品经理的十本书 From 俞军

    (转自俞军,如有侵权,请评论区留言,我会尽快删除:) 适合产品经理的十本书 俞军 入门三本书:社会心理学 阿伦森 插图第七版:特别好,适合成为“产品经理的第一本书”第一本经济学:经济学帮助人们洞察世事 ...

  9. BeautifulSoup入门

    BeautifulSoup库入门 BeautifulSoup库的理解 BeautifulSoup库是解析.遍历.维护”标签树”的功能库 示例代码: from bs4 import BeautifulS ...

  10. linux下使用gdb对php源码调试

    title: linux下使用gdb对php源码调试 date: 2018-02-11 17:59:08 tags: --- linux下使用gdb进行php调试 调试了一些php的漏洞,记录一下大概 ...