设置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'
每日一句:
顺,不妄喜;逆,不惶馁;安,不奢逸;危,不惊惧;胸有惊雷而面如平湖者,可拜上将军!