Как изменить максимально допустимый размер пакета



у меня возникла проблема с полями BLOB в моей базе данных MySQL - при загрузке файлов размером более 1 МБ я получаю ошибку Packets larger than max_allowed_packet are not allowed.



вот что я пробовал:



в браузере запросов MySQL я запустил show variables like 'max_allowed_packet' что дало мне 1048576.



затем я выполняю запрос set global max_allowed_packet=33554432 следовал по show variables like 'max_allowed_packet' - это дает мне 33554432, как ожидалось.



но когда я перезапускаю сервер MySQL, он волшебным образом возвращается к 1048576. Что я делаю не так здесь?



бонусный вопрос, Можно ли сжать поле BLOB?

2081   11  

11 ответов:

изменение my.ini или ~/.my.cnf файл, включая одну строку под в файле:

max_allowed_packet=500M

затем перезапустите службу MySQL, и все готово.

посмотреть документация для получения дополнительной информации.

The max_allowed_packet переменная может быть установлена глобально путем выполнения запроса.

однако, если вы не измените его в my.ini file (как предложил dragon112), значение будет сброшено при перезапуске сервера, даже если вы установите его глобально.

чтобы изменить максимальный разрешенный пакет для всех на 1 ГБ до перезагрузки сервера:

SET GLOBAL max_allowed_packet=1073741824;

У одного из моих младших разработчиков возникла проблема с изменением этого для меня, поэтому я решил расширить это более подробно для пользователей linux:

1) открыть терминал

2) SSH root@YOURIP

3) Введите пароль root

4) nano / etc / mysql / my.cnf (если команда не распознана, сделайте это сначала или попробуйте vi, а затем повторите: yum install nano)

5) добавьте строку: max_allowed_packet=256M (очевидно, отрегулируйте размер для всего, что вам нужно) под раздел [MYSQLD]. Он допустил ошибку, поместив его сначала в нижнюю часть файла, чтобы он не работал.

enter image description here

6) контроль + о (сохранить), затем ввести (подтвердить), то контроль + х (Файл Выход)

7) перезапуск mysqld службы

8) вы можете проверить изменение в разделе переменные на phpmyadmin

Я думаю, что некоторые также хотели бы знать, как найти мой.ini-файл на вашем ПК. Для пользователей windows, я думаю, что лучший способ заключается в следующем:

  1. Win+R(ярлык для 'run'), введите услуги.msc введите
  2. вы можете найти запись, как "MySQL56", щелкните правой кнопкой мыши на нем, выберите свойства
  3. вы могли видеть sth, как "D:/Program Files / MySQL / MySQL Server 5.6 / bin\mysqld" --defaults-file="D:\ProgramData\MySQL\MySQL Сервер 5.6\my.ini " MySQL56

Я получил этот ответ от http://bugs.mysql.com/bug.php?id=68516

следуя всем инструкциям, это то, что я сделал и работал:

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              20 |
+-----------------+
1 row in set (0.00 sec)

mysql> select @max_allowed_packet //Mysql do not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet; //That is better... I have max_allowed_packet=32M inside my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> **SET GLOBAL max_allowed_packet=1073741824**; //Now I'm changing the value.
Query OK, 0 rows affected (0.00 sec)

mysql> select @max_allowed_packet; //Mysql not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value. And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Итак, как мы видим, max_allowed_packet был изменен снаружи от моего.Ини.

давайте покинем сеанс и снова проверим:

mysql> exit
Bye

C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              21 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value still here and And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Now I will stop the server
2016-02-03 10:28:30 - Server is stopped

mysql> SELECT CONNECTION_ID();
ERROR 2013 (HY000): Lost connection to MySQL server during query


Now I will start the server
2016-02-03 10:31:54 - Server is running


C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               9 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The previous new value has gone. Now I see what I have inside my.ini again.
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

заключение, после установки глобального max_allowed_packet=1073741824, сервер будет иметь новый max_allowed_packet, пока он не будет перезапущен, как кто-то ранее заявил.

если вы получаете эту ошибку при выполнении резервного копирования,max_allowed_packet может быть установлен в my.cnf особенно mysqldump.

[mysqldump]
max_allowed_packet=512M

я продолжал получать эту ошибку при выполнении mysqldump и я не понимаю, потому что у меня был этот набор в my.cnf под . Как только я понял, что могу установить его для [mysqldump] и я установил значение, мои резервные копии завершены без проблем.

для тех, кто работает WAMP mysql server

WAMP значок в трее - > MySql - > my.ini

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer_size = 16M
max_allowed_packet = 16M        // --> changing this wont solve
sort_buffer_size = 512K

прокрутите вниз до конца и найдите

[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE

добавить строку packet_size между

[mysqld]
port=3306
max_allowed_packet = 16M
explicit_defaults_for_timestamp = TRUE

проверить, работает ли он с этим запросом

Select @@global.max_allowed_packet;

многие из ответчиков заметили проблему и уже дали решение.

Я просто хочу предложить другое решение, которое изменение значения переменной Glogal из инструмента Mysql Workbench. Это, конечно, если вы используете Workbench, работающий локально на сервере (или через SSH-соединение)

вы просто подключаетесь к своему экземпляру и заходите в меню:

Сервер - > Файл Параметров - > Сеть -> max_allowed_packed

установить нужное значение, а затем вам нужно перезапустить службу MySql.

эта ошибка возникает из-за того, что ваши данные содержат большее, чем заданное значение.

просто напиши max_allowed_packed=500M или вы можете рассчитать, что 500*1024k и использовать это вместо 500M, если вы хотите.

теперь просто перезапустите MySQL.

для всех, кто работает с MySQL на сервисе Amazon RDS, это изменение выполняется через группы параметров. Вам нужно создать новый PG или использовать существующий (кроме значения по умолчанию, которое доступно только для чтения).

вы должны искать max_allowed_packet параметр, измените его значение, а затем нажмите кнопку Сохранить.

назад в вашем экземпляре MySQL, если вы создали новый PG, вы должны прикрепить PG к вашему экземпляру (вам может понадобиться перезагрузка). Если вы изменили страницу, которая уже была прикреплена к вашему экземпляру изменения будут применены без перезагрузки, ко всем вашим экземплярам, к которым прикреплен этот PG.

Если вы хотите загрузить изображение большого размера или данные в базе данных. Просто измените тип данных 'BIG BLOB'.

Comments

    Ничего не найдено.