보관물

Archive for the ‘DB’ Category

java.sql.SQLException: Cannot convert value ‘0000-00-00 00:00:00’ from column X to TIMESTAMP

2월 25, 2016 댓글 남기기

Spring framework 환경에서 MySQL을 연동하여 개발 도중 다음과 같은 오류가 발생하였다.

java.sql.SQLException: Cannot convert value ‘0000-00-00 00:00:00’ from column X to TIMESTAMP

이는 MySQL의  column이 datetime인데 myBatis에서 mapping하려는 변수의 형태는 java.sql.Timestamp이기 때문에 발생하는 문제이다.
MySQL의 TIMESTAMP는 1970-01-01 00:00:01 부터가 시작인데 위의 경우 처럼 그 이전의 값을 넣으려 하기 때문에 위와 같은 Exception이 발생된 것이다.

이를 해결하기 위해서 가장 간단한 방법은 DB에 Zero Date(‘0000-00-00 00:00:00’)를 안쓰면 된다.
하지만 필요에 의해 Zero Date를 써야하는 경우가 발생하는데 이런 경우 다음과 같이 처리하면 해결 될 수 있다.

DB Connection URL에 다음 옵션을 추가한다.

jdbc:mysql://localhost/somedb?zeroDateTimeBehavior=convertToNull

카테고리:MySQL, Spring

Failed to Connect to MySQL at xxx.xxx.xxx.xxx

2월 4, 2016 댓글 남기기

개발을 하다보면 갑자기 다음과 같은 메시지가 보여지며 MySQL에 접속되지 않을 때가 있다.

Failed to Connect to MySQL at xxx.xxx.xxx.xxx with user XXXX

Host ‘xxx.xxx.xxx.xxx’ is blocked because of many connection errors;

unblock with ‘mysqladmin flush-hosts’

증상의 원인은 MySQL의 max_connect_errors의 설정값 (기본값 10) 이상으로 connection error가 발생했기 때문에 해당 host를 block 했기 때문이다.

해결 방법은 간단하다.

대부분 그렇지만 위의 메시지를 보면 친절하게도 해결 방법을 제시해 주고 있다.

DB server에 terminal로 접근하여 위의 메시지에 있는대로 실행하면 된다.

이때 root 권한으로 접근하거나 flush-hosts 권한이 있는 계정으로 접근해야한다.

mysqladmin flush-hosts

혹은

mysqladmin -u root -p flush-hosts

다른 방법으로는 MySQL에 root 권한으로 접속한 다음 다음과 같은 Query를 실행해도 된다.

FLUSH HOSTS;

아니면 다음 처럼 MySQL의 max_connect_errors의 설정값을 늘려줘도 되긴하지만 이것은 block당할 시간(횟수)를 좀 더 벌 뿐이다.

mysqld_safe –max_connect_erros=100 &

카테고리:MySQL