The server time zone value 'EDT' is unrecognized or represents more than one time zone.
概要:測試伺服器遷移到虛擬機器,所有服務重灌後部署專案及服務,在啟動服務時報錯:
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,發現專案服務可以正常啟動,問題解決!
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
部分資源參考連結:https://blog.csdn.net/u012454773/article/details/53746411/