강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
mysql에서 타임존 변경하기
조회 : 22,785  


mysql에서 타임존 변경하기

 

0. 개요

사이트 및 서버를 운영시 서버의 위치와 서비스 지역이 달라 시간 설정이

문제가 되는 경우가 발생한다 .

이런경우 프로그램상에서 변경도 가능하나 DB에서 직접 변경함으로

프로그램의 단순화를 유지할 수 있다 .

time_zone 변경부분에 대해 알아보도록 하자 .


1. time_zone 관련된 환경변수 및 테이블

time_zone 관련된 환경변수
system_time_zone : mysql서버가 스타트할 당시의 호스트머신의 localtime의 값을 저장하는 변수이다
한번 설정되면 변경되지않는다 .

time_zone : mysql에서 실제 참조하는 time_zone을 저장하는 변수이다.
기본값은 SYSTEM 이며 이는 system_time_zone을 계승한다는 의미이다.

time_zone 테이블
time_zone : 각 타임존의 아이디가 저장되며 leaf 세컨드 설정의 가부를 지정한다.
time_zone_leap_second :
time_zone_name : 각 타임존의 명칭과 타임스템프에 대한 정의가 저장된다 .
time_zone_transition :
time_zone_transition_type :


2. time_zone 변경시 확인사항

타임존설정 변경이 가능한 경우

mysql> use mysql
Database changed
mysql> select * from time_zone_name where name='KST';
+------+--------------+
| Name | Time_zone_id |
+------+--------------+
| KST | 1652 |
+------+--------------+
1 row in set (0.00 sec)


타임존설정 변경이 불가능한 경우
mysql> use mysql
Database changed
mysql> select * from time_zone_name where name='KST';
Empty set (0.00 sec)

타임존설정 변경이 불가능한 경우라도 time_zone 데이타베이스 구축하면 타임존설정 변경이 가능해진다.


3. time_zone 데이타베이스 구축


호스트 머신의 time_zone 데이타를 mysql에서 사용가능한 데이타로 컨버팅하기 위해서는 mysql_tzinfo_to_sql을 이용한다.

 

호스트 머신의 time_zone 데이타를 mysql에서 사용가능한형태로 변경
/usr/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo > /root/mysql_time_zone.sql

싱글 time_zone 데이타를 mysql에서 사용가능한형태로 변경
/usr/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo/Asia/Seoul KST > /root/mysql_time_zone_seoul.sql

leaf 세컨드 time_zone데이터를 mysql에서 사용가능한형태로 변경(솔직히 뭐하는넘인지 몰것다.)
/usr/local/mysql/bin/mysql_tzinfo_to_sql --leaf /usr/share/zoneinfo/Asia/Seoul > /root/mysql_time_zone_seoul.sql


time_zone 데이타를 mysql에서 사용하도록 임포트 한다 .
mysql -u root -p mysql < /root/mysql_time_zone.sql

싱글 time_zone 데이타를 mysql에서 사용하도록 임포트 한다 .
mysql -u root -p mysql < /root/mysql_time_zone_seoul.sql

 

4. 타임존 변경 및 확인

mysql> show variables;
....
| system_time_zone | EET |
....
| time_zone | SYSTEM |
....


mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-02-12 06:39:09 |
+---------------------+
1 row in set (0.00 sec)

mysql> set global time_zone = 'KST';
mysql> quit


환경변수 수정후 적용된겂을 보기위해 현재의 세션을 종료 후 재접속을 한다.


]# mysql -u root

mysql> show variables;
....
| system_time_zone | EET |
....
| time_zone | KST |
....

mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-02-12 13:39:20 |
+---------------------+


5. 맺음말
지금까지 time_zone의 변경에 관해서 알아보았다

이런걸 어디에 쓰느냐 필요하느냐 라고 하는사람도 있젰지만

time_zone을 변경하는 이유는 앞에서 설명한 것과 같이 프로그램의 단순화도 있지만

시간차이에의해 발생하는 혼란 및 여러 시간대를 지원해야하는경우 (다국적 사이트 운영)에도

해당 국가별 지역 시간대를 보다 쉽고 단순화시길수 있다 .

비록 단순한 부분이며 간단한작업이지만 모르고있다면 시간설정을 변경할때마다

mysql을 리스타트를 시켜야하며 그에따르는 부담이 오히려 더커진다.

그리고 여러 time_zone을 지원해야 하는 경우에 대해 생각해 보자.


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1654


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
이재석
본명 : 이재석
e-mail : locli앳superuser.co.kr
소속 : (주)수퍼유저코리아