|
Tips 2008. 1. 31. 17:21
- 구글링을 해보면 이 문제로 많은 사람들이 삽질을 이미 했다. 그리고 대다수가 버그라고 생각하고 있었다.
- 버그가 아니다. 당연한 삽질이었다.
- 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이 먹었다.
- 뭐.. 그런거다.. 설정 잘 돼있는거 가지구 착각하고, 삽질하지 말자.
|