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