본문 바로가기

리눅스

MySQL에서 Time Zone 관련 변수를 설정하고 사용하는 방법

728x90

MySQL에서 Time Zone 관련 변수를 설정하고 사용하는 방법

global.time_zone은 MySQL 서버에서 모든 세션에 대해 사용되는 기본 타임존입니다. session.time_zone은 현재 세션에서 사용되는 타임존입니다.

 

global.time_zone은 MySQL 설정 파일에 설정되거나 SET GLOBAL time_zone 명령어를 사용하여 변경할 수 있습니다. session.time_zone은 SET time_zone 명령어를 사용하여 변경할 수 있습니다.

 

global.time_zone과 session.time_zone의 차이점

  • global.time_zone은 모든 세션에 대해 사용되지만 session.time_zone은 현재 세션에서만 사용됩니다.
  • global.time_zone은 MySQL 서버를 다시 시작하더라도 유지되지만 session.time_zone은 MySQL 서버를 다시 시작하면 초기화됩니다.
  • global.time_zone은 MySQL 설정 파일에 설정되거나 SET GLOBAL time_zone 명령어를 사용하여 변경할 수 있지만 session.time_zone은 SET time_zone 명령어를 사용하여만 변경할 수 있습니다.

global.time_zone과 session.time_zone을 어떻게 사용할지는 애플리케이션의 요구 사항에 따라 결정해야 합니다. 일반적으로 global.time_zone은 MySQL 서버에서 모든 세션에 대해 사용되는 기본 타임존으로 설정하는 것이 좋습니다. session.time_zone은 특정 세션에서 다른 타임존을 사용해야 하는 경우에만 변경하는 것이 좋습니다.

 

  • 현재시간 및 TimeZone 확인
SELECT NOW(), @@system_time_zone AS TimeZone;
mysql> SELECT NOW(), @@system_time_zone AS TimeZone;
+---------------------+----------+
| NOW()               | TimeZone |
+---------------------+----------+
| 2023-09-19 13:26:08 | KST      |
+---------------------+----------+
1 row in set (0.00 sec)

global.time_zone과 session.time_zone의 사용 예시

  • MySQL 시간대 관련 변수 확인
    • MySQL에서 현재 시간대 관련 변수의 설정을 확인
SELECT @@global.time_zone AS global_time_zone, @@session.time_zone AS session_time_zone;
mysql> SELECT @@global.time_zone AS global_time_zone, @@session.time_zone AS session_time_zone;
+------------------+-------------------+
| global_time_zone | session_time_zone |
+------------------+-------------------+
| SYSTEM           | SYSTEM            |
+------------------+-------------------+
1 row in set (0.00 sec)

또는

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

이 쿼리는 global.time_zone (전역 시간대)와 session.time_zone (세션 시간대) 변수의 현재 설정을 반환합니다.

 

  • MySQL 설정 변경

global.time_zone 설정을 변경하려면 MySQL 서버 설정 파일 (my.cnf 또는 my.ini)을 수정하고 다음 내용을 추가하세요.

vim my.cnf
[mysqld]
default-time-zone = 'Asia/Seoul'  # 원하는 시간대로 변경
728x90
  • global.time_zone 설정(Asia/Seoul로 설정)
    • global.time_zone 변수는 MySQL 서버 자체의 시간대를 설정합니다.
SET GLOBAL time_zone = 'Asia/Seoul';

이 명령은 MySQL 서버의 전역 시간대를 'Asia/Seoul'로 설정합니다. 이 설정은 MySQL 서버가 다시 시작될 때까지 유지됩니다.

 

  • session.time_zone 설정(America/New_York로 설정)
    • session.time_zone 변수는 클라이언트 세션별로 사용자 지정 시간대를 설정합니다. 각 클라이언트 세션은 다른 시간대를 가질 수 있습니다.
SET time_zone = 'America/New_York';

이 명령은 현재 클라이언트 세션의 시간대를 'America/New_York'로 설정합니다. 이 설정은 클라이언트 세션이 열려 있는 동안에만 유지됩니다.

 

  • 현재 global.time_zone과 session.time_zone을 확인
mysql> SELECT @@global.time_zone AS global_time_zone, @@session.time_zone AS session_time_zone;
+------------------+-------------------+
| global_time_zone | session_time_zone |
+------------------+-------------------+
| SYSTEM           | SYSTEM            |
+------------------+-------------------+
1 row in set (0.00 sec)

 

  • MySQL 시간대 데이터베이스 사용
    • MySQL은 시간대 정보를 저장하고 검색하는 데 사용할 수 있는 데이터베이스를 제공합니다. 이 데이터베이스를 사용하여 시간대 정보를 확인하고 변경할 수 있습니다. 예를 들어, 시간대 데이터베이스를 업데이트하려면 다음 명령을 실행합니다.
INSTALL SONAME 'time_zone';

이 명령은 시간대 데이터베이스를 최신 상태로 유지합니다.

 

  • 시간대 변환 및 사용
    • 설정된 시간대를 기반으로 데이터를 저장 및 검색할 수 있습니다. MySQL 함수인 CONVERT_TZ()를 사용하여 시간대 간 변환을 수행할 수 있습니다.
SELECT CONVERT_TZ('2023-09-19 12:00:00', 'UTC', 'America/New_York');

이 쿼리는 '2023-09-19 12:00:00' 시간을 UTC에서 뉴욕 시간으로 변환합니다.

 

MySQL에서 시간대 관련 설정은 서버 전역 또는 세션별로 제어할 수 있으므로 다양한 시나리오에 맞게 설정할 수 있습니다.

 

참고URL

- MySQL Server Time Zone Support : https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html

 

728x90