mysql에서는 대표적으로 두가지의 타임 데이터 타입을 갖고 있다
종류는 두개 : timestamp
, datetime
두개의 타입 외에 한국기준으로 mysql에는 기본적으로 timezone을 설정하는데에 차이가 있다.
바로, UTC(세계 협정시)
와 KST(한국 표준시)
UTC는 GMT(그리니치 평균시)와 비슷하지만 기술적으로는 UTC를 사용한다.(UTC와 GMT는 소수점으로 조금 차이가 있긴 하다.)
KST는 한국표준시로 한국에서 정한 표준시간이다.
아래의 mysql 명령어를 통해서 time_zone이 어떻게 설정되어있는지 확인할 수 있다.
SELECT @@global.time_zone, @@session.time_zone,@@system_time_zone;
아래 명령문 설명
위 SQL 쿼리는 MySQL 서버의 전역(global), 세션(session), 시스템(system) 타임존 설정을 조회.
- @@global.time_zone: MySQL 서버의 전역 타임존 설정. 이는 MySQL 서버 전체에 영향을 미치며, 서버가 시작될 때 설정.
- @@session.time_zone: 현재 세션(클라이언트와의 연결)의 타임존 설정. 각 클라이언트 세션은 자체적으로 타임존을 설정할 수 있다.
- @@system_time_zone: MySQL 시스템 타임존 설정. 이는 시스템의 기본 타임존 설정을 나타낸다.
추가참고 : 아래 명령문은 현재 설정되어있는 timezone과 현재 시간을 알 수 있는 방법의 명령문
SELECT @@time_zone, now();
별도의 타임존 설정을 하지 않았다면 위와 같이 나타날 것이다.
SYSTEM은 서버 시스템 시간을 타임존으로 사용하고 있다는 뜻이다.
한국시간으로 변경하고 싶다면 UTC에서 +9시간을 하거나 timezone을 Asia/Seoul로 변경하여야 한다.
변경 방법은 여러 가지가 있다.
그중에 하나의 방법.
① 터미널로 접속하여 아래와 같은 명령어로 mysqld.cnf 파일에 접근한다.
(sudo로 접근해야 한다. 아닐 경우 readonly 파일이기에 수정이 불가능...)
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
② 아래의 코드를 파일 맨 밑에 추가한다.
UTC기준으로 한국시간이 +9:00이므로 아래와 같이 작성, 다른 시간대를 원할 경우 해당 시간차로 작성한다.
(오타가 발생할 경우, mysql 재시작이 되지 않으니 주의!!)
default-time-zone="+09:00"
③ mysql을 재시작한다.
sudo service mysql restart
▶혹시 아래와 같이 에러가 발생한다면, error.log를 확인하자 (나의 경우는 mysqld.cnf 수정할 때 만든 오타 때문이었다..)
에러 로그는 cat /var/log/mysql/error.log 여기서 확인
④ mysql 타임존 다시 확인
UTC 기준으로 +9:00 된 것을 확인할 수 있다.