MySQL 8.0 リファレンスマニュアル  /  MySQL データディクショナリ  /  データディクショナリスキーマ

14.1 データディクショナリスキーマ

データディクショナリテーブルは保護されており、MySQL のデバッグビルドでのみアクセスできます。 ただし、MySQL では、INFORMATION_SCHEMA テーブルおよび SHOW ステートメントを介したデータディクショナリテーブルに格納されたデータへのアクセスがサポートされています。 データディクショナリを構成するテーブルの概要は、データディクショナリテーブル を参照してください。

MySQL システムテーブルは MySQL 8.0 にまだ存在し、mysql システムデータベースで SHOW TABLES ステートメントを発行することで表示できます。 通常、MySQL データディクショナリテーブルとシステムテーブルの違いは、データディクショナリテーブルには SQL クエリーの実行に必要なメタデータが含まれるのに対し、システムテーブルにはタイムゾーンやヘルプ情報などの補助データが含まれることです。 MySQL システムテーブルとデータディクショナリテーブルも、アップグレード方法が異なります。 MySQL サーバーは、データディクショナリのアップグレードを管理します。 SQL サーバー。 データディクショナリのアップグレード方法を参照してください。 MySQL システムテーブルをアップグレードするには、完全な MySQL アップグレード手順を実行する必要があります。 セクション2.11.3「MySQL のアップグレードプロセスの内容」を参照してください。

データディクショナリのアップグレード方法

MySQL の新しいバージョンには、データディクショナリテーブル定義の変更が含まれる場合があります。 このような変更は、新しくインストールされたバージョンの MySQL に存在しますが、MySQL バイナリのインプレースアップグレードを実行すると、新しいバイナリを使用して MySQL サーバーを再起動したときに変更が適用されます。 起動時に、データディクショナリテーブルをアップグレードする必要があるかどうかを判断するために、サーバーのデータディクショナリのバージョンがデータディクショナリに格納されているバージョン情報と比較されます。 アップグレードが必要でサポートされている場合、サーバーは、更新された定義を含むデータディクショナリテーブルを作成し、永続化されたメタデータを新しいテーブルにコピーし、古いテーブルを新しいテーブルに原子的に置き換え、データディクショナリを再初期化します。 アップグレードが不要な場合、データディクショナリテーブルを更新せずに起動が続行されます。

データディクショナリテーブルのアップグレードはアトミック操作で、すべてのデータディクショナリテーブルが必要に応じてアップグレードされるか、操作が失敗することを意味します。 アップグレード操作が失敗した場合、サーバーの起動はエラーで失敗します。 この場合、古いサーバーバイナリを古いデータディレクトリとともに使用してサーバーを起動できます。 新しいサーバーバイナリを再度使用してサーバーを起動すると、データディクショナリのアップグレードが再試行されます。

通常、データディクショナリテーブルが正常にアップグレードされた後は、古いサーバーバイナリを使用してサーバーを再起動することはできません。 その結果、データディクショナリテーブルのアップグレード後、MySQL サーバーバイナリの以前の MySQL バージョンへのダウングレードはサポートされません。

mysqld --no-dd-upgrade オプションを使用すると、起動時のデータディクショナリテーブルの自動アップグレードを回避できます。 --no-dd-upgrade が指定され、サーバーのデータディクショナリのバージョンがデータディクショナリに格納されているバージョンと異なることがサーバーで検出されると、データディクショナリのアップグレードが禁止されていることを示すエラーで起動が失敗します。

MySQL のデバッグビルドを使用したデータディクショナリテーブルの表示

データディクショナリテーブルはデフォルトで保護されていますが、デバッグサポートを使用して (-DWITH_DEBUG=1 CMake オプションを使用して)MySQL をコンパイルし、+d,skip_dd_table_access_check debug オプションおよび修飾子を指定することでアクセスできます。 デバッグビルドのコンパイルの詳細は、セクション5.9.1.1「デバッグのための MySQL のコンパイル」 を参照してください。

警告

データディクショナリテーブルを直接変更または書き込むことはお薦めしません。また、MySQL インスタンスが動作不能になる可能性があります。

デバッグサポート付きで MySQL をコンパイルした後、次の SET ステートメントを使用して、mysql クライアントセッションでデータディクショナリテーブルを表示できるようにします:

mysql> SET SESSION debug='+d,skip_dd_table_access_check';

データディクショナリテーブルのリストを取得するには、次のクエリーを使用します:

mysql> SELECT name, schema_id, hidden, type FROM mysql.tables where schema_id=1 AND hidden='System';

データディクショナリテーブル定義を表示するには、SHOW CREATE TABLE を使用します。 例:

mysql> SHOW CREATE TABLE mysql.catalogs\G

関連キーワード:  テーブル, サーバー, バージョン, 起動, バイナリ, スキーマ, サポート, 情報, ステートメント, 参照