반응형
Java spring 과 MySQL 서버를 연결하던 중 time zone 에러가 발생했고, 에러는 아래와 같았다.
java.sql.SQLException: The server time zone value is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. |
1. 에러의 원인
에러의 원인은 서버 시간대의 값이 인식되지 않거나, 스프링(java) 와 MySQL 의 시간대가 다를 때 발생한다고 한다.
2. 해결 방법
1) 우선 MySQL 의 GLOBAL(전역) 및 SESSION time zone (시간대) 값을 확인한다. 아래의 명령어로 확인 가능하다
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;
아래와 같이 나타난다
'SYSTEM'으로 설정이 되어 있다는 것은 MySQL 서버 시간대가 시스템 시간대와 동일한 것으로써 설정되어 있어서 mysql 서버 시간이 구체적으로 명시되어 있지 않는 것을 나타낸다.
이 때문에 Exception이 발생한 것이며, 지금 설명하는 방법으로 하면 되는것 같다. 그 외 몇가지 방법이 더 있지만, 이 방법이 나에게는 가장 쉽다고 판단되었기에 아래의 방법을 사용했다. 나머지 방법에 대해서는 아래 참고 링크로 걸어두고 추후 복습하거나 같은 에러가 발생했을 때 써먹어봐야 겠다.
2) SET statement 명령어 실행
이 방법을 통해 mysql 에 서버 시간을 설정할 수 있다. 시간대는 UTC 부터 오프셋을 나타내는 문자열로 지정이 가능하다고 한다. 가령 UTC 로 지정하려면 '+0:00' 으로 하면되며, KST 로 지정하려면 '+9:00' 으로 지정하면 된다.
SET GLOBAL time_zone = '+9:00'; # 권한 필요
SET time_zone = '+9:00';
성공하면 위와 같이 변한다.
** SET GLOBAL time_zone은 실행하려면 권한이 필요하며 이점 주의할 것(ROOT 권한) **
3. 참고 링크
반응형