公司有个阿拉伯购物平台项目,服务是部署在新加坡的亚马逊 ec2 上的.前几天客户反映导出的订单下单时间慢了八小时,但是网页上订单列表的下单时间又是对的.
本来以为是个小问题,没想到解决起来费了好大的波折.
解决经过:
1.以为是服务器时区不对,使用
date -R 查看服务器时区信息,东八区没问题. 又手动使用
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
设置时区到上海,发现并没有修复问题.
2.怀疑是 mysql 的时区设置错误.
查看 mysql 时区,发现确实不对:
select now(); 查看 mysql 系统时间。和当前时间做对比
set global time_zone = '+8:00';设置时区更改为东八区
flush privileges; 刷新权限
修改了 mysql 时区后,发现还是没有解决问题,就感觉很诡异.
3.怀疑是 java 获取时间的时候,时区获取错误,导致时间有误.
在网上查了一下,发现 jre 会从 linux 系统下/etc/sysconfig/clock 文件读取时区信息,但是这台服务器并没有 clock 文件,从其他服务器中拿了份 clock 文件过来,重启服务,问题解决.
附 clock 文件内容:
ZONE="Asia/Shanghai"
UTC=false
ARC=false
ZONE -- 时区
UTC -- 表明时钟设置为 UTC。
ARC -- 仅用于 alpha 表明使用 ARC。
修复后,记得把数据库错误的时间增加八小时.
UPDATE c_order c set c.create_time = date_add(c.create_time, INTERVAL 8 hour)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于