나는 Digital Ocean의 일부 Droplet이 운영 체제와 MySQL 사이에 서로 다른 시간대를 가지고 있다는 것을 깨달았습니다. 기본적으로 모든 가상 머신을 브라질 시간대(미국/상파울루)로 구성했으며 tzselect
MySQL이 시스템 기본 시간대를 사용한다고 가정했습니다.
따라서 현재 타임스탬프를 입력하면 CentOS에서 다음과 같은 결과를 얻습니다.
date
Thu Jun 9 09:43:03 BRT 2016
그리고 MySQL에서:
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 12:45:57 |
+---------------------+
1 row in set (0.00 sec)
mysql>
문서 읽기MySQL 5.5, 시간대를 문자열로 사용하는 옵션이 있습니다. 예를 들어 'America/Sao_Paulo'
CentOS 6.5는 MySQL 5.1과 함께 제공되며 +3:00과 같이 시간만 사용하는 동일한 옵션이 없습니다. 나는 시스템에 MySQL 날짜/시간을 구성했기 때문에 MySQL 날짜/시간에 대해 걱정할 필요가 없다고 확신합니다.
내가 만든 CentOS 시간대 구성:
tzselect
나는 MySQL이 이 구성을 채택할 것이라고 생각하면서 브라질 시간대를 설정하기 위해 명령을 사용했습니다 . 재부팅 후 시스템이 tzselect에서 내 구성을 삭제했다는 것을 깨달았습니다. 이를 방지하기 위해 다음 줄을 입력했습니다 /etc/rc.local
.
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
이 구성을 사용하더라도 일부 VM은 UTC이고 다른 VM은 BRT라는 것을 알고 있습니다. 현재로서는 모든 서버를 동일한 방식으로 구성하는 방법을 잘 모르겠습니다. 최소 40대의 시스템입니다.
누군가 시스템의 시간대와 MySQL의 시간대를 올바르게 설정하는 방법을 설명하는 데 도움을 줄 수 있습니까?
추가 정보
시스템: CentOS 6.5 x64 MySQL: 5.1(기본값)
@lese가 요청한 명령은 다음과 같습니다.
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 14:31:19 |
+---------------------+
1 row in set (0.00 sec)
mysql> exit
Bye
$ date
Thu Jun 9 11:31:22 BRT 2016
/etc/sysconfig/clock
파일의 기계 시간은 다음과 같습니다.
[root@xxxx]# cat /etc/sysconfig/clock
ZONE=Etc/UTC
감사합니다.
답변1
문제를 발견했는데,
tzselect
시간대를 선택했지만 /etc/sysconfig/clock이 함께 제공되어 시스템 ZONE=America/New_York
의 날짜/시간 정보를 사용하는 시스템 및 응용 프로그램에 일부 오류가 발생했습니다. 이 문제를 해결하고 BIOS 시계를 시스템 시계와 동기화된 상태로 유지하려면 다음 단계를 따르십시오.
sudo vim /etc/sysconfig/clock
ZONE="America/Sao_Paulo"
UTC=true
ARC=false
그런 다음 시스템을 다시 시작하십시오.
sudo reboot
default_time_zone
(CentOS 의 /etc/my.cnf
경우) 또는 (Ubuntu 기반 운영 체제의 경우) /etc/mysql/my.cnf
불필요한 시간대 매개변수를 제거합니다 .
그런 다음 MySQL 서버 인스턴스를 다시 시작합니다.
sudo /etc/init.d/mysqld restart
마지막으로 모든 구성이 올바른지 확인하려면 다음 명령을 사용하십시오.
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 15:18:32 |
+---------------------+
1 row in set (0.00 sec)
mysql> exit
Bye
[carlos@xxxx-setup ~]$ date
Thu Jun 9 15:18:34 BRT 2016
[carlos@xxx-setup ~]$
@lese님의 관심에 감사드립니다.
답변2
나는 오래된 게시물을 삭제하는 것을 싫어하지만 이 정보를 게시할 수 있는 유일한 장소는 여기인 것 같습니다. CentOS 7에서는 기본 MariaDB 10 설정(CentOS 표준 rpm 사용)에 시간대 파일 위치가 잘못되었습니다. 시간대 정보를 MySQL에 의존하는 애플리케이션에 문제가 발생했습니다. 애플리케이션에서 어떤 설정을 사용하든 항상 UTC 시간대 시간을 반환합니다.
이것:
mysql_tzinfo_to_sql /usr/share/zoneinfo/right |mysql -u root mysql -p
문제는 즉시 수정되었습니다. 재부팅이 필요하지 않습니다! 좋은 측정을 위해 캐시 등을 지웠습니다.