Sungtt

PROTOCOL_PACKETS_OUT_OF_ORDER 본문

mysql

PROTOCOL_PACKETS_OUT_OF_ORDER

sungtt 2022. 5. 1. 11:10

PROTOCOL_PACKETS_OUT_OF_ORDER

AWS EC2 서버를 구동중일 때 몇시간동안 아무 행동이 없으면

mysql에서 이러한 오류가 뜨면서 서버가 멈춘다.

 

스택오버플로우를 뒤져보니

1.max_allowed_packet을 더 높은값으로 변경하면 해결될것이라 했다.

2. interactive_timeout과 wait_timeout 값 변경하기

 

max_allowed_packet

통신간 데이터전송량을 정하는 설정이다.

 

interactive_timeout

콘솔이나 터미널모드에서 mysqld와 clinet가 연결을 맺은 다음 요청을 기다리는 최대 시간이다.

wait_timeout

api를 이용한 client프로그렘 상에서 최대 연결시간을 말한다.

설정된 시간동안 아무요청이 없으면 연결은 취소되고, 다시 요청이 들어오면 자동으로 연결이 맺어진다.

 


우선 max_allowed_packet을 변경해보자

아래 명령어를 입력해보면 현재 설정되어있는 max_allowed_packet을 볼 수 있는데

67108864로 설정되어있다.

 show variables like 'max%'

 

 

max_allowed_packet 변경하기 (리눅스)

우선 aws ec2에서 변경해보겠다.

CLI에서 아래 명령어를 입력하면 my.cnf 위치가 표시된다.

mysqld --verbose --help | grep -A 1 'Default options'

 

etc/로 디렉토리로 접속하고, root권한을 얻은채로 my.cnf를 편집하자 (vi my.cnf)

권한이 없으면 read only만 되어 편집이 되지않는다. 새파란 글씨에 뭐라 써져있는지 잘 안보인다...

여기서 [mysqld] 아래쪽에 max_allowed_packet = 500M (최대 1G라고 한다)라고 기입해준 뒤 저장하고 나온다. (:wq)

그 후 systemctl restart mysqld를 명령하여 재부팅시키고 max_allowed_packet 값을 확인해보면 늘어난것을 볼 수 있다.

 


interactive_timeout / wait_timeout 변경하기

먼저 아래 명령어로, 현재 설정값을 확인해보면

각각 8시간으로 되어있는것을 확인할 수 있다.

show variables like 'interactive%'
show variables like 'wait%'

 

다시 my.cnf로 접속하여 코드를 추가해준다.

interactive_timeout = 86400
wait_timeout = 86400

value값의 단위는 초단위다.

나는 86400(24시간)으로 설정해주었다.

입력했으면 저장하고 나온 뒤  systemctl restart mysqld으로 다시 재부팅한 뒤 값을 확인해보자.

잘 변경되었다.

 

변경 한 뒤로 또 이런 오류가 나타난다면 다시 방법을 찾아 글을 수정해야겠다.

Comments