오퍼링 > 소프트웨어 테크놀로지 서비스 > 오픈소스 SW > DBMS > 자료실

오픈소스 SW 자료실 - DBMS

오픈소스 DBMS 관련 기술서비스 정보 및 자료를 제공합니다.

[FAQ/MariaDB] TIMEZONE을 OS 환경값과 상관없이 GMT로 고정하려면 어떻게 해야 하나요?

2021.02.03

Question


MariaDB 타임존 관련하여 문의드립니다. 서버 OS환경이 KST로 설정되어 있고, DB 상에서는 time_zone 과 관련된 파라메터들이 미설정 되어 있습니다.

서버 OS환경이 KST로 설정되어 있고, DB 상에서는 time_zone 과 관련된 파라메터들이 미설정

만약, OS 환경값과 상관 없이 DB time_zone을 GMT 로 픽스시키고 싶다면 어떻게 해야하나요?




Answer


time_zone 설정은 dynamic 하게 변경 가능하므로 재시작을 하지 않으셔도 됩니다.
[mysqld]나 [mariadb] 섹션에 "default-time-zone=GMT" 로 설정을 하시고 아래의 전역 변수만 dynamic하게 변경하면 타임존 변경이 가능합니다.

섹션에 "default-time-zone=GMT" 로 설정을 하시고 아래의 전역 변수만 dynamic하게 변경하면 타임존 변경

다만 위의 GMT값으로 전역 time_zone변수를 변경하면 세션 생성 시 타임존 설정을 하지 않는 세션들은 기존의 세션의 TIMESTAMP 컬럼들은 +9:00으로 보이고 새롭게 생성되는 세션들은 +0:00으로 보일 수도 있으니 재기동하는 것도 좋을 것 같습니다.

참고로 system_time_zone의 값은 변경할 수 없습니다. system_time_zone의 값을 변경하려면 DB 기동 시에 아래의 작업들 중 하나가 필요합니다.
따라서 system_time_zone의 값 변경은 모두 DB 재기동이 필요합니다.
(참고: https://mariadb.com/kb/en/library/time-zones/)

OS에 설정된 TZ 환경 변수를 변경하거나, /etc/localtime 의 링크를 변경하거나, systemd를 사용하시는 경우 timedatectl 유틸을 사용하거나 masqld_safe을 사용하시면 [ㅡysqld_safe] 섹션에 timzone 값을 설정하는 방법이 있습니다.

현재 time_zone 시스템 변수 설정을 하지 않아 기본값인 SYSTEM으로 사용 중인 것으로 보입니다.
기본 값 SYSTEM인 경우 커넥션을 만들 때 system_time_zone의 값을 그대로 timezone으로 사용하게 되며, time_zone의 값을 "SYSTEM"이 아닌 다른 설정 하신 경우에는 커넥션을 만들 때 system_time_zone이 아닌 time_zone 값을 사용합니다.

즉 OS 타임존 값이 BST에서 GMT 로 변경하더라도 system 타임존의 값은 MariaDB Server가 기동될 때 OS 정의되므로 DB를 restart 할 때까지 BST 로 유지됩니다.
아래는 샘플 케이스입니다.

1. 현재 타임존 확인

현재 타임존 확인


2. OS 타임존 변경 및 변경 후 DB 타임존 확인

OS 타임존 변경 및 변경 후 DB 타임존 확인


3. DB 재기동 및 변경 후 DB 타임존 확인

DB 재기동 및 변경 후 DB 타임존 확인