有时候Linux系统重启或者有修改后会造成时区被修改,默认一般是UTC时间,有时候会变成CST时间
在阿里云主机扩展后出现过一次,造成了Logstash 使用JDBC连接数据库时读取报错:大概是JavaLang::IllegalArgumentException: HOUR_OF_DAY: 2 -> 3
这样的错
解决方案:
改系统时区
- 将系统的时区改回去,然后重启
1
2
3
4# 修改时区命令:
timedatectl set-timezone UTC
# 重启命令:
shutdown -r now
重启后继续运行之前出错的程序,成功解决问题
链接时加参数
在连接mysql-connector时加上一个时区参数
以logstash为例子
在mysql.config中修改连接语句原来为(连接到名称为”docker“的数据库,但是没有指定参数)
1
jdbc:mysql://localhost:3306/docker
修改后连接语句为(制定参数为UTC)
1
jdbc:mysql://localhost:3306/docker?serverTimezone=UTC
注意,这种方式修改后我的系统时区可为任意的,比如我的系统时区就一直为CST
替换JDBC版本【未测试】
- 网上有博客指出可以通过换jdbc connector的版本解决问题