JW공부스토리

[MySQL] mysql server timezone 한국으로 설정하기. 본문

데이터베이스

[MySQL] mysql server timezone 한국으로 설정하기.

사용자 jwKim96 2018. 12. 31. 02:07

 

timezone이란? (넘어가실 분들은 여기클릭)

 

 

<미국의 timezone>

 

한국은 표준시(대한민국 표준시 - KST)를 하나의 시간대(timezone)만 사용하지만 미국처럼 영토가 넓은

국가들은 timezone이 여러개 있습니다. 또한 각 타임존 역시 2종류로 나누어 집니다.

타임존의 약자에 S가 들어가면 겨울의 시간, D가 들어가면 서머타임이 적용될 때의 시간대 입니다.

 

그리고 '그리니치 천문대'가 있는곳의 시간은 UTC 입니다.

그래서 예를들어 UTC-8 은 그리니치 천문대가 있는위치. 즉 세계협정시에서 8시간을 뺀 시간이라는

의미 입니다. (하이픈이 아니라 마이너스 부호임)

 

KST는 UTC+9입니다.

그리고 미국 캘리포니아주의 LA는 겨울에는 태평양 표준시인  PST(UTC-8) 을 사용합니다.

그리고 섬머타임에는  PDT(UTC-7)을 사용합니다.

그래서 한국과의 시차를 비교해 본다면

 

겨울 시간

한국-LA  :  ( UTC+9 ) - (UTC - 8) = 17시간

여름 시간

한국-LA  :  ( UTC+9 ) - (UTC - 7) = 16시간

 

이렇게 여름, 겨울에 따라 시차에 변동이 생깁니다.

 

TimeZone에 관해 알아보았습니다.

 

 

이제 mysql에서 TimeZone변경에 대해 알아보겠습니다.(Windows10 기준)

 

1번 방법

먼저 mysql shell (혹은 console 에서 mysql실행)

 

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

time zone이 설정이 되어있지 않다면 아마 위 문장을 실행하면 다음과 같은 결과를 받을 것이다.

 

그렇다면 먼저 

 

SET GLOBAL time_zone='Asia/Seoul';

SET time_zone='Asia/Seoul';

 

위 두 문장을 실행해 보자.

 

mysql> select @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| Asia/Seoul         | Asia/Seoul          |
+--------------------+---------------------+
1 row in set (0.00 sec)

위와 같은 결과를 얻는다면 성공!

 

 

 

 

 

 

 

2번 방법

SELECT b.name, a.time_zone_id 
FROM mysql.time_zone a, mysql.time_zone_name b 
WHERE a.time_zone_id = b.time_zone_id AND b.name LIKE '%Seoul';
 
Empty set (0.00 sec)

 

첫번째 문장을 실행하면

 

네번째 문장 처럼 결과가 나올것입니다.

 

set time_zone='Asia/Seoul';

 

이렇게 명령어를 실행해줍니다.

 

ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Seoul'

 

만약 이런 에러가 발생한다면, 아래를 따라해 주세요.

 

https://dev.mysql.com/downloads/timezones.html

 

아래 링크에서

 

 

윈도우 유저는 Non POSIX with leap seconds 받으시면 됩니다.(전 이거 받았습니다)

 

더보기

POSIX란? 

POSIX(포직스, /ˈpɒzɪks/)는 이식 가능 운영 체제 인터페이스

(interface, portable operating system interface)의 약자로, 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격이다.

다운로드 후 압축을 풀고,

 

약 47,000줄 정도의 sql을 mysql 스키마에 실행한다. (use mysql)

 

다 풀고나서 아래의 쿼리로 다시 확인한다.

 

SELECT b.name, a.time_zone_id
FROM mysql.time_zone a, mysql.time_zone_name b
WHERE a.time_zone_id = b.time_zone_id AND b.name LIKE '%Seoul';

 

 

mysql> SELECT b.name, a.time_zone_id
    -> FROM mysql.time_zone a, mysql.time_zone_name b                 
    -> WHERE a.time_zone_id = b.time_zone_id AND b.name LIKE '%Seoul';
    
+------------+--------------+
| name       | time_zone_id |
+------------+--------------+
| Asia/Seoul |          308 |
+------------+--------------+

 

이런 결과를 얻었다면 성공.

 

 

 

마지막으로, my.ini파일의 제일 마지막줄에 

 

 

 
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

(ProgramData폴더는 숨김폴더입니다.)

 

 

 

아래의 문장을 추가해 준다 (#은 주석문장...)

 

default-time-zone=Asia/Seoul

 

 

 

그리고 mysql서버를 재시작 해준다.

 

 

 

 

그리고 mysql에서 다시

 

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| Asia/Seoul         | Asia/Seoul          |
+--------------------+---------------------+

 

 

위와 같은 결과를 얻는다면, 성공!

 

 

 

 

 

 

 

10 Comments
댓글쓰기 폼