暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql时区问题-java取库中时间和实际时间相差13小时

数据库这点小事 2019-11-26
1009

研发反馈过来一个问题,他们从java代码中读到的数据库时间和实际时间相差了13个小时。

问题排查:

正常情况下数据库的时间就是服务器时间,是不是服务器没有配置时间同步,本身时间出了问题呢?

检查了下crontab,配置了ntp时间同步

    [root@docker-node-14-113 ~]# date
    Tue 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 away
          No connection. Trying to reconnect...
          Connection id: 2022
          Current 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论