MySQL - Got timeout reading communication packets
DB Troubleshooting/MySQL 2021. 6. 3. 07:12
- 문제 : 주기적으로 MySQL과의 접속이 끊어지는 현상
- 내용 확인 : MySQL error log를 확인해 보면 아래 문구가 기록되어 있음.XXXX [Note] Aborted connection XXXXX to db: 'XXXXX' XXXXX: 'XXXXX' host: '10.10.10.10' (Got timeout reading communication packets)
- 원인 : MySQL에 접속한 이후 timeout 설정값 보다 오랫동안 요청이 없어서 강제로 접속이 끊어짐.
[timeout 관련 정보 - MySQL 5.7기준]
mysql> show global variables like '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 60 | | wait_timeout | 28800 | +-----------------------------+----------+ 13 rows in set (0.01 sec) |
- connect_timeout : MySQL 서버 접속에 접속실패를 메시지를 보내기까지 대기하는 시간
- delayed_insert_timeout : insert시 delay될 경우 대기하는 시간
- have_statement_timeout :
- innodb_flush_log_at_timeout :
- innodb_lock_wait_timeout : innodb에 transaction 처리중 lock이 걸렸을 시 롤백 될때까지 대기하는 시간
- innodb_rollback_on_timeout : innodb의 마지막 구문을 롤백시킬지 결정하는 파라미터 (timeout은 진행중인 transaction을 중단하고 전체 transaction을 롤백하는 과정에서 발생)
- interactive_timeout : 활동중인 커넥션이 닫히기 전까지 서버가 대기하는 시간
- lock_wait_timeout :
- net_read_timeout : 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간
- net_write_timeout :
- rpl_stop_slave_timeout
- slave_net_timeout : 마스터/슬레이브로 서버가 클라이언트로부터 데이터를 일겅들이는 것을 중단하기까지 대기하는 시간
- wait_timeout : 활동하지 않는 커넥션을 끊을때까지 서버가 대기하는 시간
[해결 방안]
- [어플 로직 수정] MySQL에 접속하는 세션(서버)에 reconnect 로직을 추가
- [DB 설정 수정] wait_timeout, interactive_timeout 수치를 증가
- wait_timeout, interactive_timeout 설정 정보
- wait timeout PropertyValue
Command-Line Format | --wait-timeout=# |
System Variable | wait_timeout |
Scope | Global, Session |
Dynamic | Yes |
Type | Integer |
Default Value | 28800 |
Minimum Value | 1 |
Maximum Value (Other) | 31536000 |
Maximum Value (Windows) | 2147483 |
- interactive timeout PropertyValue
Command-Line Format | --interactive-timeout=# |
System Variable | interactive_timeout |
Scope | Global, Session |
Dynamic | Yes |
Type | Integer |
Default Value | 28800 |
Minimum Value | 1 |
- DB 설정 수정 방법 :
- set global session wait_timeout = [설정값]
- set global session interactive_timeout = [설정값]
- [DB 재시작 필요] 아래 설정 값 추가 이후 MySQL 재시작my.cnf 파일에 wait_timeout = [설정값]interactive_timeout = [설정값]
- [DB 재시작 필요 없음] DB 접속 후 아래 명령어 실행my.cnf 파일에 수정 내용을 추가하지 않으면 DB 재시작 시 초기화됨.
※ 참고 자료 : https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
'DB Troubleshooting > MySQL' 카테고리의 다른 글
MySQL 고비용 쿼리로 인한 Memory 고갈 후 swap 사용으로 지연 처리 (0) | 2022.03.17 |
---|---|
MySQL max_allowed_packet 설정 오류로 Replication Error (0) | 2022.03.17 |
InnoDB Engine Auto_increment 동작 (0) | 2022.03.15 |
[MySQL] _INFORMATION_SCHEMA.PARAMETERS 조회로 인한 Checking Permission 부하 (0) | 2021.12.29 |
[MySQL] Stored Procedure Memory Leak (0) | 2021.12.29 |