zoukankan      html  css  js  c++  java
  • 异常:org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    异常信息:

    org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    
    The last packet successfully received from the server was 1,423 milliseconds ago.  The last packet sent successfully to the server was 1,413 milliseconds ago.
    ### The error may exist in yh/dao/UserMapper.xml
    ### The error may involve yh.dao.IUserMapper.selectUser
    ### The error occurred while executing a query
    ### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    

    出现场景

      使用 MyBatis 操作数据库时,出现问题,一顿排查代码问题无果,才想到可以能是连接上的问题
    

    mybatis-config.xml 中 url 的配置:

    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
    

    可能产生问题的地方

       首先,异常消息`Communications link failure`,意味着该数据库根本无法访问。可能有以下一种或多种原因:
    
    1. JDBC URL中的IP地址或主机名错误。
    2. 本地DNS服务器无法识别JDBC URL中的主机名。
    3. JDBC URL中的端口号丢失或错误。
    4. 数据库服务器已关闭。
    5. 数据库服务器不接受TCP / IP连接。
    6. 数据库服务器已用尽连接。
    7. Java和DB之间的某种事物正在阻止连接,例如防火墙或代理。

    要解决一个或另一个,请遵循以下建议:

    1. 使用验证并测试它们 ping。
    2. 刷新 DNS 或在 JDBC URL中使用 IP 地址。
    3. 检查 my.cnf 或 my.ini 是否有错误。
    4. 启动数据库。
    5. 验证mysqld是否在没有 ——skip-networking 选项的情况下启动。
    6. 重新启动数据库,并相应地修复您的代码,使其关闭中的连接finally。
    7. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

    解决问题

      通过排查,发现是 useSSLeep=true(一种安全协议。在传输层与应用层之间对网络连接进行加密。) 这一个参数引发的异常,搜索了解了一下,发现我的 SSL 是开启了的,但是还需要在 my.ini 配置文件中指定 ssl 证书路径:
    
    # 在配置文件中指定ssl证书路径
    ssl-ca=/usr/local/mysql5728/data/ca.pem
    ssl-cert=/usr/local/mysql5728/data/server-cert.pem
    ssl-key=/usr/local/mysql5728/data/server-key.pem
    

    直接将 mysql5728 改为自己的 MySQL 根目录名即可(重启服务生效)

    而后就可以通过 MyBatis 在配置了 SSL=true 的情况下链接数据库进行操作了,并解决了安全连接问题

  • 相关阅读:
    SQLServer之删除用户自定义数据库用户
    Oracle expdp/impdp导出导入命令及数据库备份
    ORACLE EXP/IMP的使用详解
    《JAVA与模式》之抽象工厂模式
    Oracle中的Temporary tablespace的作用
    Oracle常用函数笔记
    java Map及Map.Entry详解
    LinkedHashMap和HashMap的比较使用
    win7 64系统安装oracle客户端使用PL/SQL Developer工具
    PL/SQL 创建视图语法
  • 原文地址:https://www.cnblogs.com/csyh/p/12883161.html
Copyright © 2011-2022 走看看