В 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> 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> 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> 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 было правильное время, такое же, как и в системе?