@avorobiev

Неверная временная зона в MySQL?

В MySQL время на час меньше, чем в системе. Почему — не понятно.


Проблема проявилась только на 1 сервере следующей конфигурации:

ОС — Debian GNU/Linux 6.0.3 (squeeze)

MySQL — 5.1.49


В системе корректно настроено текущее время и временная зона:
$ date<br/>
Mon Nov 7 16:49:10 MSK 2011



Пакет tzdata обновлен до последнего доступного:
# apt-cache policy tzdata<br/>
tzdata:<br/>
 Installed: 2011m-0squeeze1<br/>
 Candidate: 2011m-0squeeze1<br/>
 Version table:<br/>
 *** 2011m-0squeeze1 0<br/>
 500 <a href="http://mirror.yandex.ru/debian/">mirror.yandex.ru/debian/</a> squeeze-updates/main amd64 Packages<br/>
 100 /var/lib/dpkg/status<br/>
 2011k-0squeeze1 0<br/>
 500 <a href="http://mirror.yandex.ru/debian/">mirror.yandex.ru/debian/</a> squeeze/main amd64 Packages



Однако, при этом в MySQL время на час меньше, чем в системе:
mysql&gt; select NOW();<br/>
+---------------------+<br/>
| NOW() |<br/>
+---------------------+<br/>
| 2011-11-07 15:49:10 |<br/>
+---------------------+<br/>
1 row in set (0.00 sec)



Хотя нигде: ни в настройках /etc/mysql/my.cnf, ни при старте mysql, системная временная зона не перекрывается:
mysql&gt; SELECT @@global.time_zone, @@session.time_zone;<br/>
+--------------------+---------------------+<br/>
| @@global.time_zone | @@session.time_zone |<br/>
+--------------------+---------------------+<br/>
| SYSTEM | SYSTEM |<br/>
+--------------------+---------------------+<br/>
1 row in set (0.00 sec)



Тем не менее, системное время и время в mysql разное :-( — в mysql время неверное, на час меньше.


Нашел одну странность в MySQL:
mysql&gt; SHOW GLOBAL VARIABLES LIKE '%time_zone%';<br/>
+------------------+--------+<br/>
| Variable_name | Value |<br/>
+------------------+--------+<br/>
| system_time_zone | MSD |<br/>
| time_zone | SYSTEM |<br/>
+------------------+--------+<br/>
2 rows in set (0.00 sec)



Когда было летнее время, для Москвы было 2 временных зоны: зимняя — MSK (UTC+3) и летняя — MSD (UTC+4).

После отмены перехода на зимнее время, должна остаться только 1 зона — MSK, при том она должна быть UTC+4.

У меня же в MySQL MSD вместо MSK, при этом MSD почему-то равно UTC+3, а не UTC+4 как было до 30.10. Откуда вообще взялась временная зона MSD, если в системе задана MSK — не понятно.


Таблицы MySQL mysql:time_* пустные. Т.е. временные зоны должны использоваться системные.


Что нужно сделать, чтобы в MySQL было правильное время, такое же, как и в системе?
  • Вопрос задан
  • 14150 просмотров
Решения вопроса 1
chmv
@chmv
Попробуйте взять более новый tzdata 2011n-1 (из testing).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Хм, та же версия OS и MySQL, но всё нормально — system_time_zone выдаёт MSK.

Вот tzdata другой
apt-cache policy tzdata
tzdata:
Установлен: 2011k-0squeeze1
Кандидат: 2011k-0squeeze1
Таблица версий:
*** 2011k-0squeeze1 0
500 mirror.hetzner.de/debian/packages/ squeeze/main amd64 Packages
500 ftp.uni-bayreuth.de/linux/Debian/debian/ squeeze/main amd64 Packages
100 /var/lib/dpkg/status

Теперь даже как-то страшно будет обновляться :-/
Ответ написан
Перезапустите сервис после обновления tzdata. У меня тоже на FreeBSD выдавалось время меньше чем в системе. Спасло
#service mysql-server restart
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы