5

我有一个大问题!当我这样做时:

 String query = "SELECT * FROM utente WHERE confermato=1 and Username='" + username
            + "' AND Password='" + password + "'";

        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con = DriverManager.getConnection("ind_server/nome_db","user","password");

Eclipse 给了我这个错误:

Packet for query is too large (4739923 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.

所以,首先:这个查询真的这么大吗?-.- 之后:我必须在 ssh 中写入哪些命令?这是我第一次遇到这些事情!提前致谢!

我在服务器上没有root权限!

我尝试使用这个:

 mysql>set global max_allowed_packet=32*1024*1024;

但它给了我这个错误:错误1227(42000):访问被拒绝;您需要此操作的 SUPER 权限

编辑

现在我已将 max_allowed_pa​​cket 变量修改为 32MB。停止并重新启动服务器但是eclipse给了我同样的错误!

我能做些什么?

4

9 回答 9

16

我只需要处理由DriverManager.getConnection(URL,username,password). 我什至得到了相同的“幻数”(4739923 > 1048576);谷歌搜索那些“神奇的数字”将显示人们也得到一些 DriverManager.getConnection 语句引发的错误的结果。就我而言,关于数据包大小的错误消息是完全误导的;我只是使用了一个错误的 URL,而整个事情与数据包大小无关。

也许这将有助于解释我使用的 URL 出了什么问题——尽管这有点令人尴尬(这是一个非常愚蠢的错误。)就这样。

我已经使用一些名为 SQLYog(有点像 phpMyAdmin)的“数据库管理器”软件成功连接到远程服务器/数据库。为了连接,我不得不给 SQLYog 2 套东西。首先,URL(或IP地址),用户名,密码和端口,以便我的计算机可以与服务器连接。其次,URL、端口、MySQL 用户名、MySQL 密码,以便服务器机器可以连接到数据库(位于那台机器上)。所以有 2 个 URL 和 2 个端口(还有 2 个用户名和 2 个密码)一个用于客户端 -> 服务器,一个用于服务器 -> 数据库。

现在,在决定为 DriverManager.getConnection 中的 JAVA 代码选择哪个 URL 时,我选错了,愚蠢的我!显然,这必须是第二步(服务器 -> 数据库),而不是第一步(客户端 -> 服务器);毕竟 servlet 在服务器上运行,所以 servlet 甚至正在运行的事实表明步骤 1 已经完成,步骤 2 仍有待完成。由于数据库与运行 servlet 的机器位于同一台机器上,因此该 url 只是“localhost”;或者,更准确地说,“jdbc:mysql://localhost:3306/myDatabaseName”。而不是“jdbc:mysql://domainNameOfServer.com:somePortNumber/myDatabaseName”,它抛出了上述错误。

愚蠢的错误和非常愚蠢的错误信息。我想这很合适。

于 2014-12-04T20:44:42.687 回答
1

以下为我工作

编辑 my.cnf 文件(我的在 /etc/mysql 中)

然后修改max_allowed_pa​​cket值我设置为max_allowed_pa​​cket=200M

确保重新启动 MySQL 以使更改生效

于 2015-04-24T03:24:33.270 回答
1

查询数据包太大(2285643 > 1048576)。您可以通过设置 max_allowed_pa​​cket' 变量在服务器上更改此值。

SOLUTIONS:-
You can see it's current value in mysql like this:

SHOW VARIABLES LIKE 'max_allowed_packet'

You can try to change it like this, but it's unlikely this will work on shared hosting:

SET GLOBAL max_allowed_packet=16777216;
and restart mysql service..
于 2015-03-23T10:56:15.087 回答
1

编辑您的 my.cnf(ubunut) 或 my.ini(windows) 文件并设置 max_allowed_pa​​cket 大小。

max_allowed_pa​​cket=512M

然后重启你的mysql服务器。它会工作的

于 2015-07-30T12:54:06.933 回答
0

但它给了我这个错误:错误1227(42000):访问被拒绝;您需要 SUPER 权限 > 进行此操作

尝试 sudo set global max_allowed_pa​​cket=32*1024*1024

于 2012-12-07T09:04:21.053 回答
0

我遇到了这个问题并通过更改我的 mysql-connector 版本来解决它。可能是我在 pom 中的 mysql-connector 版本太高了。

堆栈打印:

Thu Nov 03 18:24:03 CST 2016 WARN: Invalid value 'null' for server variable named 'auto_increment_increment', falling back to sane default of '1'.
Exception in thread "main" com.mysql.jdbc.PacketTooBigException: Packet for query is too large (44 > -1). You can change this value on the server by setting the max_allowed_packet' variable.
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:577)
    at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:417)
    at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3105)
    at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2336)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2729)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)
    at com.sparkproject.jdbc.JDBCHelper.main(JDBCHelper.java:382)
于 2016-11-03T10:22:20.953 回答
0

如果您无法停止数据库,您也可以动态设置 max allowed packet 参数的值。为此:

1. Log in as a root user.
2. You'll need to set the value as an integer, rather than '256M'. 256M is equivalent to 256*1024*1024, or 268435456.
3. mysql> SET GLOBAL max_allowed_packet=268435456;
4. To check that this has been applied:

    a. Relogin to your mysql client.

    b. mysql> SELECT @@max_allowed_packet;

Restart your Confluence instance.

您仍然需要按照上述方法更新您的 /etc/my.cnf 文件,以使更改持久化。

于 2018-01-28T15:12:49.893 回答
0

我有同样的误导性错误信息。

我通过将端口号更改为 3306 来修复它。以前我将端口号设置为 2083,因为这是我在 Web 服务器上使用的。

于 2020-09-23T20:05:03.440 回答
-1

好吧,我们不知道您的数据库有多大,但是您的查询非常具体。

至于 max_allowed_pa​​cket,请查看此帖子:

如何检查和设置 max_allowed_pa​​cket mysql 变量

于 2012-12-07T08:32:20.297 回答