場(chǎng)景描述
環(huán)境版本及條件:
- 基于 Docker 部署的
Mysql:8.0.27
版本數(shù)據(jù)庫中。- datatime 數(shù)據(jù)類型的字段設(shè)置了默認(rèn)時(shí)間戳 CURRENT_TIME。
- SpringBoot + MP。
問題復(fù)現(xiàn):
- 使用MP插入數(shù)據(jù)時(shí),該字段的默認(rèn)時(shí)間戳比 Asia/Shanghai 時(shí)區(qū)少了 8 小時(shí)。
問題追因
排查過程:
- 查看 Mysql 時(shí)區(qū)配置屬性。
show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | SYSTEM | +------------------+--------+
- 查看 Docker 容器系統(tǒng)所處時(shí)區(qū)。
date -R # Result: Mon, 15 May 2023 15:50:42 +0000
原因分析:
- 創(chuàng)建 Mysql 容器時(shí)忘記選擇時(shí)區(qū),這時(shí) Docker 會(huì)默認(rèn)給選擇 UTC 時(shí)區(qū)。
- Docker 容器所在的系統(tǒng)的默認(rèn)時(shí)區(qū)為 +0000。
- Mysql 配置文件添加 default-time_zone=‘+8:00’ 后,重啟 Mysql 容器時(shí)區(qū)設(shè)置無效,分析 Mysql 服務(wù)強(qiáng)制使用其所在容器系統(tǒng)的時(shí)區(qū)。
解決方案
LXL:
- 分析原因后通過查找相關(guān)資料,以下兩種方法親測(cè)有效哦?。?!
第一種方法:文章來源:http://www.zghlxwxcb.cn/news/detail-672117.html
- 通過修改 Mysql 的 Variables 屬性,臨時(shí)修改,重啟后無效。
# 進(jìn)入容器 docker exec -it mysql1 /bin/bash # 連接 mysql 服務(wù) mysql -uroot -p # 設(shè)置全局會(huì)話時(shí)區(qū) set global time_zone = '+08:00'; # 設(shè)置當(dāng)前會(huì)話時(shí)區(qū) set session time_zone = '+08:00'; # 設(shè)置后查看 Mysql 時(shí)區(qū)配置屬性。 show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | +08:00 | +------------------+--------+
第二種方式:文章來源地址http://www.zghlxwxcb.cn/news/detail-672117.html
- 通過修改 Docker 容器所使用的時(shí)區(qū),永久修改。
# 進(jìn)入容器 docker exec -it mysql1 /bin/bash # 下列方法 1~3 中任選其一即可: # 1.強(qiáng)制生成 Asia/Shanghai 時(shí)區(qū)文件軟鏈接 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 2.Asia/Shanghai 軟鏈接實(shí)際指向 PRC 文件,將其復(fù)制為 localtime 時(shí)區(qū)文件 cp /usr/share/zoneinfo/PRC /etc/localtime # 3.通過 tzselect 命令,可選擇 Beijing、HongKong 城市時(shí)區(qū) tzselect # 修改后查看當(dāng)前容器時(shí)區(qū) date -R Mon, 15 May 2023 23:05:49 +0800 # 連接 mysql 服務(wù) mysql -uroot -p # 設(shè)置后查看 Mysql 時(shí)區(qū)配置屬性。 show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | CST | | time_zone | SYSTEM | +------------------+--------+
到了這里,關(guān)于基于 Docker 部署 Mysql 的時(shí)區(qū)設(shè)置解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!