您的位置:首頁技術文章
文章詳情頁

Docker的MySQL容器時區問題修改

瀏覽:99日期:2023-10-24 15:13:55

前言

阿航在開發Springboot項目時, 前端告訴驗證碼一直無效. 本地測試沒有問題, 一看遠程服務器的數據庫時間, 哇塞?早了8小時. 很明顯, 是MySQL的時區問題. 本篇文章就來記錄下如何修改Docker 的 MySQL 容器時區.

解決方案

先來校驗下數據庫是否真的時區不對. 進入MySQL數據庫, 運行語句:

SELECT NOW();

會返回類似這樣的數據:

mysql> SELECT NOW();+---------------------+| NOW() |+---------------------+| 2020-07-04 15:46:46 |+---------------------+1 row in set (0.09 sec)

再來查詢下當前時區, 輸入以下命令:

SHOW VARIABLES LIKE ’%time_zone%’;

會返回類似這樣的數據:

mysql> SHOW VARIABLES LIKE ’%time_zone%’;+------------------+--------+| Variable_name | Value |+------------------+--------+| system_time_zone | UTC || time_zone | +00:00 |+------------------+--------+2 rows in set (0.12 sec)

如果返回的時間和你的相差多個小時, 并且時區不對(非+08:00)的話, 那么證明你需要向下看了.

方法一: 臨時修改

當我們的需求非常急的時候, 我們可以做此臨時修改. 運行命令:

SET GLOBAL time_zone = ’+8:00’;

再次運行以下命令, 校驗返回結果是否為當前時間:

SELECT NOW();

返回當前時間則證明修改成功.

之所以本方法稱為”臨時修改”, 是因為重啟MySQL后該修改會失效.

方法二: 啟動時加參數

此方法適用于條件允許我們重新創建一個MySQL容器,

創建容器時, 我們需要加上指定時區的命令(東八區是上海, 你可以按需修改為自己的時區):

-e TZ=Asia/Shanghai

所以, 我們的docker完整運行命令應該為(僅供參考, 你的運行命令可能略有差異):

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -e TZ=Asia/Shanghai -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

要查看各個參數的用途, 請查看我的這篇文章: 《Docker 安裝 MySQL》.

方法三: 修改容器內配置

輸入以下命令進入mysql容器:

docker exec -it 容器ID bash

修改MySQL配置文件(兩種情況):

vim /etc/mysql/mysql.conf.d

或者

vim /etc/mysql/my.cnf

如果以上命令返回bash: vim: command not found, 請先閱讀Docker容器沒有vim命令的解決方案

進入配置文件后, 點擊i進入編輯模式, 添加一行配置文件:

default-time-zone = ’+08:00’

如圖:

Docker的MySQL容器時區問題修改

添加配置文件

完成后, 點擊ESC, 輸入:wq進行保存并退出.

再輸入exit退出docker容器.

接下來我們要重啟mysql容器, 輸入命令:

docker restart 容器ID

至此, 已經成功修改了時區配置.

重啟后, 輸入以下命令驗證是否成功:

SELECT NOW();

如果返回時間和當前時間一致, 則證明修改成功.

結語

如果特別急, 推薦方法一. 不急則推薦方法二. 各位同學按需選擇使用.

到此這篇關于Docker的MySQL容器時區問題修改的文章就介紹到這了,更多相關Docker MySQL容器時區內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
国产综合久久一区二区三区