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_keys
、mysql.foreign_key_column_usage
に正確に対応する INFORMATION_SCHEMA
テーブルはありません。 外部キー情報を取得する標準の SQL 方法は、INFORMATION_SCHEMA
REFERENTIAL_CONSTRAINTS
および KEY_COLUMN_USAGE
テーブルを使用することです。これらのテーブルは、foreign_keys
、foreign_key_column_usage
、およびその他のデータディクショナリテーブルのビューとして実装されるようになりました。
MySQL 8.0 より前の一部のシステムテーブルはデータディクショナリテーブルに置き換えられ、mysql
システムスキーマには存在しなくなりました:
events
データディクショナリテーブルは、MySQL 8.0 より前のevent
テーブルよりも優先されます。parameters
とroutines
のデータディクショナリテーブルは、MySQL 8.0 より前のproc
テーブルよりも優先されます。
これらのシステムテーブルには、ユーザーアカウントおよびそのアカウントが保持する権限に関する付与情報が含まれています。 これらのテーブルの構造、内容および目的の詳細は、セクション6.2.3「付与テーブル」 を参照してください。
MySQL 8.0 の時点では、付与テーブルは InnoDB
(トランザクション) テーブルです。 以前は、これらは MyISAM
(非トランザクション) テーブルでした。 権限テーブルストレージエンジンの変更は、CREATE USER
や GRANT
などのアカウント管理ステートメントの動作に付随する 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「プラグインのインストールおよびアンインストール」を参照してください。
サーバーは、次のシステムテーブルを使用してレプリケーションをサポートします:
gtid_executed
: GTID 値を格納するためのテーブル。 mysql.gtid_executed テーブルを参照してください。ndb_binlog_index
: NDB Cluster レプリケーションのバイナリログ情報。 このテーブルは、サーバーがNDBCLUSTER
サポートで構築されている場合にのみ作成されます。 セクション23.6.4「NDB Cluster レプリケーションスキーマおよびテーブル」を参照してください。slave_master_info
,slave_relay_log_info
,slave_worker_info
: 複製サーバーに複製情報を格納するために使用されます。 セクション17.2.4「リレーログおよびレプリケーションメタデータリポジトリ」を参照してください。
リストされているすべてのテーブルは、InnoDB
ストレージエンジンを使用します。
これらのシステムテーブルはオプティマイザで使用されます:
innodb_index_stats
,innodb_table_stats
:InnoDB
永続オプティマイザ統計に使用されます。 セクション15.8.10.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。server_cost
,engine_cost
: オプティマイザのコストモデルでは、クエリーの実行中に発生する操作に関するコスト見積り情報を含むテーブルが使用されます。server_cost
には、一般的なサーバー操作のオプティマイザコストの見積りが含まれています。engine_cost
には、特定のストレージエンジンに固有の操作の見積りが含まれています。 セクション8.9.5「オプティマイザコストモデル」を参照してください。
その他のシステムテーブルは、前述のカテゴリに適合しません:
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
システムテーブルスペースに存在していたデータディクショナリバッファテーブルを置き換えます。