Intro.
데이터베이스에 외부에서 접속 시 connection이 lock걸리는 현상인데, 문제는 뭐고, 어떻게 해결해야 하는지 알아보겠다.
1. 문제점
- 너무 많은 연결 오류로 해당 호스트가 block되는 경우이다.
(1) 문제 확인 방법
[1] select @@global.max_connect_errors;
- 해당 명령어로 error 카운트 개수를 확인할 수 있다.
- 해당 카운트를 넘으면 host가 블록이 된다.
[2] show variables like '%host%';
- 해당 명령어를 입력하면 host_cache_size를 확인할 수 있다.
[3] host_cache_size란?
- host_cache 내용을 가진 스키마 테이블 크기를 지정
- 0으로 설정하면 호스트 캐시가 비활성화된다.
[4] host_cache 란?
- MySQL 서버는 IP 주소, 호스트 이름 및 오류 정보와 같은 클라이언트에 대한 정보를 포함하는 메모리 내 호스트 캐시를 유지 관리한다.
- TCP연결에만 호스트 캐시를 사용한다.
2. 해결방법
[1] set global max_connections = 10000;
- 이렇게 늘리면 db 재시작시 초기화 되므로, aws 같은 cloud service를 사용한다면 db parameter group을 수정해서 일괄 적용하자.
[2] SET GLOBAL host_cache_size=300;
- 만약 300보다 적다면 300으로 맞춰주자. 해당 값은 상황에 따라 달라지는 값이니, 잘 판단해서 넣길 바란다.
- 위에 넣은 설정과 똑같이 aws같은 cloud service를 사용한다면 db parameter group을 수정해서 일괄 적용하자.
[3] flush hosts;
- 해당 명령어를 입력하면 block된 host가 unblock이 된다.
feat.
추가적인 내용은 아래 레퍼런스를 확인하면 도움이 많이 될 것이다.
references
https://dev.mysql.com/doc/refman/5.7/en/host-cache.html#host-cache-flushing
https://dev.mysql.com/doc/refman/5.7/en/flush.html#flush-hosts
'Database > MySQL' 카테고리의 다른 글
데이터베이스 반정규화(Denormalization) (0) | 2022.05.23 |
---|---|
데이터베이스 정규화(Normalization) (0) | 2022.05.23 |
트랜잭션 특징 (0) | 2022.05.07 |
PK, FK 특징 (0) | 2022.05.07 |
mysql settings (0) | 2022.01.30 |