实际项目部署中,遇到了网站页面时间显示异常的问题,例如早晨9点的登录信息,显示的却是早晨1点,应该是时区的问题,经过一通修改,终于解决了这个问题,以下是步骤;
- 设置应用的MySQL数据库连接参数,加上&serverTimezone=GMT%2B8,以下是我修改完后的参数
jdbc.url=jdbc\:mysql\://ip地址\:3306/xxx?characterEncoding\=UTF-8&useSSL\=false&allowPublicKeyRetrieval\=true&useAffectedRows\=true&serverTimezone\=GMT%2B8&useJDBCCompliantTimezoneShift=true
- 设置Linux时区,通过date命令可以查看时区,通过date -R命令可以查看时区及时间,在中国的应用正确的时区及时间如下:
执行以下两条命令,即可将服务器时间修改正确,由于我们的应用使用了docker服务,应用及数据库并不在一个docker服务中,所以我对应用所在容器及数据库所在容器还有宿主机均调整了时间时区,请根据自己的情况调整:
echo "Asia/Shanghai" > /etc/timezone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 修改MySQL的配置文件my.cnf,版本不同配置文件不同,请根据自己的实际情况调整,我安装的是5.
版本的MySQL,所以是my.cnf配置文件,但是由于我们的应用的数据库是部署在docker容器里的,所以我需要直接修改容器内的MySQL的配置文件,进入docker容器前要执行docker ps -a查看容器列表,然后通过容器的id进入到对应容器中:
执行docker exec -it 容器id /bin/bash 来进入容器;
docker exec -it 361 /bin/bash
我的MySQL的my.cnf文件地址在/etc/my.cnf,vim /etc/my.cnf,加入这一行:
default-time_zone = '+8:00'
结果如图:
重启MySQL,然后查看一下时区:
show variables like "%time_zone";
我的结果如下,是正常的:
如果time_zone不是+8:00,可以用以下命令执行一下:
set time_zone = '+8:00';
如果不放心还可以查看一下数据库时间,与正常时间一致即可;
SELECT CURTIME();
- 重启调整时区的服务器的应用,查看应用时间,已完成时区的修复。
注:我是上面的每一个动作都执行过一遍,才恢复正常的,大家的情况可能不一致,按实际情况设置即可