服务器时区值“CEST”无法识别
Posted
技术标签:
【中文标题】服务器时区值“CEST”无法识别【英文标题】:The server time zone value 'CEST' is unrecognized 【发布时间】:2018-09-06 04:54:51 【问题描述】:我在 Linux 上的 Lampp 环境中使用休眠(Hibernate Maven 5.2.15.Final,mysql-connector Maven 8.0.9-rc)和 mysql 5.7。
我在意大利(中欧夏令时),一次 3 月 25 日,连接数据库出现以下错误:
或代表更多 超过一个时区。您必须配置服务器或 JDBC 驱动程序(通过 serverTimezone 配置属性)使用更多 如果您想利用时区支持,请指定特定时区值。
在 mysql 控制台上,我运行:
SHOW GLOBAL VARIABLES LIKE 'time_zone';
SET GLOBAL time_zone='Europe/Rome';
但这并没有持续下去。
然后我添加到my.cnf
文件(在/etc/mysql中):
[mysqld]
default-time-zone = 'Europe/Rome'
还有:
default_time_zone = 'Europe/Rome'
但是 db server 仍然没有启动...
为什么会出现错误? 有人可以帮助我吗?
谢谢!
【问题讨论】:
您需要在 my.cnf 文件中进行更改。看看this answer 【参考方案1】:@aiman 的回答不正确,因为在您的情况下,有效的服务器时区是 not UTC。
您会在网上找到一些解决方案,包括 jdbc 连接字符串上的附加参数,但有些情况下您无法更改此字符串。
这是我修复它的方法:
首先在mysql中导入系统时区:
$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
然后在/etc/mysql/my.cnf
(或最近的Debian/Ubuntu发行版上的/etc/mysql/mysql.conf.d/mysqld.cnf
)的[mysqld]
部分中将您的默认mysql服务器时区设置为您的实际服务器时区,例如:
default_time_zone = Europe/Paris
别忘了重启mysql
$ sudo service mysql restart
(或适当的命令,具体取决于您的发行版)。
【讨论】:
以防万一有人在 Windows 上遇到此问题,这对我将时区导入 MySQL 有用:按照说明在此处下载 SQL 文件:dev.mysql.com/doc/refman/5.6/en/… 并执行mysql -u root mysql < timezone_posix.sql
这应该是正确的答案。我在网上搜索的任何其他答案要么更改时区(!!!),要么更改连接字符串,有时无法更改。谢谢!
ubuntu 上的 mysql 8 不会以此 [ERROR] [MY-010361] [Server] Fatal error: Illegal or unknown default time zone 'Europe/Paris'
开头
重启后你应该检查一下时区。 SELECT @@global.time_zone;
。如果您在此处看到 SYSTEM,则表示更改无效。我已明确设置为 root aDB 用户 SET GLOBAL time_zone = 'Europe/Stockholm';
然后我可以连接到休眠。【参考方案2】:
首先查看你的mysql服务器时区:mysql -e "SELECT @@global.time_zone;" -u <mysqluser> -p
.
很可能应该是SYSTEM
。
查找您的系统时区:date +”%Z
.
看看它是否是 CEST。
您需要更改系统时区:
#cd /usr/share/zoneinfo
#ls -l
#rm /etc/localtime
#ln -s /usr/share/zoneinfo/UTC /etc/localtime
然后重启你的mysql服务器:/etc/init.d/mysqld restart
。
享受
【讨论】:
不得不使用“systemctl restart mysql”重启,但所有其他命令都救了我:) 谢谢,在尝试其他解决方案但没有成功后,它也对我有用。为可能遇到相同问题的人添加信息:尝试执行命令“rm /etc/localtime”和“ln -s /usr/share/zoneinfo/UTC /etc”时出现“权限被拒绝” /当地时间”。我已经解决了它在开头添加“sudo”,例如:sudo rm /etc/localtime. 因此您将实际时区(即 CEST)更改为 UTC,而不是您的时区。这不是一个解决方案,而是一个肮脏的解决方法。【参考方案3】:如果问题是连接到数据库时,我在this answer的注释中找到了解决方案。
在您的连接网址中使用以下内容:
String url = "jdbc:mysql://localhost/mydb?serverTimezone=Europe/Rome";
这对我连接飞行路线和时区欧洲/阿姆斯特丹很有用。
【讨论】:
它对我有用。请注意,serverTimezone=CEST 不起作用,但 Europe/Rome 起作用。 是的,我相信这是因为 CEST 不够具体,加上 S 代表夏令时,所以无论一年中的什么时候,你都会告诉服务器/数据库它设置为夏令时。以上是关于服务器时区值“CEST”无法识别的主要内容,如果未能解决你的问题,请参考以下文章
Kafka Connect MySQL“无法识别服务器时区值‘EDT’”
无法连接到 mySQL,因为无法识别服务器时区值“GMT Summer Time”
Spring Boot 无法连接到 MySQL:无法识别服务器时区值“Mitteleuropäische Zeit”