MySQL ERROR max_allowed_packet

2 분 소요

에러 내용 max_allowed_packet Error

### Error updating database.  Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1538 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
### The error may involve com.lianboxing.projectsub.transaction.dao.MarketDao.insertList-Inline
### The error occurred while setting parameters
### SQL: insert into       market
(       currency_id   ,legal_id   ,start_price   ,end_price   ,high_price   ,min_price   ,day_time   ,type   ,number   ,mar_id   ,period   ,sign   ,create_time   ,update_time      )
 values
(    ?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?     )      ,      (    ?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?     )      ,      (    ?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?     )      ,      (    ?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?     )      ,      (    ?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?    ,?     )
### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1538 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
; SQL []; Packet for query is too large (1538 > 1024). You can change this value on the server by
 setting the max_allowed_packet' variable.;
 nested exception is com.mysql.jdbc.PacketTooBigException: 
Packet for query is too large (1538 > 1024). 
You can change this value on the server by setting the max_allowed_packet' variable.

1. max_allowed_packet이란?

네트워크 문제나 MySQL 서버 또는 클라이언트의 버그로 인해 잘못된 패킷이 MySQL 서버로 전달될 경우 MySQL 서버에 심각한 문제를 일으킬 수 있습니다. 이러한 문제점을 없애고자 MySQL 서버는 모든 클라이언트의 패킷이 max_allowed_packet 설정값에 지정된 크기 이하일 것이라고 간주하고 처리하게 됩니다. 만약 max_allowed_packet이 32MB로 설정된 서버에서 실행해야 할 쿼리 문장이 그 이상이 되는 경우에는 이 값을 더 큰 값으로 변경해야 합니다. 이러한 문제는 BLOB나 TEXT 타입의 칼럼에 상당히 큰 데이터를 저장해야 하는 경우에 주로 발생합니다.

MySQL 서버와 통신할 때 클라이언트가 MySQL 서버로 쿼리 요청을 보내는 경우에는 무조건 하나의 패킷만 사용할 수 있으며, 쿼리의 실행 결과는 여러 개의 패킷으로 나눠서 전달받게 됩니다. 그래서 이 설정값은 클라이언트가 서버로 요청하는 쿼리 문장의 길이보다 큰 값으로 설정하기만 하면 됩니다.

출처 : https://12bme.tistory.com/49

2. 에러 해결 방법 및 순서

max_allowed_packet 설정 값보다 쿼리 패 킷의 값이 더 클때 발생하는 에러입니다. mysql 설정 파일에서 해당 변수값을 초과한 쿼리 패킷 용량보다 크게 설정하면 해결됩니다.

(1) mysql max_allowed_packet 설정

SET GLOBAL max_allowed_packet = 2,048,000,000; 는 2g

SET GLOBAL max_allowed_packet = 16777216; 는 16mb

SET SESSION max_allowed_packet = 16777216;

FLUSH PRIVILEGES;

FLUSH PRIVILEGES는 grant 테이블을 다시 불러와서 변경 사항을 반영한다. (grant 명령어를 사용하면, FLUSH PRIVILEGES 실행 필요 없음)

show variables where Variable_name = 'max_allowed_packet';

(2) 변경 후 mysql 서버 재시작

my.ini 위치

mysqld –verbose –help grep -A 1 ‘Default options’

위 명령어를 입력하면 하단에 my.cnf 위치를 확인할 수 있다.

vi /etc/mysql/my.cnf

아래와 같이 경로가 나온다.

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

참고

ini vs cnf 차이

Windows uses .ini files to initialise applications

Linux uses .cnf files to configure applications

출처 https://www.sitepoint.com/community/t/my-cnf-or-is-it-my-ini/4266/2

Error “Packet for query is too large”. Even if change the setting, it is still initialized

출처 https://stackoverflow.com/questions/57550908/error-packet-for-query-is-too-large-even-if-change-the-setting-it-is-still-i

태그:

카테고리:

업데이트:

댓글남기기