一 问题描述
当前时间是2022年6月27日11:32,但是我在数据库里查当前时间却比现在晚了12个小时:
SELECT NOW();
2022-06-26 23:30:51
发现时区是美国时区(EDT),非中国时区:
xxljob定时任务提前12个小时执行了,示例:
应该是在晚上23点执行的,但却在中午11点执行了:
二 排查思路
看下操作系统的时区是什么(执行date命令),如果操作系统的时区不对,那数据库里的时区也不会对。
需要修改下操作系统时区(请参考linux CST与EDT时区互转_雅冰石的博客-CSDN博客),然后重启下数据库。
若不想重启线上数据库,也可以通过执行命令:
SET global time_zone = '+8:00';
只是set命令仅对新建连接生效,不会改变已有连接的。
所以之前连接还是之前的时间,我建议最好是在晚上重启下数据库(不用set global,直接重启数据库就行)
在改完数据库时区后,重启了xxljob,发现xxljob定时任务还是有问题。
于是尝试修改了其中三条异常数据,想着观察下效果,没问题的话,第二天再改所有的。
修改方法:
修改trigger_last_time和trigger_next_time,将其往后加12个小时:
UPDATE xxl_job_info SET trigger_last_time=(trigger_last_time+12*60*60*1000),trigger_next_time=(trigger_next_time+12*60*60*1000)
WHERE ……
第二天看着正常了,奇怪的是,其他异常的,我也没手动改,第二天也变正常了。
难道是自动清理了xxljob的缓存什么的?