MySQL에서 시간대(timezone)를 변경하는 작업은 서버 운영이나 데이터 정합성 관리에 있어 매우 중요합니다. MySQL은 SET 명령어를 사용해 시간대를 손쉽게 변경할 수 있으며, 세션 단위와 전역(Global) 단위 두 가지 방식으로 적용할 수 있습니다.
1. MySQL 시간대 변경 기본 문법
시간대를 변경하는 기본적인 문법은 다음과 같습니다.
SET time_zone = '값';
여기서 '값'에는 '+8:00'과 같은 UTC 오프셋 형식 또는 'Asia/Seoul'과 같은 명명된 시간대(named time zone) 형식을 사용할 수 있습니다.
2. 세션(Session) 단위 시간대 변경
현재 접속한 세션에만 시간대를 적용하려면 아래와 같이 실행합니다.
mysql> SET time_zone = '+8:00'; Query OK, 0 rows affected (0.00 sec)
위 예제는 시간대를 UTC보다 8시간 빠른 값으로 변경한 것입니다. 이 설정은 해당 세션(접속)이 종료되면 자동으로 해제되며, 다른 세션에는 영향을 주지 않습니다.
현재 시간대 확인하기
변경 전후의 시간대 값을 확인하려면 아래 쿼리를 사용하면 됩니다.
mysql> SELECT @@global.time_zone, @@session.time_zone;
3. 전역(Global) 시간대 변경
서버 전체에 시간대를 적용하려면 GLOBAL 키워드를 함께 사용합니다. 기본 문법은 다음과 같습니다.
SET GLOBAL time_zone = '값';
실제 적용 예시는 아래와 같습니다.
mysql> SET GLOBAL time_zone = '+8:00'; Query OK, 0 rows affected (0.00 sec)
위 쿼리를 실행하면 이후 새로 연결되는 모든 세션에 해당 시간대가 적용됩니다. 단, 이미 연결되어 있는 기존 세션에는 영향을 주지 않으므로 주의가 필요합니다.
4. 참고 사항
- 영구 적용:
SET GLOBAL로 변경한 값은 MySQL 서버 재시작 시 초기화됩니다. 영구적으로 유지하려면 설정 파일(my.cnf 또는 my.ini)의 [mysqld] 섹션에default-time-zone = '+09:00'과 같이 추가해야 합니다. - 명명된 시간대 사용: 'Asia/Seoul'처럼 지역 이름 기반 시간대를 사용하려면 mysql 데이터베이스에 타임존 테이블이 로드되어 있어야 합니다.
- 권한: 전역 시간대 변경에는
SYSTEM_VARIABLES_ADMIN권한(또는 SUPER 권한)이 필요합니다.
이처럼 MySQL의 시간대 변경은 간단한 SET 명령어로 처리할 수 있으며, 용도에 따라 세션 단위와 전역 단위를 구분하여 사용하는 것이 좋습니다.