mysql时区问题

设置mysql容器时间与服务器时间一致

问题背景:

今天测试发现一个问题,时间不一致,当工单入库时,其创建时间和更新时间应该是一样的,即使不一样最多只会错几秒的时间;实际上两个时间相差的大概8小时;

在这里插入图片描述

一般来讲,像这种问题,大概率是时区问题;但是由于第一次处理,走了不少弯路,记录一下;

原因分析:

由于我们使用的是k8s部署方式,内网的mysql服务端镜像和外网的服务端基础镜像不一样;

内网的容器时间与服务器时间是一致的;都是 Asia/Shanghai 24小时制的;但是外网却不一致,数据库容器时间是12小时制,时区与服务器时区也不一样;

因此我们需要把容器的时区配置与服务器的时区配置统一即可;

解决方式:

Dockerfile更改方式:

在dockerfile中添加这一行,设置时区;

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
		 && echo "Asia/Shanghai" > /etc/timezone
docker启动时的更改方式:

在启动时挂载宿主机的时区文件:

docker run -p 3306:3306 --name mysql -v /etc/localtime:/etc/localtime
k8s启动方式:

原理都是挂载:yaml 设置

containers:
  env: 
    - name: TZ
      value: Asia/Shanghai
  volumeMounts:
    - name: timezone
      mountPath: /etc/localtime
volumes:
  - name: timezone
    hostPath:
      path: /usr/share/zoneinfo/Asia/Shanghai

mysql的配置文件也可以添加配置:

[mysqld]
    default-time_zone = '+8:00'

每日一句:

顺,不妄喜;逆,不惶馁;安,不奢逸;危,不惊惧;胸有惊雷而面如平湖者,可拜上将军!

你可能感兴趣的:(mysql,java,数据库)