時區資訊記錄表|全方位認識 mysql 系統庫
在上一期《最佳化器成本記錄表|全方位認識 mysql 系統庫》中,我們詳細介紹了mysql 系統庫中的最佳化器成本記錄表,本期我們將為大家帶來系列第六篇《時區資訊記錄表|全方位認識 mysql 系統庫》,下面請跟隨我們一起開始 mysql 系統庫的系統學習之旅吧!
01 時區資訊概述
MySQL伺服器維護幾個時區設定:
-
系統時區:當Server啟動時,嘗試確定主機的時區並使用它來設定Server的system_time_zone系統變數值。該變數為只讀變數,此外,您還可以在Server啟動時使用--timezone = timezone_name選項為mysqld_safe設定MySQL伺服器的系統時區。或者在Server啟動之前設定 TZ系統環境變數為timezone_name值。
-
Server的當前時區。 全域性系統變數time_zone的值表示當前正在執行的Server時區,該系統變數的初始值為'SYSTEM',表示Server時區與系統時區相同。
* 如果系統變數time_zone設定為SYSTEM,則每個有時區計算需要的MySQL函式在呼叫時,都會呼叫系統庫來確定當前的系統時區。 因此,此係統呼叫可能會受全域性互斥保護,從而導致爭用發生。
* Server的全域性當前時區可以在啟動時使用--default-time-zone = timezone啟動選項明確指定,也可以在my.cnf中使用default-time-zone='timezone' 指定,如果您具有SUPER許可權,則可以使用語句SET GLOBAL time_zone = timezone; 在Server執行時設定全域性Server時區值。
* time_zone是全域性,會話變數,可以在會話級別為每個會話單獨設定自己的時區(連線時區),每個會話的time_zone值預設會繼承time_zone系統變數的全域性值,但每個會話可以使用SET time_zone = timezone;語句進行 修改。 要注意:當前會話的時區設定會影響對時區敏感的時間值的顯示和儲存。例如:NOW()或CURTIME()等函式顯示的值是使用會話時區值、TIMESTAMP資料型別列中儲存和檢索的值使用的是會話時區值-- TIMESTAMP列的值會從當前時區轉換為UTC儲存,查詢時從UTC轉換為當前時區。但當前時區設定不影響諸如UTC_TIMESTAMP()函式或DATE、TIME或DATETIME資料型別列中值的顯示和儲存--這些資料型別中的值不以UTC儲存;如果有需要針對DATE、TIME或DATETIME顯示時區影響,可以將它們的值轉換為UTC,然後執行算術運算,然後再轉換回去。
* time_zone系統變數可以設定為SYSTEM,表示與系統時區相同,也可以設定具體的時區,例如: '+10:00'或'-6:00' 表示在UTC時區的基礎上,+ 10個時區或 -6個時區(與UTC時區的偏移量),實際上相當於東十區和西六區。還可以設定為具體的時區名稱,例如: 'Europe/Helsinki', 'US/Eastern', or 'MET',但是,可設定的有效值來自mysql系統字典庫的time_zone表,該表中的資訊需要手工使用相應的命令插入,稍後會介紹插入方法。
如何填充時區表(mysql 系統字典庫下有時區相關的表time_zone、time_zone_leap_second、time_zone_name、time_zone_transition、time_zone_transition_type,這些表是在MySQL初始化時建立,但不會載入資料到這些表中):
-
如果您的系統具有自己的zoneinfo資料庫(描述時區的檔案集,通常在/usr/share/zoneinfo目錄下),則可以使用mysql自帶的mysql_tzinfo_to_sql程式來填充時區表。如果您的系統沒有zoneinfo資料庫,則可以使用本節後面所述的可下載軟體包來進行填充時區表:
# 使用系統自帶的時區資料集檔案來填充MySQL 時區表(一次載入作業系統支援的所有時區),mysql_tzinfo_to_sql命令會讀取您系統的時區檔案並生成SQL語句來插入到MySQL的時區表中。注意:這種方式不會匯入跳秒資訊到time_zone_leap_second表中,需要單獨操作 [root@localhost ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -pletsg0 mysql: [Warning] Using a password on the command line interface can be insecure. Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it. # mysql_tzinfo_to_sql也可用於載入單個時區檔案或生成閏秒資訊: ## 載入單個時區檔案,格式為:mysql_tzinfo_to_sql tz_file tz_name | mysql -u root mysql ,如下 [root@localhost ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo/Asia/Shanghai Asia/Shanghai | mysql -u root mysql -pletsg0 ## 如果您的時區需要考慮閏秒(跳秒),命令如下,其中tz_file是您的時區檔案的名稱(絕對路徑,要注意:匯入跳秒資訊的時區必須要是使用了跳秒的時區,即,在time_zone表中的use_leap_second欄位為Y才有跳秒資訊可匯入,否則該表中的資訊為空): shell> mysql_tzinfo_to_sql --leap tz_file | mysql -u root mysql ,例如: [root@localhost ~]# mysql_tzinfo_to_sql --leap /usr/share/zoneinfo/right/US/Arizona | mysql -u root mysql -pletsg0 ## 注意:執行mysql_tzinfo_to_sql之後,最好重新啟動伺服器,以便使得Server使用新的時區資料,以免它不會繼續使用任何先前快取的時區資料。 # 如果您的系統沒有zoneinfo資料庫(例如Windows),那麼您可以使用可在MySQL Developer Zone上下載的軟體包,連結如下:http://dev.mysql.com/downloads/timezones.html ## 下載完成之後匯入該檔案到資料庫中,然後重啟Server即可 shell> mysql -u root mysql <file_name ## 注意:不要使用包含MyISAM表的可下載軟體包。MySQL 5.7及更高版本使用InnoDB作為時區表。嘗試用MyISAM表替換它們會導致問題。如果您的系統有zoneinfo資料庫,請不要自行下載軟體包。改用mysql_tzinfo_to_sql工具直接匯入系統中的時區資料集。否則,您可能會在MySQL和系統上的其他應用程式之間的日期時間處理方面產生差異。
02 時區資訊記錄表詳解
2.1. time_zone
該表提供查詢時區ID和跳秒之間的對映關係資料。如何填充時區表(mysql 系統字典庫下有時區相關的表time_zone、time_zone_leap_second、time_zone_name、time_zone_transition、time_zone_transition_type,這些表是在MySQL初始化時建立,但不會載入資料到這些表中):
下面是該表中儲存的資訊內容(需要手工匯入時區資料資訊到資料庫才有資料)。
root@localhost : mysql 04:51:37> select * from time_zone limit 1186,2; +--------------+------------------+ | Time_zone_id | Use_leap_seconds | +--------------+------------------+ | 2373 | N | | 2375 | Y | +--------------+------------------+ 2 rows in set (0.01 sec)
表欄位含義。
-
Time_zone_id: 時區ID。
-
Use_leap_seconds: 表示該時區是否使用了跳秒(GPS原子鐘時間和UTC時間之差,因為兩個時間系統的秒長不一樣,也就是我們所說的時間尺度不一樣,最終隨著時間的累積,兩者之間就會差。而世界協調時為了協調人們生活中的時間,就採用了跳秒的辦法來處理這種差異。目前兩者之差為15秒)。
2.2. time_zone_leap_second
該表提供查詢跳秒機器修正值資訊,該表中的資訊與time_zone_transition表中的類似,但time_zone_transition表中還記錄了時區ID等資訊。
下面是該表中儲存的資訊內容。
root@localhost : mysql 04:51:44> select * from time_zone_leap_second; +-----------------+------------+ | Transition_time | Correction | +-----------------+------------+ | 78796800 | 1 | | 94694401 | 2 | ......
表欄位含義。
-
Transition_time: 跳秒的瞬變時間(表示UTC和GPS時間的差異 ?
-
Correction: 跳秒的修正值。
2.3. time_zone_name
該表提供查詢時區的名稱列表和時區ID的對映關係。
下面是該表 中儲存的資訊內容。
root@localhost : mysql 04:53:13> select * from time_zone_name limit 2; +----------------+--------------+ | Name | Time_zone_id | +----------------+--------------+ | Africa/Abidjan | 1 | | Africa/Accra | 3 | +----------------+--------------+ 2 rows in set (0.00 sec)
表欄位含義。
-
Name: 時區名稱,該值為time_zone系統變數的有效值之一。
-
Time_zone_id: 時區ID,該ID和表time_zone中的ID相對應。
2.4. time_zone_transition
該表提供查詢時區的跳秒資料。
下面是該表中儲存的資訊內容。
root@localhost : mysql 04:59:54> select * from time_zone_transition limit 2; +--------------+-----------------+--------------------+ | Time_zone_id | Transition_time | Transition_type_id | +--------------+-----------------+--------------------+ | 1 | -1830383032 | 1 | | 3 | -1640995148 | 2 | +--------------+-----------------+--------------------+ 2 rows in set (0.00 sec)
表欄位含義。
-
Time_zone_id: 時區ID。
-
Transition_time: 與time_zone_leap_second表中的Transition_time欄位含義相同。
-
Transition_type_id: 與time_zone_transition_type表中的Transition_type_id相對應。
2.5. time_zone_transition_type
該表提供查詢具體的跳秒資訊以及與時區的對應資料。
下面是該表中儲存的資訊內容。
root@localhost : mysql 05:14:59> select * from time_zone_transition_type limit 2; +--------------+--------------------+--------+--------+--------------+ | Time_zone_id | Transition_type_id | Offset | Is_DST | Abbreviation | +--------------+--------------------+--------+--------+--------------+ | 1 | 0 | -968 | 0 | LMT | | 1 | 1 | 0 | 0 | GMT | +--------------+--------------------+--------+--------+--------------+ 2 rows in set (0.00 sec)
表欄位含義。
-
Time_zone_id: 時區ID。
-
Transition_type_id: 與time_zone_transition表中的Transition_type_id值對應。
-
Offset: 與UTC時間之間的偏移量。
-
Is_DST: ?
-
Abbreviation: 某某標準時間的縮寫,例如:GMT,該值為time_zone系統變數的有效值之一。
本期內容就介紹到這裡,本期內容參考連結如下:
https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html
"翻過這座山,你就可以看到一片海!"。堅持閱讀我們的"全方位認識 mysql 系統庫"系列文章分享,你就可以系統地學完它。謝謝你的閱讀,我們下期不見不散!
| 作者簡介
羅小波·沃趣科技高階資料庫技術專家
IT從業多年,主要負責MySQL 產品的資料庫支撐與售後二線支撐。曾參與版本釋出系統、輕量級監控系統、運維管理平臺、資料庫管理平臺的設計與編寫,熟悉MySQL體系結構,Innodb儲存引擎,喜好專研開源技術,多次在公開場合做過線下線上資料庫專題分享,發表過多篇資料庫相關的研究文章。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2660731/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 統計資訊記錄表|全方位認識 mysql 系統庫MySql
- 日誌資訊記錄表|全方位認識 mysql 系統庫MySql
- 複製資訊記錄表|全方位認識 mysql 系統庫MySql
- 資料庫物件資訊記錄表|全方位認識 mysql 系統庫資料庫物件MySql
- 最佳化器成本記錄表|全方位認識 mysql 系統庫MySql
- 配置表 | 全方位認識 sys 系統庫
- 統計資訊查詢檢視|全方位認識 sys 系統庫
- 訪問許可權控制系統|全方位認識 mysql 系統庫訪問許可權MySql
- 初相識 | 全方位認識 sys 系統庫
- 記憶體分配統計檢視 | 全方位認識 sys 系統庫記憶體
- Server層統計資訊字典表 | 全方位認識 information_schemaServerORM
- 會話和鎖資訊查詢檢視 | 全方位認識 sys 系統庫會話
- InnoDB 層系統字典表 | 全方位認識 information_schemaORM
- 等待事件統計檢視 | 全方位認識 sys 系統庫事件
- 其他混雜檢視 | 全方位認識 sys 系統庫
- 語句效率統計檢視 | 全方位認識 sys 系統庫
- 按 host 分組統計檢視 | 全方位認識 sys 系統庫
- 按 file 分組統計檢視 | 全方位認識 sys 系統庫
- 按 user 分組統計檢視|全方位認識 sys 系統庫
- 其他混雜儲存過程 | 全方位認識 sys 系統庫儲存過程
- Server 層混雜資訊字典表 | 全方位認識 information_schemaServerORM
- 字串與數字轉換函式 | 全方位認識 sys 系統庫字串函式
- 用於修改配置的儲存過程 | 全方位認識 sys 系統庫儲存過程
- 01MySQL的 庫、表初步認識MySql
- 用於檢視配置的儲存過程 | 全方位認識 sys 系統庫儲存過程
- 資訊系統建設的認識
- 配置查詢與執行緒追蹤函式 | 全方位認識 sys 系統庫執行緒函式
- 【MySQL資料庫】認識資料庫+環境搭建--------Windows系統MySql資料庫Windows
- Server層表級別物件字典表 | 全方位認識 information_schemaServer物件ORM
- 全方位認識HBase:一個值得擁有的NoSQL資料庫(一)SQL資料庫
- NTP系統時間同步-操作記錄
- 資料庫課設(校友錄資訊管理系統)資料庫
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 認識Import表Import
- MySQL 當記錄不存在時插入,當記錄存在時更新MySql
- 認識mysql(3)MySql
- 認識mysql(1)MySql
- MySQL資料庫時區配置MySql資料庫