docker中的mysql時區是使用了世界標準時間(UTC),把時區改成東八區方法:
成都創新互聯公司專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站設計、成都做網站、崇信網絡推廣、微信小程序開發、崇信網絡營銷、崇信企業策劃、崇信品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯公司為所有大學生創業者提供崇信建站搭建服務,24小時服務熱線:18980820575,官方網址:vcdvsql.cn
1、啟動容器時設置: 添加如下配置:
2、進入docker配置:(重啟才能生效--永久生效)
3、臨時修改(從mysql上修改,重啟失效)
1. 查看時區命令
2.?GMT、UTC、DST、CST時區代表的意義
2.1 GMT:Greenwich Mean Time?
2.2?UTC: Coordinated Universal Time
2.3?DST: Daylight Saving Time
2.4?CST:Central Standard Time
3.? 修改時區
3.1?僅修改當前會話的時區,停止會話失效(CET)
3.2 修改全局的時區配置
使用mysql連接工具或者命令好工具都可以。我用workbench輸入命令行:
select now(); 查看mysql系統時間。和當前時間做對比
set global time_zone = '+8:00';設置時區更改為東八區
flush privileges; 刷新權限
然后退出后重新登錄就可以了,顯示當前時間和我現在的時間一致了。
1、查看當前時區
date -R
1
1
2、修改設置時區。先輸入 tzselect 命令,然后根據提示,通過輸入選項前面的數字來確定選項。我的例子,先選擇 Asia ,再選擇 Hong Kong。香港和中國采用了同樣的東八區時間。
3、復制相應的時區文件,替換原來的時區文件。命令如下:
/usr/share/zoneinfo/Asia# cp Hong_Kong /etc/localtime
1
1
我們需要的時區文件在目錄 /usr/share/zoneinfo/Asia 下。文件名字是 Hong_Kong。把它拷貝覆蓋 /etc/localtime 文件。
4、重新輸入命令 date -R,就可以看到修改時區后的中國時間了。
東京的時區是東九區,比我們北京東八區多1個時區,所以+9就是東京時間了
那我們怎么修改,有兩種方法,一種是臨時的,一種是長久的。
一:通過sql命令臨時修改
# 設置全局時區 mysql set global time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)
# 設置時區為東八區 mysql set time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)
# 刷新權限使設置立即生效 mysql flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | EST |
| time_zone | +08:00 |
+------------------+--------+
2 rows in set (0.00 sec)
二:修改my.cnf實現永久修改
vi /etc/mysql/my.cnf
然后在mysqld下邊的配置中添加一行:
default-time_zone = '+8:00'
然后重啟mysql
service mysql restart
你還在被以下問題困擾嗎:
MySQL 的安裝規范中應該設置什么時區?
JAVA 應用讀取到的時間和北京時間差了14個小時,為什么?怎么解決?
已經運行一段時間的業務,修改 MySQL 的時區會影響已經存儲的時間類型數據嗎?
遷移數據時會有導致時間類型數據時區錯誤的可能嗎?
...
看完這篇文章,你能解決上面所有的疑惑。首先出場的是和時區相關的啟動參數和系統變量。
如果要在 MySQL 啟動時就指定時區,則應該使用啟動參數: default-time-zone ,示例:
啟動后我們可以看到控制時區的系統變量,其中 time_zone 變量控制時區,在MySQL運行時可以通過 set 命令修改(注意:不可以寫在 my.cnf 中):
啟動參數和系統變量的可用值遵循相同的格式:
system_time_zone 變量只有全局值沒有會話值,不能動態修改,MySQL 啟動時,將嘗試自動確定服務器的時區,并使用它來設置 system_time_zone 系統變量, 此后該值不變。當 time_zone='system' 時,就是使用的這個時區,示例中 time_zone 就是 CST,而 CST 在 RedHat 上就是東八區:
概括一下就兩點:
1. NOW() 和 CURTIME() 系統函數的返回值受當前 session 的時區影響
不僅是select now(),包括insert .. values(now())、以及字段的 DEFAULT CURRENT_TIMESTAMP 屬性也受此影響:
2. timestamp 數據類型字段存儲的數據受時區影響
timestamp 數據類型會存儲當時session的時區信息,讀取時會根據當前 session 的時區進行轉換;而 datetime 數據類型插入的是什么值,再讀取就是什么值,不受時區影響。也可以理解為已經存儲的數據是不會變的,只是 timestamp 類型數據在讀取時會根據時區轉換:
關于時區所有明面上的東西都在上面了,我們前面提到的困擾就是在暗處的經驗。
1. MySQL的安裝規范中應該設置什么時區?
對于國內的業務了,在 my.cnf 寫入 default-time-zone='+08:00' `,其他地區和開發確認取對應時區即可。
為什么不設置為 system 呢?使用系統時間看起來也是個不錯的選擇,比較省事。不建議的原因有兩點:
2. JAVA應用讀取到的時間和北京時間差了14個小時,為什么?怎么解決?
這通常是 JDBC 參數中沒有為連接設置時區屬性(用 serverTimezone 參數指定),并且MySQL中沒有設置全局時區,這樣MySQL默認使用的是系統時區,即 CST。這樣一來應用與MySQL 建立的連接的 session time_zone 為 CST ,前面我們提到 CST 在 RedHat 上是 +08:00 時區,但其實它一共能代表4個時區:
JDBC在解析CST時使用了美國標準時間,這就會導致時區錯誤。要解決也簡單:一是遵守上面剛說到的規范,對MySQL顯示的設置'+08:00'時區;二是JDBC設置正確的 serverTimezone。
3. 已經運行一段時間的業務,修改MySQL的時區會影響已經存儲的時間類型數據嗎?
完全不會,只會影響對 timestamp 數據類型的讀取。這里不得不提一句,為啥要用 timestamp?用 datetime 不香嗎,范圍更大,存儲空間其實差別很小,趕緊加到開發規范中吧。
4. 遷移數據時會有導致時間類型數據時區錯誤的可能嗎?
這個還真有,還是針對 timestamp 數據類型,比如使用 mysqldump 導出 csv 格式的數據,默認這種導出方式會使用 UTC 時區讀取 timestamp 類型數據,這意味導入時必須手工設置 session.time_zone='+00:00'才能保證時間準確:
如何避免?mysqldump 也提供了一個參數 --skip-tz-utc ,意思就是導出數據的那個連接不設置 UTC 時區,使用 MySQL 的 gloobal time_zone 系統變量值。
其實 mysqldump 導出 sql 文件時默認也是使用 UTC 時區,并且會在導出的 sql 文件頭部帶有 session time_zone 信息,這樣可以保證導 SQL 文件導入和導出時使用相同的時區,從而保證數據的時區正確(而導出的 csv 文件顯然不可以攜帶此信息)。需要注意的是 --compact 參數會去掉 sql 文件的所有頭信息,所以一定要記得: --compact 參數得和 --skip-tz-utc 一起使用。
本文標題:mysql里面怎么改時區,mysql如何調整時區
瀏覽路徑:http://vcdvsql.cn/article20/heghco.html
成都網站建設公司_創新互聯,為您提供軟件開發、響應式網站、標簽優化、網頁設計公司、手機網站建設、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯