【问题标题】:My sql: PacketTooBigException: Packet for query is too large (4,739,923 > 65,535)我的 sql: PacketTooBigException: Packet for query is too large (4,739,923 > 65,535)
【发布时间】:2018-03-04 15:18:34
【问题描述】:

我正在尝试连接到我的 raspbery pi 上的数据库。我在 pi 上下载了mysql,并且已经在那里创建了一个数据库。我正在尝试使用驱动程序管理器进行连接。

这是我的代码:

public static void main(String[] args) {
    try {
        String host = "jdbc:mysql://scheduleit.duckdns.org:99/scheduleit";
        String uName = username;
        String uPass = password;
        Connection con = DriverManager.getConnection(host, uName, uPass);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

我已进入配置文件并将 [mysqldump] 的 max_allowed_packet 更改为 32M。我查看了其他配置文件,但无法找到另一个 max_allowed_pa​​cket 字段进行编辑。此外,我在mysql 中使用了命令:SET GLOBAL max_allowed_packet=32M;

我很好奇的一件事是主机名是否错误。我使用端口 99 SSH 到 pi,但在连接 DriverManager 时可能使用不同的端口? mysql 的默认端口是 3306,我试过了,但没有连接。

最后,我使用mariadb,据我了解,它本质上是mysql,因为我使用mysql -u root -p 命令登录。任何帮助将非常感激。

【问题讨论】:

  • 也许jdbc:mysql://scheduleit.duckdns.org:99/scheduleit?max_allowed_packet=<value>... 有两个不同的参数称为max_allowed_packet,一个在服务器上,一个在客户端上。该错误表明问题出在客户端,而不是服务器上。

标签: mysql jdbc max-allowed-packet


【解决方案1】:

MySQL 服务器和客户端(本例中为 JDBC)都必须增加 max_allowed_pa​​cket 的设置。最大值实际上是客户端和服务器配置的较小

对于服务器,您可以使用SET GLOBAL max_allowed_packet 进行更改。您还应该在服务器的my.cnf 文件中更改它,因为SET GLOBAL 更改会在服务器重新启动时丢失。

对于客户端,正如迈克尔上面评论的那样,您可以将其指定为 JDBC URL 中的属性。除了 JDBC 属性以 camelCase 拼写。

String host = "jdbc:mysql://scheduleit.duckdns.org:99/scheduleit?maxAllowedPacket=33554432";

有关 JDBC URL 属性的更多文档,请参阅 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

【讨论】:

  • 非常感谢!为我解决问题的技巧是在服务器和客户端中设置属性。
猜你喜欢
  • 2017-09-05
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多