Mysql とファイル システムの関係

「ナゲッツ・セーリングプログラム」に参加しています

Mysql とファイル システムの関係

Linux では、ディスクを管理するためにファイル システムが使用されますが、InnoDB や MyISAM などの一般的に使用される Mysql のストレージ エンジンは、ファイル システムに自然にリンクされているファイル ストレージを使用します。話しましょう

Mysql データ ディレクトリ

Mysql システム スタートアップ ファイル (デフォルト my.cnf) は、Mysqlのグローバル システム変数 datadir を指定できます。この変数は、次のように、Mysql のデータ ストレージ ディレクトリを指定できます。

image-20220906193958788.png

または、クエリ変数の形式で取得します (以下のすべてのデモ スクリーンショットはこのディレクトリからのものです)。

mysql> show variables like '%datadir%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| datadir       | /usr/local/mysql-5.7.26/data/ |
+---------------+-------------------------------+
1 row in set (0.00 sec)

复制代码

データディレクトリ関連の構造

データベースのストレージ構造

データベースが作成されるたびに、定義済みの datadir パスの下に、データベースと同じ名前のフォルダーが作成されます。

mysql> create database test_data;
Query OK, 1 row affected (0.00 sec)

复制代码

image-20220906195252088.png

test_data フォルダーが作成されると、そのフォルダーに db.opt ファイルが作成されます。このファイルは、文字セットや比較規則などのデータベース属性を格納するために使用されます。

image-20220906195330216.png

注意が必要なのは、システムに付属する 4 つのデータベースです。 server performance view)、information_schema以外のフォルダが作成されます。

テーブル構造ストレージ

たとえば、上記で作成した test_data データベースの新しいテーブルを作成します。

CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

复制代码

その後、Mysql は、同じ名前のデータベース フォルダーに同じテーブル名の新しいファイル test_table.frm を作成します、つまり、test_data. このファイルは、テーブルのフィールド、インデックス、制約などを記述するために使用されます。

image-20220906200615556.png

テーブル データ ストレージ

テーブル データはさまざまなストレージ エンジンに保存され、ストレージ ファイルも異なります.一般的に使用されている InnoDB と MyISAM を例として取り上げます。

InnoDB ストレージ エンジン テーブル データ ストレージ

InnoDB ストレージ エンジンは、ストレージ スペースをページ単位で管理します. データ ページのサイズは 16k です. InnoDB では、管理の便宜のためにテーブル スペースの概念が導入されています. テーブル スペースには複数のデータ ページが含まれる場合があります. もちろん、テーブル スペースは以下のようにいくつかに分けられます。

システム表領域

Mysql バージョン 5.5.7 から 5.6.6 まで, テーブル データはデフォルトでシステム テーブル スペースに配置されます. デフォルトでは, データ ディレクトリの場所は自動的に ibdata1 という名前のファイルを生成します. ファイル サイズは 12M です. 次のように.

image-20220906224307504.png

このファイルのサイズは固定されておらず、自動的に大きくなる可能性があります。つまり、保存できない場合、ファイルのサイズが自動的に大きくなる可能性があります。

独立した表領域

Mysql バージョン 5.6.6 以降、システム テーブル スペースに保存されなくなりましたが、独立したテーブル スペースに保存されます. 独立性とは、テーブルとテーブル間のデータが独立していることを意味します. Mysql はテーブルごとに独立したスペースを作成します.テーブルと同じ数の独立したスペースがあるため、テーブル作成ステートメントを実行すると

-- 默认InnoDB存储引擎
CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

复制代码

同じテーブル名の新しい idb ファイルが、現在のデータベースと同じ名前のディレクトリに作成されます。

image-20220906225024509.png

ユーザーがシステム テーブル スペースと独立テーブル スペースのどちらを選択するかについては、ユーザーが自分で決定innodb_file_per_tableできます. システム変数を変更することで実現できます. 0 の場合はシステム テーブル スペースを使用することを意味します. 1 です。独立したテーブル スペースを使用することを意味します。ここで注意する必要があるのは、システム パラメータを変更することです。これは、新しく作成されたテーブルに対してのみ有効です。システム パラメータを変更する前のテーブルは、手動で変更する必要があります。

MyISAM ストレージ エンジン テーブル データ ストレージ

MyISAM ストレージ エンジンと InnoDB ストレージ エンジンのファイル システム上の最大の違いは、MyISAM がインデックスとデータ ファイルを分離することです. InnoDB は、インデックスが両方ともデータであることを強調します. そのため、MyISAM ストレージ エンジンのテーブルが記述されます3つのファイルで。

  • TableName.frm: テーブル構造、インデックス、制約などを記述します。

  • TableName.MYD: テーブル データを格納します。

  • tablename.MYI: ストレージ テーブル インデックス。

次のようにテスト テーブルを作成します。

CREATE TABLE `test_table_myisam` (
  `name` varchar(100) DEFAULT NULL
) ENGINE=MyISAM

复制代码

image-20220906230410960.png

特別観収納

create view view_test as select * from test_table;

复制代码

ビューは本質的に仮想テーブルであり、クエリ ステートメントの単なるエイリアスであるため、ストレージ中にビューのデータは保存されず、ビューのテーブル構造のみが保存されるため、ビューを作成すると frm ファイルのみが作成されます。ビューと同じ名前。

image-20220906201709888.png

おすすめ

転載: juejin.im/post/7147657045678751752