본문 바로가기

DB & Storage & Stream/Mysql, MariaDB

[Database/MySQL, MariaDB] MySQL 연결 시 Communication Link Failure 오류

오류 및 증상

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");