[CentOS 7] timedatectl을 이용하여 서버의 timezone 변경하기

2020. 3. 20. 14:41CentOS 7/Basic

반응형
  1. 개요
  2. timezone 조회
  3. timezone 변경
    3-1) timedatectl 명령어를 이용한 변경
    3-2) /etc/localtime 심볼릭 링크 직접 변경
  4. 결과
  5. zdump를 이용 timezone 파일 조회

1. 개요

MySQL 서버의 system_time_zone은 시스템에 설정된 timezone을 나타냅니다.
my.cnf에 default_time_zone을 설정하거나
runtime의 time_zone에 timezone을 변경해도 @@system_time_zone은 변경되지 않습니다.

mysql> select @@system_time_zone;
+--------------------+
| @@system_time_zone |
+--------------------+
| JST                |
+--------------------+

시스템의 timezone이 JST로 설정되어 있네요.
@@system_time_zone을 바꾸고 싶다면, CentOS 7 서버에 설정된 timezone을 변경해야 합니다.


2. timezone 조회

서버의 timezone을 조회하는 방법은 다양합니다.
그중, 간단하게 localtime을 조회하는 명령어인 date와 상세한 timezone 정보를 조회하는 timedatectl 를 살펴보도록 하겠습니다.

시스템 날짜 및 시각을 출력하는 date 명령어를 실행해봅니다.

[jini@apple ~]$ date
2020. 08. 30. () 00:16:34 JST

date 명령어는 한줄로 간단하게 시스템 시각을 출력합니다.
MySQL에서와 마찬가지로 timezone이 JST로 나왔습니다.
※ 참고로 datetime format은 각 터미널 환경에 따라 다를 수 있습니다.

[jini@apple ~]$ timedatectl
      Local time: 일 2020-08-30 00:17:03 JST
  Universal time: 토 2020-08-29 15:17:03 UTC
        RTC time: 토 2020-08-29 15:17:02
       Time zone: Japan (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

timedatectl 명령어를 이용하면 보다 자세하게 timezone 정보를 확인할 수 있습니다.

date 명령어든 timedatectl 명령어든 출력형식은 다르지만 내부적으로는 /etc/localtime 심볼릭 링크가 가리키고 있는 타임존에 의해 출력됩니다.

[jini@apple ~]$ ll /etc/localtime
lrwxrwxrwx 1 root root 25 Jan 20 17:38 /etc/localtime -> /usr/share/zoneinfo/Japan

3. timezone 변경

timezone 을 변경하기 위해서는 /etc/localtime 심볼릭링크가 가리키는 타임존을 변경하면 됩니다.
직접 링크를 변경해도 되고, timedatectl 명령어를 이용하여 변경해도 됩니다.
timedatectl 명령어르 사용하는 것도 내부적으로는 /etc/localtime 링크를 변경하는 것이니 어떤 방식을 사용해도 상관없습니다.

3-1) timedatectl 명령어를 이용한 변경

[jini@apple ~]$ timedatectl list-timezones | grep -i seoul
Asia/Seoul

timedatectl list-timezones를 이용하면 지원하는 타임존 목록을 확인할 수 있습니다.
그 중, 저는 seoul 문자열이 표함된 타임존을 조회해보았습니다.

[jini@apple ~]$ sudo timedatectl set-timezone Asia/Seoul

set-timezone를 이용하여 타임존을 변경하였습니다.

[jini@apple ~]$ timedatectl
      Local time: 일 2020-08-30 00:42:22 KST
  Universal time: 토 2020-08-29 15:42:22 UTC
        RTC time: 토 2020-08-29 15:42:21
       Time zone: Asia/Seoul (KST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

다시 타임존을 조회해보니, 타임존이 Asia/Seoul로 변경된 것을 확인 할 수 있습니다.

[jini@apple ~]$ ll /etc/localtime
lrwxrwxrwx 1 root root 32  8월 30 00:42 /etc/localtime -> ../usr/share/zoneinfo/Asia/Seoul

/etc/localtime 의 링크 역시 잘 바뀌었네요.

3-2) /etc/localtime 심볼릭 링크 직접 변경

[jini@apple ~]$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

/etc/localtime이 가리키는 대상을 /usr/share/zoneinfo/Asia/Seoul 로 변경합니다.
(※ 기존파일에 덮어쓰기 위해 -f 옵션을 추가했습니다.)


4. 결과

MySQL 서버에서도 시스템 타임존이 변경되었는지 확인해봅시다.

변경된 서버의 시스템 설정 정보가 MySQL에 반영되기 위해 MySQL을 restart 합니다.
시스템 설정 변경된 정보를 mysql에 반영하기 위해 mysql을 restart 합니다.

[jini@apple ~]$ sudo systemctl restart mysqld

그리고 mysql client 접속하여 @@system_time_zone을 조회합니다.

mysql> select @@system_time_zone;
+--------------------+
| @@system_time_zone |
+--------------------+
| KST                |
+--------------------+
mysql> SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
+--------------------------------+
| TIMEDIFF(NOW(), UTC_TIMESTAMP) |
+--------------------------------+
| 09:00:00                       |
+--------------------------------+

KST는 UTC+09:00 입니다.
UTC_TIMESTAMP와의 시간차가 09:00:00이니 정상적으로 설정되었음을 알 수 있습니다.


5. zdump를 이용 timezone 파일 조회

/etc/localtime은 텍스트형 데이터가 아니기 때문에 vim 명령어로 읽어들일 수 없습니다.
zdump 명령어를 이용하면 timezone을 읽을 수 있습니다.

[jini@apple ~]$ zdump /etc/localtime
/etc/localtime  Sun Aug 30 00:58:43 2020 KST
[jini@apple ~]$ zdump /usr/share/zoneinfo/Asia/Seoul
/usr/share/zoneinfo/Asia/Seoul  Sun Aug 30 00:58:46 2020 KST
[jini@apple ~]$ zdump /usr/share/zoneinfo/UTC
/usr/share/zoneinfo/UTC  Sat Aug 29 15:58:48 2020 UTC

+++

  • CentOS 7 timezone 변경하기
  • MySQL @@system_time_zone 변경하기
  • timedatectl을 이용한 timezone 변경
  • /etc/localtime 읽기
728x90
반응형