문서번호 : 11-431680
유의 사항
•
Timezone 설정의 반영 우선 순위는 다음과 같다. (앞이 우선)
◦
SingleStoreDB 설정 > 사용자 쉘 환경변수 > OS 설정
•
SingleStoreDB에서 직접 설정하는 것을 권장한다.
•
Timezone설정을 반영하려면, 노드를 재기동해야 한다.
timezone 변경 시 주의 사항
timestamp 데이터 타입의 데이터는 UTC로 변환되어 DB에 저장되고, Client에서 조회 시 DB timezone으로 자동 변환된다. 그러므로, timezone이 변경되면, 조회 되는 결과 값도 바뀌게 된다. 또한, 리터럴 조건을 사용하는 경우도 변경되는 timezone으로 적용된다.
만약, Client Application이 timezone 변경에 대응하지 않을 경우, 달라진 timestamp 값으로 인한 혼선이 야기될 수 있다.
Timezone 확인
방법 1: SingleStoreDB 설정 확인
1.
TIME_ZONE 변수 조회
•
이 변수는 MySQL 표준을 준수하기 위해서만 SingleStoreDB에 존재한다. 이 변수를 설정해도 아무 작업도 수행하지 않는다.
•
만약, OS의 Timezone 설정을 따르는 경우 변수의 값은 “SYSTEM” 이다.
◦
기본값이며, 변경된 적이 없거나, 직접 “SYSTEM”으로 설정한 경우이다.
•
조회 명령어 및 예시들
-- 예시 1 : 변수명 대소문자 구분 없음, show variables like ... 도 가능
singlestore> SELECT @@TIME_ZONE;
+-------------+
| @@TIME_ZONE |
+-------------+
| Asia/Seoul |
+-------------+
-- 예시 2
+-------------+
| +09:00 |
+-------------+
-- 예시 3
+-------------+
| UTC |
+-------------+
-- 예시 4
+-------------+
| SYSTEM |
+-------------+
SQL
복사
2.
SYSTEM_TIME_ZONE 변수 조회 (TIME_ZONE이 SYSTEM일때 적용)
•
이 변수는 사용자 쉘 환경변수 또는 OS 설정 Timezone을 저장하며, 읽기 전용이다.
•
TIME_ZONE이 SYSTEM일때 이 변수의 값이 적용된다.
•
조회 결과 예시들
-- 예시 1 : 변수명 대소문자 구분 없음, show variables like ... 도 가능
singlestore> SELECT @@SYSTEM_TIME_ZONE;
+--------------------+
| @@SYSTEM_TIME_ZONE |
+--------------------+
| KST |
+--------------------+
-- 예시 2
+--------------------+
| UTC |
+--------------------+
SQL
복사
방법 2: OS 설정 확인
•
타임존 설정중 우선순위가 가장 낮으므로,
SingleStoreDB의 TIME_ZONE이 SYSTEM 이고, 쉘 환경변수TZ 설정이 없을 때 반영된다.
•
조회 명령어 및 예시
$ timedatectl status
Warning: Ignoring the TZ variable. Reading the system's time zone setting only.
Local time: 수 2023-08-30 17:09:08 KST <-- 이 설정을 확인한다.
Universal time: 수 2023-08-30 08:09:08 UTC
RTC time: 수 2023-08-30 08:09:08
Time zone: Asia/Seoul (KST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
SQL
복사
방법 3: 사용자 쉘 환경변수 확인
1.
toolbox를 실행할 OS 사용자에 로그인
2.
쉘 환경변수 TZ 확인
-- 방안 1
$ echo $TZ
Asia/Seoul
-- 방안 2
$ env | grep TZ
TZ=Asia/Seoul
Bash
복사
Timezone 변경
Timezone설정을 반영하려면, 노드를 재기동해야 한다.
방법 1: SingleStoreDB 설정 변경 (권장)
•
default_time_zone 구성 옵션을 사용하여 Timezone을 설정할 수 있다.
•
이 변수는 show variables명령으로 확인할 수 없고, 위에서 기술한 방법으로 확인할 수 있다.
1.
엔진 변수 설정 변경
•
변수명 : default_time_zone
•
설정 형식 : timezone / GMT OFFSET 방식 (+09:00)
# KST 일때
$ sdb-admin update-config --key default_time_zone --value "Asia/Seoul" --all
$ sdb-admin update-config --key default_time_zone --value "+09:00" --all
$ sdb-admin update-config --key default_time_zone --value "+9:00" --all
# UTC 일때
$ sdb-admin update-config --key default_time_zone --value "UTC" --all
$ sdb-admin update-config --key default_time_zone --value "00:00" --all
# system 일때 (대소문자 구분없음)
$ sdb-admin update-config --key default_time_zone --value "system" --all
Bash
복사
•
유의 사항 : 잘못 설정된 경우
◦
예시와 같은 잘못된 설정값일때도, 명령은 오류 없이 실행 된다.
$ sdb-admin update-config --key default_time_zone --value "KST" --all
$ sdb-admin update-config --key default_time_zone --value "+09" --all
$ sdb-admin update-config --key default_time_zone --value "+9" --all
Bash
복사
◦
하지만, 잘못된 설정값으로 인해 노드 기동시 오류가 발생한다.
◦
그러면, 형식에 맞게 재 설정하면 된다.
2.
모든(또는 해당) 노드들 재기동
$ sdb-admin restart-node --all
Bash
복사
방법 2: OS 설정 변경
1.
Timezone 설정
•
설정값의 종류는 정해져 있음.
2.
모든(또는 해당) 노드들 재기동
# 필요시 설정 가능한 값 목록 확인
$ timedatectl list-timezones
$ timedatectl set-timezone Asia/Seoul
$ timedatectl # 또는 timedatectl status
$ sdb-admin restart-node --all
SQL
복사
방법 3: 사용자 쉘 환경변수 변경
주의 : 반영 범위 관련
1. sdb-admin start/restart 명령을 실행하는 해당 쉘에만 반영된다.
2. 원격 호스트의 노드들은 이 설정이 반영되지 않고, OS 설정이 반영된다.
3. 단일 호스트에 클러스터를 구성하는 경우에만 사용하도록 한다.
1.
환경변수 TZ 설정
2.
영구 반영을 위해 .bash_profile에 추가
3.
모든(또는 해당) 노드들 재기동
$ export TZ='Asia/Seoul'
# 영구 반영시 위의 명령 구문을 .bash_profile에 추가한다.
$ sdb-admin restart-node --all
Bash
복사
References
History
일자 | 작성자 | 비고 |
2022.07.11 | min | |
2022.09.16 | kkh | OS Timezone 내용 추가 및 관련 정리 |
2023.08.30 | kkh | 우선순위 관련한 내용으로 편집 |
2023.10.05 | mk.Kang | timezone 변경 시 주의 사항 내용 추가 |