com.mysql.jdbc.PacketTooBigException

У меня большие проблемы! когда я делаю это:

 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");

Затмение дает мне эту ошибку:

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_packet до 32 МБ. Остановил и перезапустил сервер, но затмение дает мне ту же ошибку!

Что я могу сделать?

8 ответов

Я просто должен был иметь дело с тем же сообщением об ошибке, брошенным 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 пароля), один для клиент -> сервер и один для сервера -> база данных.

Теперь, решая, какой URL из тех, которые нужно выбрать для кода JAVA в DriverManager.getConnection, я выбрал не тот, глупый меня! Очевидно, что это должен быть второй шаг (сервер -> база данных), а не первый шаг (клиент -> сервер); после того, как все сервлеты запущены на сервере, поэтому тот факт, что сервлет даже запущен, показывает, что шаг 1 уже выполнен, а шаг 2 еще предстоит выполнить. Поскольку база данных находилась на той же машине, на которой работал сервлет, этот URL был просто "localhost"; или, точнее, "jdbc:mysql://localhost:3306/myDatabaseName". И не "jdbc:mysql://domainNameOfServer.com:somePortNumber/myDatabaseName", который выкинул ошибку выше.

Глупая ошибка и очень глупое сообщение об ошибке. Я думаю, это подходит.

Слишком большой пакет для запроса (2285643 > 1048576). Вы можете изменить это значение на сервере, установив переменную max_allowed_packet'.

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..

Отредактируйте файл my.cnf(ubunut) или my.ini(windows) и установите размер max_allowed_packet.

max_allowed_packet = 512M

Затем перезагрузите сервер MySQL. Это будет работать

Следующее сработало для меня

отредактируйте файл my.cnf (мой был в /etc/mysql)

Затем измените значение max_allowed_packet Я установил его max_allowed_packet=200M

Убедитесь, что вы перезапустите MySQL, чтобы изменения вступили в силу

но это дает мне эту ошибку: ОШИБКА 1227 (42000): доступ запрещен; вам нужна привилегия SUPER> для этой операции

Попробуйте sudo set global max_allowed_packet=32*1024*1024

Я сталкиваюсь с этой проблемой и решаю ее путем изменения версии моего MySQL-соединителя. Может быть, моя версия MySQL-соединителя в POM слишком высока.

Печать стека:

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)

Если вы не можете остановить свою базу данных, вы можете динамически установить значение параметра максимально допустимого пакета. Для этого:

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, как описано в методе выше, чтобы сделать изменение постоянным.

У меня было такое же вводящее в заблуждение сообщение об ошибке.

Я исправил это, изменив номер порта на 3306. Раньше у меня был номер порта 2083, потому что я использую его на своем веб-сервере.

Ну, мы не знаем, насколько велика ваша база данных, но ваш запрос довольно специфичен.

Что касается max_allowed_packet, проверьте этот пост:

как проверить и установить переменную max_allowed_packet mysql

Другие вопросы по тегам