[DB] MySQL - autoReconnect=true

|
서버의 로그를 확인하던 중 주기적으로 커넥션 관련해서 오류가 발생하는 것을 알 수 있었다.

로그에서 친절하게도 wait_timeout의 값을 수정하거나 autoReconnect를 true로 설정하도록 안내하고 있었다.

로그내용

일단은 로그에서 안내하는 방법 중 autoReconnect=true로 설정하는 부분을 url 뒤편에 추가하고 상태를 지켜보고 있다.

context의 하위태그인 resource 태그에서 url 속성에 해당내용을 추가하면 되겠다.

url="jdbc:mysql://localhost:3306/test?autoReconnect=true"




근본적으로 이러한 문제가 발생하는 원인이 궁금해서 검색을 해보았다.

검색결과 MySQL은 내부적으로 커넥션을 장시간(8시간)동안 사용하지않으면 자동종료를 수행한다.

커넥션 풀에 존재하는 커넥션을 사용하려고 했는데 이미 접속이 끊긴 커넥션이기 때문에 사용시에 문제가 발생하는 것이었다.

autoReconnect 옵션을 사용할 경우 커넥션에 문제발생시 재접속을 통해 문제를 해결한다.

하지만 이 옵션에도 문제점은 존재한다. autoRecoonect를 사용하면 재접속을 통해 커넥션 연결의 문제는 해결하지만 

최초 문제 발생시에는 에러를 발생시킨다. 사용자에게 에러가 발생했음을 알려주는 것이다. 



이것마저 해결하고자 하면 DBCP의 파라미터 중 validationQuery를 사용하여 커넥션이 정상적으로 연결되었는지를 확인할 수 있다.

커넥션 연결 전에 매번 검증을 하기때문에 속도가 중요한 시스템의 경우 사용을 고려해야 한다. 

DBCP 파라미터에도 정리해 놓았지만 반드시 SELECT 절을 이용한 쿼리여야만 하고 가장 간단한 쿼리가 좋다(ex SELECT 1)


아직 서버에는 validationQuery를 적용하지 않았지만 로그를 살펴보고 적용할지 결정해야겠다. 


And