ОШИБКА 2020 (HY000): получен пакет больше, чем байты 'max_allowed_packet', при попытке извлечь данные из таблицы - PullRequest
0 голосов
/ 12 июня 2019

Я работаю над локальной настройкой веб-приложения, и мне нужно извлечь все элементы из таблицы, но когда я делаю select * from my_table, это выдает мне эту ошибку ERROR 2020 (HY000): Got packet bigger than 'max_allowed_packet' bytes.

Я перепробовал много вариантов, некоторые из которых включают:

-Setting max_allowed_packet в моих \etc\mysql\mysql.conf.d\mysqld.cnf и \etc\mysql\mysql.conf.d\mysqldump.cnf (я не использую дамп, но чтобы быть на безопасной стороне), до 1G, затем 2Gи т.д.

-Также пытался использовать set global net_buffer_length=1000000; и set global max_allowed_packet=1000000000; в mysql в терминале

Я добился небольшого успеха, когда использовал mysql --max_allowed_packet=100M -u root -, он выдает все данные, но проблема в том,это работает только в терминале, но я должен получить данные в своем веб-приложении, где оно не будет работать.

Интересно то, что: Я пытался использовать лимитпоэтому, когда я использую select * from my_table limit 200, это дает ожидаемый результат (но только 200 строк).Общее количество строк составляет около 350. Таким образом, ошибка в данных более высоких строк, чем 200. Чтобы проверить размер строки, я использовал следующий запрос: select sum(row_size) from ( select char_length(id)+ char_length(code)+ char_length(name)+ char_length(url) +char_length(group)+ char_length(template)+ char_length(html) + char_length(association) + char_length(status) + char_length(created_at)+ char_length(updated_at) + char_length(html_generation_date) as row_size from myTable limit 311,1) as tbl1;, который дает мне: 43095, а для limit 150,1 запрос выше: 94428. Итак, строкаразмер, похоже, не является проблемой.

Я пробовал решения, приведенные на Ошибка MySQL 1153 - Получен пакет больше, чем байты 'max_allowed_packet' и https://serverfault.com/questions/102564/error-2020-got-packet-bigger-than-max-allowed-packet-bytes-when-dumping-table.

По сути, я хочу сделать что-то вроде этого: myTable::model()->findAll(); в моем приложении PHP Yii, что эквивалентно select * from my_table, и после этого я могу использовать данные для заполнения своего списка.

Схема таблицы: +----------------------+--------------+------+-----+-------------------+-----------------------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | code | varchar(150) | NO | | NULL | | | name | varchar(150) | NO | | NULL | | | url | varchar(255) | NO | | NULL | | | group | int(11) | NO | MUL | NULL | | | template | int(11) | NO | | NULL | | | html | longtext | YES | | NULL | | | association | varchar(100) | NO | | NULL | | | status | tinyint(1) | NO | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | | updated_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | html_generation_date | timestamp | YES | | NULL | |

И версия mysql: 14.14 Распространение: 5.7.26.Движок БД - InnoDB.

Любая помощь будет высоко оценена.

...