MySQL 8.0 リファレンスマニュアル


5.3 mysql システムスキーマ

mysql スキーマはシステムスキーマです。 これには、MySQL サーバーの実行時に必要な情報を格納するテーブルが含まれます。 広範なカテゴリ化とは、mysql スキーマに、データベースオブジェクトメタデータを格納するデータディクショナリテーブルと、他の操作目的で使用されるシステムテーブルが含まれていることです。 次の説明では、システムテーブルのセットをさらに小さなカテゴリに分割します。

このセクションの残りの部分では、各カテゴリのテーブルを、追加情報の相互参照とともに列挙します。 データディクショナリテーブルおよびシステムテーブルは、特に指定がないかぎり、InnoDB ストレージエンジンを使用します。

mysql システムテーブルおよびデータディクショナリテーブルは、MySQL データディレクトリの mysql.ibd という名前の単一の InnoDB テーブルスペースファイルに存在します。 以前は、これらのテーブルは mysql データベースディレクトリの個々のテーブルスペースファイルに作成されていました。

保存データ暗号化は、mysql システムスキーマテーブルスペースに対して有効にできます。 詳細は、セクション15.13「InnoDB 保存データ暗号化」を参照してください。

データディクショナリテーブル

これらのテーブルは、データベースオブジェクトに関するメタデータを含むデータディクショナリで構成されます。 追加情報については 第14章「MySQL データディクショナリを参照してください。

重要

データディクショナリは、MySQL 8.0 で新しく追加されました。 データディクショナリ対応サーバーには、以前の MySQL リリースと比較した一般的な操作上の違いがいくつかあります。 詳細は、セクション14.7「データディクショナリの使用方法の違い」を参照してください。 また、MySQL 5.7 から MySQL 8.0 へのアップグレードの場合、アップグレード手順は以前の MySQL リリースと多少異なり、特定の前提条件を確認してインストールのアップグレード準備状況を確認する必要があります。 詳細は、セクション2.11「MySQL のアップグレード」(特に セクション2.11.5「アップグレード用のインストールの準備」) を参照してください。

  • catalogs: カタログ情報。

  • character_sets: 使用可能な文字セットに関する情報。

  • check_constraints: テーブルに定義されている CHECK 制約に関する情報。 セクション13.1.20.6「CHECK 制約」を参照してください。

  • collations: 各文字セットの照合順序に関する情報。

  • column_statistics: カラム値のヒストグラム統計。 セクション8.9.6「オプティマイザ統計」を参照してください。

  • column_type_elements: カラムで使用される型に関する情報。

  • columns: テーブルのカラムに関する情報。

  • dd_properties: バージョンなどのデータディクショナリのプロパティを識別するテーブル。 サーバーはこれを使用して、データディクショナリを新しいバージョンにアップグレードする必要があるかどうかを判断します。

  • events: イベントスケジューラのイベントに関する情報。 セクション25.4「イベントスケジューラの使用」を参照してください。 --skip-grant-tables オプションを指定してサーバーを起動すると、イベントスケジューラは無効になり、テーブルに登録されているイベントは実行されません。 セクション25.4.2「イベントスケジューラの構成」を参照してください。

  • foreign_keys, foreign_key_column_usage: 外部キーに関する情報。

  • index_column_usage: インデックスで使用されるカラムに関する情報。

  • index_partitions: インデックスで使用されるパーティションに関する情報。

  • index_stats: ANALYZE TABLE の実行時に生成される動的インデックス統計の格納に使用されます。

  • indexes: テーブルインデックスに関する情報。

  • innodb_ddl_log: クラッシュセーフな DDL 操作の DDL ログを格納します。

  • parameter_type_elements: ストアドプロシージャとストアドファンクションのパラメータ、およびストアドファンクションの戻り値に関する情報。

  • parameters: ストアドプロシージャおよびストアドファンクションに関する情報。 セクション25.2「ストアドルーチンの使用」を参照してください。

  • resource_groups: リソースグループに関する情報。 セクション5.1.16「リソースグループ」を参照してください。

  • routines: ストアドプロシージャおよびストアドファンクションに関する情報。 セクション25.2「ストアドルーチンの使用」を参照してください。

  • schemata: schemata に関する情報。 MySQL では、スキーマはデータベースであるため、このテーブルはデータベースに関する情報を提供します。

  • st_spatial_reference_systems: 空間データに使用可能な空間参照システムに関する情報。

  • table_partition_values: テーブルパーティションで使用される値に関する情報。

  • table_partitions: テーブルで使用されるパーティションに関する情報。

  • table_stats: ANALYZE TABLE の実行時に生成される動的テーブル統計に関する情報。

  • tables: データベース内のテーブルに関する情報。

  • tablespace_files: テーブルスペースで使用されるファイルに関する情報。

  • tablespaces: アクティブなテーブルスペースに関する情報。

  • triggers: トリガーに関する情報。

  • view_routine_usage: ビューとビューで使用されるストアドファンクション間の依存性に関する情報。

  • view_table_usage: ビューとその基礎となるテーブル間の依存性を追跡するために使用されます。

データディクショナリテーブルは非表示です。 SELECT では読み取ることができず、SHOW TABLES の出力には表示されず、INFORMATION_SCHEMA.TABLES テーブルにもリストされません。 ただし、ほとんどの場合、クエリー可能な対応する INFORMATION_SCHEMA テーブルがあります。 概念的には、INFORMATION_SCHEMA は、MySQL がデータディクショナリメタデータを公開するためのビューを提供します。 たとえば、mysql.schemata テーブルから直接選択することはできません:

mysql> SELECT * FROM mysql.schemata;
ERROR 3554 (HY000): Access to data dictionary table 'mysql.schemata' is rejected.

かわりに、対応する INFORMATION_SCHEMA テーブルからその情報を選択します:

mysql> SELECT * FROM INFORMATION_SCHEMA.SCHEMATA\G
*************************** 1. row ***************************
              CATALOG_NAME: def
               SCHEMA_NAME: mysql
DEFAULT_CHARACTER_SET_NAME: utf8mb4
    DEFAULT_COLLATION_NAME: utf8mb4_0900_ai_ci
                  SQL_PATH: NULL
        DEFAULT_ENCRYPTION: NO
*************************** 2. row ***************************
              CATALOG_NAME: def
               SCHEMA_NAME: information_schema
DEFAULT_CHARACTER_SET_NAME: utf8
    DEFAULT_COLLATION_NAME: utf8_general_ci
                  SQL_PATH: NULL
        DEFAULT_ENCRYPTION: NO
...

mysql.indexes に正確に対応する INFORMATION_SCHEMA テーブルはありませんが、INFORMATION_SCHEMA.STATISTICS には同じ情報の多くが含まれています。

現時点では、mysql.foreign_keysmysql.foreign_key_column_usage に正確に対応する INFORMATION_SCHEMA テーブルはありません。 外部キー情報を取得する標準の SQL 方法は、INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS および KEY_COLUMN_USAGE テーブルを使用することです。これらのテーブルは、foreign_keysforeign_key_column_usage、およびその他のデータディクショナリテーブルのビューとして実装されるようになりました。

MySQL 8.0 より前の一部のシステムテーブルはデータディクショナリテーブルに置き換えられ、mysql システムスキーマには存在しなくなりました:

  • events データディクショナリテーブルは、MySQL 8.0 より前の event テーブルよりも優先されます。

  • parametersroutines のデータディクショナリテーブルは、MySQL 8.0 より前の proc テーブルよりも優先されます。

システムテーブルの付与

これらのシステムテーブルには、ユーザーアカウントおよびそのアカウントが保持する権限に関する付与情報が含まれています。 これらのテーブルの構造、内容および目的の詳細は、セクション6.2.3「付与テーブル」 を参照してください。

MySQL 8.0 の時点では、付与テーブルは InnoDB (トランザクション) テーブルです。 以前は、これらは MyISAM (非トランザクション) テーブルでした。 権限テーブルストレージエンジンの変更は、CREATE USERGRANT などのアカウント管理ステートメントの動作に付随する MySQL 8.0 の変更の基礎となります。 以前は、複数のユーザーを指定したアカウント管理ステートメントは、一部のユーザーでは成功し、他のユーザーでは失敗していました。 ステートメントはトランザクションになり、すべての名前付きユーザーに対して成功するか、ロールバックされ、エラーが発生した場合は何の効果もありません。

注記

MySQL が古いバージョンからアップグレードされたものの、付与テーブルが MyISAM から InnoDB にアップグレードされていない場合、サーバーはそれらを読み取り専用とみなし、アカウント管理ステートメントはエラーを生成します。 アップグレードの手順については、セクション2.11「MySQL のアップグレード」を参照してください。

  • user: ユーザーアカウント、グローバル権限およびその他の非権限カラム。

  • global_grants: ユーザーへの動的グローバル権限の割当て。静的権限と動的権限 を参照してください。

  • db: Database-level privileges.

  • tables_priv: Table-level privileges.

  • columns_priv: Column-level privileges.

  • procs_priv: ストアドプロシージャおよびファンクション権限。

  • proxies_priv: Proxy-user privileges.

  • default_roles: このテーブルは、ユーザーが SET ROLE DEFAULT に接続して認証または実行した後にアクティブ化されるデフォルトのロールを示しています。

  • role_edges: このテーブルは、ロールのサブグラフのエッジを示しています。

    特定の user テーブルの行がユーザーアカウントまたはロールを参照する場合があります。 サーバーは、認証 ID 間の関係に関する情報を role_edges テーブルで調べることで、行がユーザーアカウント、ロールまたはその両方を表すかどうかを調べることができます。

  • password_history: パスワード変更に関する情報。

オブジェクト情報システムテーブル

次のシステムテーブルには、コンポーネント、ユーザー定義関数、およびサーバー側プラグインに関する情報が含まれています:

  • component: INSTALL COMPONENT を使用してインストールされたサーバーコンポーネントのレジストリ。 このテーブルにリストされているコンポーネントは、サーバーの起動シーケンス中にローダーサービスによってインストールされます。 セクション5.5.1「コンポーネントのインストールおよびアンインストール」を参照してください。

  • func: CREATE FUNCTION を使用してインストールされたユーザー定義関数 (UDF) のレジストリ。 通常の起動シーケンスでは、サーバーはこのテーブルに登録されている UDF をロードします。 --skip-grant-tables オプションを使用してサーバーを起動した場合、テーブルに登録されている UDF はロードされず、使用できません。 セクション5.7.1「ユーザー定義関数のインストールおよびアンインストール」を参照してください。

    注記

    mysql.func システムテーブルと同様に、パフォーマンススキーマ user_defined_functions テーブルには、CREATE FUNCTION を使用してインストールされた UDF が一覧表示されます。 mysql.func テーブルとは異なり、user_defined_functions テーブルには、サーバーコンポーネントまたはプラグインによって自動的にインストールされる UDF もリストされます。 この違いにより、どの UDF がインストールされているかを mysql.func より user_defined_functions で確認することをお薦めします。 セクション27.12.19.12「user_defined_functions テーブル」を参照してください。

  • plugin: INSTALL PLUGIN を使用してインストールされたサーバー側プラグインのレジストリ。 通常の起動シーケンスでは、サーバーはこのテーブルに登録されているプラグインをロードします。 サーバーが --skip-grant-tables オプションで起動された場合、テーブルに登録されているプラグインはロードされず、使用できません。 セクション5.6.1「プラグインのインストールおよびアンインストール」を参照してください。

ログシステムテーブル

サーバーは、ロギングに次のシステムテーブルを使用します:

  • general_log: 一般クエリーログテーブル。

  • slow_log: スロークエリーログテーブル。

ログテーブルは CSV ストレージエンジンを使用します。

詳細は、セクション5.4「MySQL Server ログ」を参照してください。

サーバー側ヘルプシステムのテーブル

次のシステムテーブルには、サーバー側のヘルプ情報が含まれています:

  • help_category: ヘルプカテゴリに関する情報。

  • help_keyword: ヘルプトピックに関連付けられたキーワード。

  • help_relation: ヘルプキーワードとトピック間のマッピング。

  • help_topic: ヘルプトピックの内容。

詳細は、セクション5.1.17「サーバー側ヘルプのサポート」を参照してください。

タイムゾーンシステムテーブル

次のシステムテーブルには、タイムゾーン情報が含まれています:

  • time_zone: タイムゾーン ID、およびうるう秒を使用するかどうか。

  • time_zone_leap_second: うるう秒が発生したとき。

  • time_zone_name: タイムゾーン ID と名前のマッピング。

  • time_zone_transition, time_zone_transition_type: タイムゾーンの説明。

詳細は、セクション5.1.15「MySQL Server でのタイムゾーンのサポート」を参照してください。

レプリケーションシステムテーブル

サーバーは、次のシステムテーブルを使用してレプリケーションをサポートします:

リストされているすべてのテーブルは、InnoDB ストレージエンジンを使用します。

オプティマイザシステムテーブル

これらのシステムテーブルはオプティマイザで使用されます:

その他のシステムテーブル

その他のシステムテーブルは、前述のカテゴリに適合しません:

  • audit_log_filter, audit_log_user : MySQL Enterprise Audit がインストールされている場合、これらのテーブルは監査ログフィルタ定義およびユーザーアカウントの永続記憶域を提供します。 監査ログテーブルを参照してください。

  • firewall_group_allowlist, firewall_groups, firewall_memebership, firewall_users, firewall_whitelist : MySQL Enterprise Firewall がインストールされている場合、これらのテーブルはファイアウォールで使用される情報の永続記憶域を提供します。 セクション6.4.7「MySQL Enterprise Firewall」を参照してください。

  • servers: FEDERATED ストレージエンジンによって使用されます。 セクション16.8.2.2「CREATE SERVER を使用した FEDERATED テーブルの作成」を参照してください。

  • innodb_dynamic_metadata: InnoDB ストレージエンジンが、自動インクリメントカウンタ値やインデックスツリー破損フラグなどの高速変更テーブルメタデータを格納するために使用します。 InnoDB システムテーブルスペースに存在していたデータディクショナリバッファテーブルを置き換えます。


関連キーワード:  テーブル, 情報, サーバー, 参照, インストール, セクション, スキーマ, ユーザー, 変数, ログ