Mysql數(shù)據(jù)庫(kù)時(shí)間與系統(tǒng)時(shí)間不一致問(wèn)題排查及解決
NO.1 產(chǎn)生問(wèn)題
在我們學(xué)習(xí)中使用到sysdate這個(gè)函數(shù)時(shí),發(fā)現(xiàn)查出來(lái)的日期時(shí)間與當(dāng)前的正確時(shí)間不一致,相差8個(gè)小時(shí)左右,為什么會(huì)產(chǎn)生這個(gè)問(wèn)題?又該如何解決?
– 在數(shù)據(jù)庫(kù)中使用sysdate()函數(shù)查詢系統(tǒng)時(shí)間
select sysdate();
結(jié)果顯示:
NO.2 原因分析
原因分析1:第一時(shí)間想到的是數(shù)據(jù)庫(kù)所在的云服務(wù)器時(shí)間可能與網(wǎng)絡(luò)時(shí)間不同步,因?yàn)閿?shù)據(jù)庫(kù)是裝在云服務(wù)器上的,但是這種可能性應(yīng)該較小,因?yàn)橘?gòu)買的阿里云服務(wù)器應(yīng)該不會(huì)存在這種問(wèn)題,一般會(huì)自動(dòng)校對(duì)時(shí)間。于是先確定云服務(wù)器的時(shí)間,輸入date命令查看云服務(wù)器系統(tǒng)時(shí)間,結(jié)果云服務(wù)器顯示的時(shí)間是正確的,如下圖:
原因分析2:排除第一種可能后,又想到Mysql是部署在云服務(wù)器的docker容器上的,會(huì)不會(huì)是docker容器時(shí)間不對(duì)呢?因此進(jìn)入容器,查看容器的系統(tǒng)時(shí)間。
# 進(jìn)入容器 d71f18f09a4e:容器id,以自己的容器id為準(zhǔn) docker exec -it d71f18f09a4e /bin/bash # 查看系統(tǒng)時(shí)間 date
果然,容器的時(shí)間不對(duì),跟正確的時(shí)間相差了8個(gè)小時(shí),跟數(shù)據(jù)庫(kù)查詢的結(jié)果是一樣的問(wèn)題。所以SQL查出來(lái)的時(shí)間是跟隨容器的系統(tǒng)時(shí)間一致的,因此存在同樣的問(wèn)題。所以我們只要把容器時(shí)間修改正確了,那我們通過(guò)SQL查詢出來(lái)的時(shí)間不對(duì)的問(wèn)題也就解決了。
NO.3 解決方法
1.通過(guò)sql語(yǔ)句,查看系統(tǒng)時(shí)區(qū),修改時(shí)區(qū)來(lái)校對(duì)時(shí)間
– 第一步:查看系統(tǒng)時(shí)區(qū)
show variables like ‘%time_zone%';
– 第二步:修改時(shí)區(qū),并生效
– 修改系統(tǒng)時(shí)區(qū)
set global time_zone = ‘+08:00';
– 修改當(dāng)前會(huì)話時(shí)區(qū)
set time_zone = ‘+8:00';
– 立馬生效
flush privileges;
– 修改后再次查看
show variables like ‘%time_zone%';
– 第三步:修改后再查看系統(tǒng)時(shí)間顯示
select sysdate();
第一步:系統(tǒng)時(shí)區(qū)查詢:
時(shí)區(qū)知識(shí)普及: 整個(gè)地球分為二十四時(shí)區(qū),每個(gè)時(shí)區(qū)都有自己的本地時(shí)間。在國(guó)際無(wú)線電通信場(chǎng)合,為了統(tǒng)一起見(jiàn),使用一個(gè)統(tǒng)一的時(shí)間,稱為通用協(xié)調(diào)時(shí)(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(shí)(GMT, Greenwich Mean Time)一樣,都與英國(guó)倫敦的本地時(shí)相同。在本文中,UTC與GMT含義完全相同。北京時(shí)區(qū)是東八區(qū),領(lǐng)先UTC八個(gè)小時(shí),所以我們的時(shí)區(qū)為UTC+8。
第二步:修改時(shí)區(qū),并生效:
第三步:修改后再查看系統(tǒng)時(shí)間:
2.在云服務(wù)器上,把云服務(wù)器的正確時(shí)間文件拷貝到容器的中去,校對(duì)容器的時(shí)間
# 將服務(wù)器上時(shí)間文件拷貝到容器 d71f18f09a4e:容器id,以自己的容器id為準(zhǔn) docker cp /usr/share/zoneinfo/Asia/Shanghai d71f18f09a4e:/etc/localtime # 重啟容器 docker restart d71f18f09a4e # 查看容器是否運(yùn)行docker ps # 進(jìn)入容器 d71f18f09a4e:容器id,以自己的容器id為準(zhǔn) docker exec -it d71f18f09a4e /bin/bash # 查看容器的時(shí)間 date
**第一步:**復(fù)制日志文件后,查看容器時(shí)間:
第二步:數(shù)據(jù)庫(kù)查詢時(shí)間:
注意:如果容器時(shí)間顯示正確,但是數(shù)據(jù)庫(kù)查詢結(jié)果還是不對(duì),則需要關(guān)閉客戶端(navicat),重新打開后再次查詢,基本就不會(huì)有問(wèn)題了。
總結(jié)
到此這篇關(guān)于Mysql數(shù)據(jù)庫(kù)時(shí)間與系統(tǒng)時(shí)間不一致問(wèn)題排查及解決的文章就介紹到這了,更多相關(guān)Mysql時(shí)間與系統(tǒng)時(shí)間不一致內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql中強(qiáng)大的group?by語(yǔ)句解析
這篇文章主要介紹了Mysql中強(qiáng)大的group?by語(yǔ)句解析,GROUP?BY?語(yǔ)句根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。在分組的列上我們可以使用?COUNT,?SUM,?AVG,等函數(shù),需要的朋友可以參考下2023-07-07mysql中各種常見(jiàn)join連表查詢實(shí)例總結(jié)
這篇文章主要介紹了mysql中各種常見(jiàn)join連表查詢,結(jié)合實(shí)例形式總結(jié)分析了MySQL中join連表查詢的各種常見(jiàn)用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02MySQL中NULLIF?、IFNULL、IF的用法和區(qū)別舉例詳解
這篇文章主要給大家介紹了關(guān)于MySQL中NULLIF?、IFNULL、IF的用法和區(qū)別的相關(guān)資料,nullif和ifnull都是MySQL中用于處理NULL值的函數(shù),但它們的用法和作用略有不同,下面給大家詳細(xì)介紹下,需要的朋友可以參考下2024-05-05MySQL 數(shù)據(jù)庫(kù)定時(shí)備份的幾種方式(全面)
在操作數(shù)據(jù)過(guò)程中,可能會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)誤,甚至數(shù)據(jù)庫(kù)奔潰,而有效的定時(shí)備份能很好地保護(hù)數(shù)據(jù)庫(kù)。本篇文章主要講述了幾種方法進(jìn)行 MySQL 定時(shí)備份數(shù)據(jù)庫(kù)。2021-09-09如何使用分區(qū)處理MySQL的億級(jí)數(shù)據(jù)優(yōu)化
mysql在查詢上千萬(wàn)級(jí)數(shù)據(jù)的時(shí)候,通過(guò)索引可以解決大部分查詢優(yōu)化問(wèn)題。但是在處理上億數(shù)據(jù)的時(shí)候,應(yīng)該怎么解決,本文就是用分區(qū)來(lái)優(yōu)化一下,感興趣的一起來(lái)了解一下2021-06-06