mariadb로 데이터를 테스트 하던중 제목과 같은 에러 메세지가 표시 되었습니다.


이벤트가 발생 할때마다 커넥션 풀을 사용 데이터를 저장 하는데....


일정 시간 동안 이벤트가 발생 되지 않다가  이벤트가 발생 되었을때 에러가 발생 하였습니다.


여기저기 뒤져 보니 mariadb또는 MySQL에서는 서버에 설정된 wait_timeout값을 보고 그시간 동안 요청이 없을 경우


서버에서 커넥션을 해지 시켜 버린다고 하네요.. 이건 몰랐었습니다. ㅜㅜ


wait_timeout값이 어떻게 설정 되어 있는지는 아래와 같이 해서 확인해 볼 수 가 있습니다.

mariadb_1.png

위 그림을 보면 mariadb에 접속한 다음 show variables like 'wait%'; 라는 명령을 치면 설정된 시간이 나옵니다.


여기에서 함정은 wait_timeout는 두가지가 있다는게 함정 입니다.

세션이 있고, global이 있습니다.

참고:https://mariadb.com/kb/en/mariadb/server-system-variables/#wait_timeout



위 그림 세션의 wait_timeout입니다. global이 아닙니다.


global은 show global variables like 'wait%'; 이라고 쳐야 나옵니다.

mariadb_2.png


위의 설정을 보면 600초입니다. 그러니까 10분정도 요청이 없으면 서버에서 커넥션을 해지 시켜 버립니다.


해결 방법은 10분은 짧을 수 있으니 세션과 동일한 시간(8시간)으로 설정을 해보겠습니다.

set global wait_timeout=28800;

위를 입력후 확인해 보면 바뀐 것을 알 수 있습니다.

mariadb_3.png


global관 세션의 wait_timeout가 동일 하게 설정된게 확인이 되었지만 여기에 함정이 또 하나 있습니다.


DB서버를 재기동 시키면 다시 원래대로 돌아 갑니다.


그렇다면 값을 계속 유지 하게 하려면 아래와 같이 설정 파일에 추가를 해주고 재기동을 시키면 됩니다.

vi /etc/mysql/conf.d/mariadb.cnf


mariadb_4.png


wait_timeout=28800으로 입력 해주고 저장 , DB재기동을 하면 됩니다.


그러면 8시간 이후에 연결을 해지 시킵니다.


이걸로 저는 해결을 했습니다.




감사합니다.