研发反馈过来一个问题,他们从java代码中读到的数据库时间和实际时间相差了13个小时。
问题排查:
正常情况下数据库的时间就是服务器时间,是不是服务器没有配置时间同步,本身时间出了问题呢?
检查了下crontab,配置了ntp时间同步
[root@docker-node-14-113 ~]# dateTue Nov 26 20:12:52 CST 2019
检查下服务器时间,正常,显示的就是当前正确时间。
检查数据库当前时间
mysql> select now();+---------------------+| now() |+---------------------+| 2019-11-26 20:12:56 |+---------------------+1 row in set (0.00 sec)
说明数据库和服务器本身时间是没有问题的,那么为什么通过java代码取数据库的时间就会相差13小时呢?
没有头绪的情况下,google一下,看到有个解释
mysql默认的时区是CST,。Java和Mysql协商时区时把Mysql的CST时间当成了美国中部时间既UTC-5(美国从“3月11日”至“11月7日”实行夏令时,美国中部时间改为 UTC-05:00,其他时候是UTC-06:00)。我们国家是UTC+08:00 时区,所以差了13个小时。
检查下数据库中时区信息,果然是CST
mysql> show variables like '%time_zone%';+------------------+--------+| Variable_name | Value |+------------------+--------+| system_time_zone | CST || time_zone | SYSTEM |+------------------+--------+2 rows in set (0.01 sec)
好了,问题确定了
解决:
1. 在线修改:
mysql> set global time_zone='+8:00';ERROR 2006 (HY000): MySQL server has gone awayNo connection. Trying to reconnect...Connection id: 2022Current database: *** NONE ***Query OK, 0 rows affected (0.00 sec)mysql> show variables like '%time_zone%';+------------------+--------+| Variable_name | Value |+------------------+--------+| system_time_zone | CST || time_zone | +08:00 |+------------------+--------+2 rows in set (0.00 sec)
修改完成后,通知研发查看,问题解决
2. 修改配置文件,防止数据库重启,该配置丢失
vim etc/my.cnf
在 [mysqld] 配置中添加
default-time-zone = '+8:00'
文章转载自数据库这点小事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




