Как изменить максимально допустимый размер пакета
у меня возникла проблема с полями 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?
11 ответов:
изменение
my.iniили~/.my.cnfфайл, включая одну строку под в файле:max_allowed_packet=500Mзатем перезапустите службу MySQL, и все готово.
посмотреть документация для получения дополнительной информации.
The max_allowed_packet переменная может быть установлена глобально путем выполнения запроса.
однако, если вы не измените его в
my.inifile (как предложил 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]. Он допустил ошибку, поместив его сначала в нижнюю часть файла, чтобы он не работал.
6) контроль + о (сохранить), затем ввести (подтвердить), то контроль + х (Файл Выход)
7) перезапуск mysqld службы
8) вы можете проверить изменение в разделе переменные на phpmyadmin
Я думаю, что некоторые также хотели бы знать, как найти мой.ini-файл на вашем ПК. Для пользователей windows, я думаю, что лучший способ заключается в следующем:
- Win+R(ярлык для 'run'), введите услуги.msc введите
- вы можете найти запись, как "MySQL56", щелкните правой кнопкой мыши на нем, выберите свойства
- вы могли видеть 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