大肠哥 2024-03-13 17:28 采纳率: 0%
浏览 558
已结题

jdbc 连接 mysql router 6450 报错:Buffer length is less than expected payload length

jdbc 连接 mysql router 6450 update操作报错:Buffer length is less than expected payload length
insert、select操作都正常

mysql 8.2
mysql router 8.2.1
mysql-connector 8.2.0

在linux上用mysql shell部署的mysql集群,两个节点一个主节点,一个从节点,开发的时候连接mysql router 6450自动路由读写,但是遇到了下面的错误

Buffer length is less than expected payload length

img

测试代码如下,用了jdbc测试依然出错

            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.0.246:6450/nacos?characterEncoding=utf8&connectTimeout=3000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC", "root", "123456");
            String sql = "UPDATE users  SET enabled=?  WHERE username=?";
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setInt(1,2);
            statement.setString(2,"test");
            statement.executeUpdate();
            statement.close();
            connection.close();

  • 写回答

24条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-13 17:28
    关注
    获得0.30元问题酬金

    引自免费微信小程序:皆我百晓生

    该错误信息“Buffer length is less than expected payload length”通常表示MySQL服务器返回的数据包长度小于MySQL JDBC驱动(com.mysql.cj.jdbc.Driver)期望的长度,这可能是因为网络传输过程中数据包不完整或协议处理时出现了问题。

    针对您提供的错误堆栈和测试代码,可以尝试以下几种解决方案:

    1. 检查MySQL Router配置:确保MySQL Router正确配置并能够正确路由到主从节点。在集群环境中,特别是涉及写操作时,需要保证MySQL Router与后端MySQL服务器之间通信无误。

    2. 更新MySQL Connector/J版本:虽然您的MySQL Server、Router和Connector/J都是8.2系列,但建议升级至最新稳定版,以修复可能存在的已知问题。

    3. 增加JDBC连接参数

      • 添加&useCompression=true:开启压缩能减少网络传输中的数据量,但也可能导致某些情况下数据解压出错,您可以尝试开启或关闭这个选项看是否解决问题。
      • 检查并适当增大maxAllowedPacket参数值,例如添加&maxAllowedPacket=500M。这个参数限制了MySQL客户端/服务器之间单个数据包的最大大小,如果UPDATE语句影响的数据量很大,可能会超过默认设置。

    修改后的连接字符串如下:

    String url = "jdbc:mysql://192.168.0.246:6450/nacos?characterEncoding=utf8&connectTimeout=3000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&useCompression=true&maxAllowedPacket=500M";
    
    1. 检查MySQL服务器日志:查看MySQL服务器及MySQL Router的日志文件,找出更详细的错误信息。

    2. 网络问题排查:确认网络环境是否稳定,是否存在丢包现象或其他网络层异常情况。

    3. 应用兼容性验证:确认应用程序(包括数据库驱动)与MySQL 8.2的兼容性,尽管它们版本接近,但仍有可能存在未发现的兼容性问题。

    4. 重试策略:在执行UPDATE操作时,加入重试逻辑,因为这个问题可能只是暂时的网络问题。

    若以上步骤无法解决,请进一步详细分析MySQL服务器端日志以及MySQL Router日志,并结合具体的应用场景进行调试。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 创建了问题 3月13日