Tag Archives: mysql

DBCP + JDBC(MySQL) 사용시 간혹 뜨는 Could not open JDBC Connection for transaction

DBCP(Database Connection Pool)을 사용하다 보면 가끔씩 만나게 되는 에러가 있다.

사용자 삽입 이미지
내 추측에는 DBCP의 특성상 많은 수의 커넥션을 미리 맺어 놓고, 어플리케이션이 풀에서 커넥션을 빌려다 사용하고 환원하는 식인데, 맺어놓은 커넥션을 MySQL의 커넥터가 끊어버리는듯 하다.

그래서 풀에 정상적으로 요청을 하였지만 그것이 MySQL 서버에까지 요청이 가지는 못하는것이라 판단된다.

이때 DB URL에 다음과 같은 옵션을 추가해 주면 된다.

interactiveClient=true&autoReconnect=true&autoReconnectForPools=true

사실 interactiveClient만 있어도 된다. CLIENT_INTERACTIVE 플래그로 타임아웃 관리하던것을 INTERACTIVE_TIMEOUT가 하게 된다.

MySQL 4.0 -> 5.0 한번에 업글시 문제점 하나

정확한 이유는 모르겠지만 저런 무리한 업그레이드를 감행한 이후 발견한 문제점이다.

나머지는 모두 정상인데 SHOW DATABASES 명령시 보이지 말아야 할 모든 Database가 나오는것이었다.

문제점을 찾아봐도 원인을 발견하지 못했는데, 오늘 잠깐 보니 문제점이 바로 한눈에 들어왔다.

데이터베이스 mysql 안의 user 테이블에 보면 Create_tmp_table_priv, Lock_tables_priv 이라는 칼럼이 있다.

이들의 값이 N으로 되어야 모든 데이터베이스 리스팅을 막을수 있다. 물론 rootY여야 하겠지.

사용자 삽입 이미지
이런식으로 되어있나 확인해 봅시다.