背景
- Windows本地和阿里云服务器中使用datax同步txtfile文件到mysql时,date类型数据无差异
- Docker容器中使用会出现同步完数据时间戳类型数据相差8小时的问题(docker容器时区已通过cp 文件夹的方式解决,容器内执行date命令可正常获取到时间)
容器时区不对
root@119bbbba68e4:/# date
Mon Nov 25 12:01:06 UTC 2019
root@119bbbba68e4:/# date -R
Mon, 25 Nov 2019 12:01:42 +0000
root@119bbbba68e4:/# date +"%Z %z"
UTC +0000
docker容器设置时区
# 打镜像时cp相应文件,或
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 直接挂载相应文件夹(注意系统类型)
docker run 追加-v /etc/localtime:/etc/localtime:ro
再通过java去获取时区
# 通过java打印输出
System.out.println(TimeZone.getDefault()); //输出当前默认时区
datax在linux上获取时区步骤:其实底层还是通过jvm去获取的
- 如有环境变量 TZ设置,则用TZ中设置的时区
- 如1没有,则在 /etc/sysconfig/clock文件中找 "ZONE"的值
- 如2都没有,就用/etc/localtime 和 /usr/share/zoneinfo 下的时区文件进行匹配,如找到匹配的,就返回对应的路径和文件名。
解决办法
彻底解决容器时区问题
那就彻底解决容器时区问题,复制宿主机或挂载出时区相关文件
仅解决datax的时区问题
运行datax时指定时区(最省事)或获取参照 datax/conf/core.json里面的时区配置和服务器不同导致的数据异常去修改时区(笔者这边是一致的,还是有date类型数据异常的问题)
python2 ${datax_path}/bin/datax.py -p "-Duser.timezone-GMT+8"
网友评论