The server time zone value 'EDT' is unrecognized or represents more than one time zone.

/ mysql / 没有评论 / 2181浏览

概要:测试服务器迁移到虚拟机,所有服务重装后部署项目及服务,在启动服务时报错:

The server time zone value 'EDT' is unrecognized or represents more than one time zone.

首先想到的是看看连接数据库的url有没有问题:jdbc:mysql://xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8,没问题,而且在开发环境url是可以正常使用的。

在网上查了一些资料说是可能数据库时间与数据库所在服务器时间不一致导致,但是看了下两者时间是一致的,问题一直没有解决,可以确定的是跟数据库所在服务器的时区有关,最后顺这个思路去查找相关更换服务器时区的资料。

最后比较开发环境与测试环境的数据库服务器时区,发现开发环境是CST,测试环境是EDT:

服务器上直接数据date命令就可以看到时区,数据库里我们是在navicate中使用show variables like '%time_zone%'查看数据库时区。

 

于是更换测试环境时区:首先cat /etc/sysconfig/clock文件,发现这是美国时间,根据注释发现在/etc/localtime文件是定义时区的文件,备份并删除/etc/locatime文件,然后根据网上资料找到/usr/share/zoneinfo/发现这里都是各个时区的文件,复制上海时区文件到/etc/下并重命名为localtime:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

使用date查看时间发现时区变为CST,使用date -R查看系统时间,Thu,27 Sep 2018 08:48:24 +0800(说明是东八区,中国时区即为东八区)

然后重启MySQL服务:service mysqld restart,发现项目服务可以正常启动,问题解决!