タイムゾーン情報記録表| mysqlシステムライブラリの包括的な理解

前回の「オプティマイザーコストレコードテーブル| MySQLシステムライブラリの包括的理解」では、mysqlシステムライブラリのオプティマイザーコストレコードテーブルについて詳しく紹介しました。この号では、シリーズ「タイムゾーン情報」の第6部を紹介します。記録表| mysqlシステムライブラリの包括的な理解」、mysqlシステムライブラリのシステム学習の旅を開始するために私たちに従ってください!

01タイムゾーン情報の概要

MySQLサーバーは、いくつかのタイムゾーン設定を維持します。

  • システムタイムゾーン:サーバーが起動したら、ホストのタイムゾーンを決定し、それを使用してサーバーのsystem_time_zoneシステム変数値を設定します。この変数は読み取り専用です。さらに、-timezone = timezone_nameオプションを使用して、サーバーの起動時にmysqld_safeのMySQLサーバーのシステムタイムゾーンを設定できます。または、サーバーが起動する前に、TZシステム環境変数をtimezone_name値に設定します。

  • サーバーの現在のタイムゾーン。グローバルシステム変数time_zoneの値は、現在実行中のサーバータイムゾーンを表します。システム変数の初期値は「SYSTEM」です。これは、サーバータイムゾーンがシステムタイムゾーンと同じであることを意味します。

    *システム変数time_zoneがSYSTEMに設定されている場合、タイムゾーンの計算に必要な各MySQL関数が呼び出されると、システムライブラリが呼び出され、現在のシステムタイムゾーンが決定されます。したがって、このシステムコールはグローバルな相互除外によって保護され、競合が発生する可能性があります。

    *サーバーのグローバル現在のタイムゾーンは、起動時に--default-time-zone = timezone起動オプションを使用して明示的に指定できます。または、my.cnfでdefault-time-zone = 'timezone'を使用して指定できます。SUPER権限をお持ちの場合は、ステートメントSETGLOBAL time_zone = timezone;を使用して、サーバーの実行時にグローバルサーバータイムゾーン値を設定できます。

    * time_zoneはグローバルなセッション変数です。セッションレベルでセッションごとに独自のタイムゾーン(接続されたタイムゾーン)を個別に設定できます。各セッションのtime_zone値は、デフォルトでtime_zoneシステム変数のグローバル値を継承しますが、各セッションはSETtime_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」、「MET」などの特定のタイムゾーン名に設定することもできますが、設定できる有効な値は、mysqlシステム辞書ライブラリのtime_zoneテーブルから取得されます。このテーブルの情報は必須です。対応するコマンドを手動で使用して挿入します。挿入方法は後で紹介します。

タイムゾーンテーブルに入力する方法(time_zone、time_zone_leap_second、time_zone_name、time_zone_transition、time_zone_transition_typeは、MySQLシステムディクショナリライブラリのタイムゾーンに関連します。これらのテーブルは、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とジャンプ秒の間のマッピング関係に関するデータを提供します。

以下は、テーブルに格納されている情報の内容です(データを取得するには、タイムゾーンデータ情報をデータベースに手動でインポートする必要があります)。

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:タイムゾーンがリープ秒を使用するかどうかを示します(2つのタイムシステムの2番目の長さが異なるため、GPSアトミッククロック時間とUTC時間の違い、つまり、呼び出すタイムスケールが同じではなく、最終的には時間の累積により、2つ人々の生活の時間を調整するために、世界の調整された時間は、この違いに対処するために秒をジャンプする方法を採用しています。2つの間の違いは現在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時間の違いを示しますか?

  • 補正:ジャンプ秒の補正値。

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)

テーブルフィールドの意味。

  • 名前:タイムゾーンの名前。この値は、time_zoneシステム変数の有効な値の1つです。

  • Time_zone_id:タイムゾーンID。time_zoneテーブルのIDに対応します。

2.4。time_zone_transition

この表は、クエリタイムゾーンのジャンプする2番目のデータを提供します。

以下は、テーブルに格納されている情報です。

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値に対応します。

  • オフセット:UTC時間からのオフセット。

  • Is_DST :?

  • 省略形:特定の標準時間の省略形。例:GMT、この値はtime_zoneシステム変数の有効な値の1つです。

この号の内容はここで紹介されており、この号の参照リンクは次のとおりです。

https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html

「「 

「この山を登ると、海が見えます!」共有する「MySQLシステムライブラリの包括的な理解」シリーズの記事を読み続けると、体系的に学ぶことができます。読んでいただきありがとうございます。次号でお会いしましょう!

|作者について

LuoXiaobo・ScaleFluxデータベーステクノロジーエキスパート

「千の金のレシピ-MySQLパフォーマンス最適化ピラミッドルール」、「データエコロジー:MySQLレプリケーションテクノロジーとプロダクションプラクティス」の著者の1人。

MySQLアーキテクチャに精通し、オープンソーステクノロジーに特化するなど、データベース全体のチューニングに精通し、オープンソーステクノロジーの推進に熱心であり、オンラインおよびオフラインで多くの公開データベーストピック共有を行い、100近くのデータベース関連の研究記事を公開しています。

全文は終わりました。

MySQLをお楽しみください:)

TeacherYeの「MySQLCoreOptimization」クラスがMySQL8.0にアップグレードされました。コードをスキャンして、MySQL8.0の練習の旅を始めてください。

おすすめ

転載: blog.csdn.net/n88Lpo/article/details/110600127