.
SHOW VARIABLES LIKE 'wait_timeout';
의 값을 확인해보세요. 기본 값은 28800(초) 입니다.
구글링을 해보면 이 문제로 많은 사람들이 삽질을 이미 했다. 그리고 대다수가 버그라고 생각하고 있었다. 버그가 아니다. 당연한 삽질이었다. my.cnf의 [mysqld] section에 wait_timeout=300 으로 설정 추가하고 다시 띄운다.(기본값은 28800) mysql로 접속하여 show variables like 'wait_timeout' 을 해본다. 어라? 28800이다. 왜 적용이 안되는 걸까.. show variables like '%timeout%'을 해보면, interactive_timeout이라는게 있는데, 이게 바로 커맨드라인 클라이언트인 mysql (보통 /usr/local/mysql/bin/mysql 또는 /usr/local/bin/mysql 등등)을 말하는 거다. 당연히 mysql 기본 클라이언트로 interactive mode접속하면 wait_timeout을 interactive_timeout값으로 바꿔주는거다. 왜냐구? interactive mode로 접속했으니까 그렇지 ㅡ_ㅡ show global variables like '%timeout%'을 해본다. wait_timeout=300으로 설정이 잘 되어있다. 즉, interactive mode가 아닌 접속 쓰레드에 대해서 wait_timeout이 새로 설정한 값이 된다는거다. 당연히 mysql로 접속해서는 확인을 못한다. 본인이 작성하는 프로그램의 라이브러리를 이용하여 테스트 커넥션을 만들고 300초간 아무것도 하지 않은 후에 쿼리를 하나 날려보자 "SELECT 1" 같은.. 에러가 난다. 2006, Mysql server has gone away. 설정한 wait_timeout이 먹었다. 뭐.. 그런거다.. 설정 잘 돼있는거 가지구 착각하고, 삽질하지 말자. -출처 : 서버구글 -