오류 및 증상
MySQL 서버를 장시간 열어놓은 상태에서 Connection을 장시간 사용하지 않은 상태입니다. 애플리케이션의 MySQL 클라이언트가 다시 실행되면서 새로운 Connection을 얻으려고 할 때 다음과 같은 오류가 발생합니다.
Communications link failure.
Last packet sent to the server was 0 ms ago.
해결 방법
기본적으로 MySQL 서버에 대한 연결 정보를 다시 확인합니다. 연결 정보에 문제가 없음에도 증상이 지속된다면 다음 방법을 사용합니다.
- validationQuery="select 1"
- autoReconnect=True
- MySQL 서버 리부트(ㅠㅠ..)
validationQuery="select 1"
MySQL 클라이언트가 Connection에 대해서 주기적으로 "select 1" 쿼리를 실행하도록 지시합니다. 이 옵션은 다음에도 Connection이 장시간 사용되지 않는 문제를 예방하는 차원에서 사용 할 수 있습니다.
이때 사용되는 쿼리가 "select 1"인 이유는 MySQL 서버에 부하를 최소화하기 위해 가벼운 쿼리를 실행해야 하기 때문입니다(부하가 적은 다른 쿼리를 사용하여도 무관합니다).
autoReconnect=True
접속에 문제가 발생하면 재접속을 시도합니다. 즉, communication link failure가 1회 발생하고 나서 재접속을 하게 됩니다. 이 설정으로 문제를 해결 할 수는 있으나 Connection이 장시간 사용되지 않으면 문제가 재발 할 수 있습니다. 다른 예방책이 우선시 되어야 합니다.
(DataSource) ds.setUrl("jdbc:mysql://127.0.0.1:3307/spring5fs?characterEncoding=utf8&autoReconnect=true");