如图
想查询4月1日到21日的记录,可是却连着3月31日的记录都查到了
到后端查看日志,显示查询开始日期为31日16时,那么基本断定是时区出了问题
那么有几种可能,一是系统时区,一是数据库时区,三是docker容器内部的时区
第一步,date -R
查看系统时区输出Tue, 21 Apr 2020 09:31:18 +0800
,东八区,没问题
那么第二步,查看数据库时区,登录mysql,show variables like "%time_zone%";
mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)
跟随系统,也没问题,需要注意的是,如果mysql是部署在docker中的话,就要进入容器内部更改容器内部的时区了
保守起见,可以指定mysql的时区
set global time_zone = '+8:00';
set time_zone = '+8:00';
set time_zone = '+8:00';
再次查看mysql时区,已经改变了
mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | +08:00 |
+------------------+--------+
2 rows in set (0.00 sec)
一开始看了前面两个的时区后,发现都没问题,纳闷了好久,后来才想起服务是部署在docker的啊,于是输入docker exec -it 容器ID bash
进入容器
输入date -R
,显示Tue, 21 Apr 2020 01:40:28 +0000
,终于找到原因了
于是输入cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
,却提示
cp: can't stat '/usr/share/zoneinfo/Asia/Shanghai': No such file or directory
,容器内部是没有这些时区文件的,那么就要从宿主机上面拷贝一份进来
首先mkdir -p /usr/share/zoneinfo/Asia
创建文件夹
再ctrl+D
退出容器,执行docker cp /usr/share/zoneinfo/Asia/Shanghai d2e85b301fae:/usr/share/zoneinfo/Asia
再次进入容器,执行cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
即可
可以通过date -R
进行验证,显示Tue, 21 Apr 2020 01:42:18 +0800
,大功告成