解決MySQL時區(qū)日期時差8個小時的問題
場景:
我們在mysql客戶端查詢 now() 系統(tǒng)當(dāng)前日期時間,會發(fā)現(xiàn)得到的結(jié)果比系統(tǒng)實際日期時間慢8個小時左右,這是由于不同的時區(qū)導(dǎo)致的
解決:
1、在 mysql 的服務(wù)端的 my.conf 文件中 [mysqld] 節(jié)點(diǎn)下設(shè)置時區(qū)參數(shù)
default-time-zone=Asia/Shanghai
2、如果 mysql 的版本是 5.7 配置如下參數(shù)
default-time-zone = '+8:00'
3、如果 mysql 服務(wù)是由 docker 創(chuàng)建的容器,需要查看 mysql 容器的系統(tǒng)日期是否正確,如果不正確,需要調(diào)整 mysql 容器內(nèi)的系統(tǒng)日期時間
方式一:
//1、把當(dāng)前宿主機(jī)的時區(qū)信息復(fù)制到mysql容器的時區(qū)中 docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名稱或Id:etc/localtime //2、重啟mysql服務(wù)即可 docker restart 容器名稱或Id
方式二:
共享主機(jī)的 localtime,創(chuàng)建容器的時候指定啟動參數(shù),掛載 localtime 文件到容器內(nèi)
docker run --name 容器名稱 -v /etc/localtime:/etc/localtime
如此,時區(qū)不一致的問題就解決了
mysql查出時間相差14小時
問題重現(xiàn)
服務(wù)器使用mysql 5.7數(shù)據(jù)庫,線上運(yùn)行程序時,保存時間相差14小時
問題排查
首先以為是線上linux系統(tǒng)數(shù)據(jù)庫時區(qū)問題,特地查看了線上linux數(shù)據(jù)庫時區(qū)
Last login: Wed Nov 27 14:39:13 2019 from 192.168.2.147 [root@localhost ~]# date -R Thu, 28 Nov 2019 08:44:39 +0800 [root@localhost ~]# hwclock 2019年11月28日 星期四 08時44分52秒 -0.938419 秒 [root@localhost ~]#
檢查時區(qū)后發(fā)現(xiàn)時區(qū)設(shè)置是正確的,懷疑是線上數(shù)據(jù)庫時區(qū)設(shè)置問題,檢查線上數(shù)據(jù)庫時區(qū)設(shè)置
mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | CST | | time_zone | SYSTEM | +------------------+--------+ 2 rows in set (0.03 sec)
發(fā)現(xiàn)線上數(shù)據(jù)庫時區(qū)設(shè)置也是一致,于是在本地重新運(yùn)行程序,添加斷點(diǎn),監(jiān)聽時間傳參變化,斷點(diǎn)逐步進(jìn)行,在保存至數(shù)據(jù)庫前,斷點(diǎn)中檢查的時間都是正確的,可以確定是數(shù)據(jù)庫時間保存時出現(xiàn)的問題。
在這個地方我自己遇到的問題更尷尬,排查問題時是在同事電腦上進(jìn)行排查,檢查了pom文件中依賴的mysql-connector-java 版本號是 5.1.46 ,運(yùn)行時無報錯信息,但實際打包項目時使用的是我電腦進(jìn)行打包,但我電腦中pom文件里mysql-connector-java 版本號寫的是runtime,也就是跟著springboot版本選擇,我使用的springboot版本號是2.1.5,所以對應(yīng)的mysql版本jar包文件是8.0的jar包,就是這個問題導(dǎo)致是時間相差了14小時,更改mysql版本號,重新運(yùn)行,問題解決。
自己在排查問題過程中也發(fā)現(xiàn)了類似相關(guān)的數(shù)據(jù)庫時間保存相差N小時問題主要出于幾種情況:
- 數(shù)據(jù)庫版本不一致
- marven依賴jar包版本與數(shù)據(jù)庫版本不一致
- mysql時區(qū)設(shè)置錯誤
- 系統(tǒng)時區(qū)錯誤
到此這篇關(guān)于解決MySQL時區(qū)日期時差8個小時的問題的文章就介紹到這了,更多相關(guān)MySQL差8個小時內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL學(xué)習(xí)第三天 Windows 64位操作系統(tǒng)下驗證MySQL
MySQL學(xué)習(xí)第三天教大家如何在Windows 64位操作系統(tǒng)下驗證MySQL,感興趣的小伙伴們可以參考一下2016-05-05
Mybatis集成MySQL使用游標(biāo)查詢處理大批量數(shù)據(jù)方式
這篇文章主要介紹了Mybatis集成MySQL使用游標(biāo)查詢處理大批量數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
windows中同時安裝兩個不同版本的mysql數(shù)據(jù)庫
在項目中可能會用到多個版本的Mysql數(shù)據(jù)庫,尤其是最常用的5版本的和8版本數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于windows中同時安裝兩個不同版本的mysql數(shù)據(jù)庫,需要的朋友可以參考下2024-03-03
Linux mysql命令安裝允許遠(yuǎn)程連接的安裝設(shè)置方法
對大家推薦很好使用的Linux mysql系統(tǒng),像讓大家對Linux mysql系統(tǒng)有所了解,然后對Linux mysql系統(tǒng)全面講解介紹,希望對大家有用今天特意配置了mysql apache php ,雖然網(wǎng)上很多這方面的例子,但是很多是作者再回憶寫的,所以難免有筆誤的地方。2010-08-08
運(yùn)維角度淺談MySQL數(shù)據(jù)庫優(yōu)化(李振良)
一個成熟的數(shù)據(jù)庫架構(gòu)并不是一開始設(shè)計就具備高可用、高伸縮等特性的,它是隨著用戶量的增加,基礎(chǔ)架構(gòu)才逐漸完善。這篇博文主要談MySQL數(shù)據(jù)庫發(fā)展周期中所面臨的問題及優(yōu)化方案2015-07-07

