MySQLファイルストレージの詳細な説明

MySQLファイルストレージの詳細な説明

ファイルシステムとは何か

InnoDB や MyIASM などのストレージ エンジンはテーブルをディスク (永続的) に保存することが知られています。データを読み取りたい場合、これらのストレージ エンジンはファイル システムからデータを読み取り、それを返します。データを書き込む場合、これらのストレージ エンジンはデータをファイル システムに書き戻します。

もちろん、MySQL は実際のデータを保存するだけでなく、ファイル システムに属する一連の他のログも保存します。

ストレージエンジンに保存されているファイルのアドレス

クライアントを使用してサーバーとの接続を確立した後、このシステム変数の値を表示できます。

'datadir' のような変数を表示します。

画像.png

もちろん、このディレクトリは設定ファイルを通じて変更でき、自分で指定することもできます。

ディスクファイルには何が含まれていますか?

MySQL は動作中にどのようなデータを生成するのでしょうか? もちろん、作成したデータベース、テーブル、ビュー、トリガーなどのユーザー データも含まれます。 これらのユーザー データに加えて、MySQL はプログラムの動作を向上させるために、その他の追加データも作成します。

データベースの日付ディレクトリのテーブル情報

CREATE DATABASE ステートメントを使用してデータベースを作成すると、ファイル システムでは実際に何が起こるのでしょうか。実は非常に簡単です。各データベースは、データ ディレクトリの下のサブディレクトリ、つまりフォルダーに対応しています。新しいデータベースを作成すると、MySQL は次の 2 つのことを行います。

  • データ ディレクトリにデータベース名と同じ名前のサブディレクトリ (またはフォルダー) を作成します。
  • データベース名と同じ名前のサブディレクトリに db.opt という名前のファイルを作成します。このファイルには、データベースの文字セットや比較ルールなど、データベースのさまざまなプロパティが含まれています。 現在自分のコンピューターにどのようなデータベースがあるか確認してみましょう。

画像.png

現在 5 つのデータベースがあり、そのうち mysqladv データベースはカスタム データベースであり、他の 4 つのデータベースは MySQL に付属するシステム データベースであることがわかります。データディレクトリの内容を見てみましょう。

画像.png

もちろん、このデータ ディレクトリの下には多くのファイルとサブディレクトリがありますが、よく見ると、information_schema システム データベースを除いて、他のデータベースにはデータ ディレクトリの下に対応するサブディレクトリがあります。この information_schema は非常に特殊なので、その機能については後で説明します。

InnoDB がデータを保存する方法

InnoDB がデータベースを追加すると、ログ ルート ディレクトリにフォルダーが追加されます。

画像.png

各フォルダーには、対応するすべてのテーブル データが保存されます。各表のデータは、通常、次の 2 つの規則に従って分割されます。

テーブル構造の定義

作成した学習ライブラリの index_condition_pushdown テーブルを例に挙げてみましょう。

画像.png

画像.png

テーブル構造はこれらのデータであり、対応するストレージファイル名は次のとおりです。

画像.png

テーブル構造には、テーブルの名前、テーブル内の列の数、各列のデータ型、制約とインデックス、使用される文字セットと比較ルールなどが含まれます。このすべての情報は、テーブル作成ステートメントに反映されます。この情報を保存するために、InnoDB と MyIASM ストレージ エンジンは両方とも、データ ディレクトリの下の対応するデータベース サブディレクトリにテーブル構造を記述するために使用されるファイルを作成します。ファイル名は、テーブル名.frm です。

表内のデータ

テーブルが属するデータベースに対応するサブディレクトリに、独立したテーブルスペースを表すファイルを作成します。ファイル名は、.ibd 拡張子が追加されることを除いて、テーブル名と同じです。したがって、完全なファイル名は、テーブル名.ibd のようになります。

画像.png

MyISAMがテーブルデータを保存する方法

MyISAM のデータとインデックスは別々に保存されます。したがって、ファイル システムでは、データ ファイルとインデックス ファイルを格納するために異なるファイルが使用されます。 (InnoDB と比較すると、ibd ファイルはデータ + インデックスを格納し、MyISAM はそれを再度分割します)。

画像.png

図に示すように、ストレージ エンジンを変更します。

画像.png

ファイルディレクトリは上記のように変更されます。これは、InnoDB .ibd ファイルを次の 2 つのファイルに分割することを意味します。

.MYD はテーブルのデータ ファイルを表します。

.MYI はテーブルのインデックス ファイルを表します。

ここでは、InnoDB と MyISAM の重要な違いをまとめます。つまり、InnoDB のインデックスとデータは 1 つのフォルダーに保存されますが、MyISAM ではデータ ファイルとインデックス ファイルが 2 つのファイルに別々に保存されます。

ログファイル

サーバーの動作中に、通常のクエリ ログ、エラー ログ、binlog ログ、REDO ログ、UNDO ログなどのさまざまなログが生成されます。ログ ファイルには、MySQL データベースに影響を与えるさまざまな種類のアクティビティが記録されます。 一般的なログ ファイルには、エラー ログ、スロー クエリ ログ、クエリ ログ、バイナリ ログなどがあります。

エラーログ

エラー ログ ファイルには、MySQL の起動、操作、シャットダウンのプロセスが記録されます。問題が発生した場合は、まずこのファイルをチェックして問題の場所を特定する必要があります。このファイルには、すべてのエラー メッセージだけでなく、いくつかの警告メッセージや正しいメッセージも記録されます。ユーザーは、次のコマンドを使用してエラー ログ ファイルの場所を表示できます。

'log_error' のような変数を表示します\G;

画像.png

MySQL が正常に起動できない場合、最初に探す必要があるファイルは、エラー情報を記録するエラー ログ ファイルです。

スロークエリログ

スロークエリ ログは、問題がある可能性のある SQL ステートメントを見つけるのに役立ち、それによって SQL ステートメントを最適化します。

クエリログ

クエリ ログには、リクエストが正しく実行されたかどうかに関係なく、MySQL データベースへのすべてのリクエストに関する情報が記録されます。

デフォルトのファイル名: hostname.log

画像.png

MySQL 5.1以降では、クエリログレコードはmysqlスキーマのgeneral_logテーブルに格納できます。

画像.png

バイナリログ (binlog)

画像.png

バイナリ ログには、MySQL データベースを変更するすべての操作が記録されます。操作自体によってデータベースが変更されない場合は、その操作がバイナリ ファイルにも書き込まれることがあります。ただし、selectやshowなどの操作は含まれません(これらの操作はデータ自体を変更しないため)

binlogのいくつかの機能

回復

一部のデータの回復にはバイナリ ログが必要です。

コピー

原理はリカバリと同様です。バイナリログをコピーして実行することで、リモートの MySQL データベース (一般にスレーブまたはスタンバイと呼ばれます) が MySQL データベース (一般にマスターまたはプライマリと呼ばれます) とリアルタイムで同期されます。

監査(あまり人気がありませんが、db が担当します)

ユーザーはバイナリ ログの情報を使用して、データベースへのインジェクション攻撃があるかどうかを監査および判断できます。

要約する

これで、MySQL ファイル ストレージに関するこの記事は終了です。MySQL ファイル ストレージに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLデータファイルの保存場所を表示する方法

<<:  開発をスピードアップできる VueUse ライブラリ 5 つ (まとめ)

>>:  Kali に docker と portainer をインストールする方法

推薦する

インストールされていないバージョンの MySQL を使用する手順とパスワードを忘れた場合の解決策

最初のステップは、圧縮されたパッケージを対応するディスクに解凍することです。 2 番目の手順は、cm...

JavaScript の new 演算子の原理と例の詳細な説明

新しい用途new の機能は、コンストラクターを通じてインスタンス オブジェクトを作成することです。イ...

Dockerがsudo操作を使用する必要がある問題を解決する

手順は以下のとおりです1. dockerグループを作成する: sudo groupadd docke...

HTML マルチメディア アプリケーション: Web ページにフラッシュ アニメーションと音楽を挿入する

1. HTML_falshアニメーションでのマルチメディアの応用(WebページへのFlashアニメー...

Linux カーネルの探究: Kconfig の秘密

Linux 構成/ビルド システムがどのように機能するかを深く理解します。 Linux カーネル構成...

MySQLストレージエンジンについて学びましょう

目次序文1. MySQL メインストレージエンジン: 2. さまざまなストレージエンジンがテーブルを...

一般的なDockerコマンドの詳細な説明

1. ヘルプコマンド1. 現在のDockerバージョンを表示する docker バージョン2. イメ...

MySQLのunion allとunionの違いを簡単に理解する

Union は、重複行を除外し、デフォルトのソートを実行する、データに対する結合操作です。Union...

image/x-png の ContentType について

これにより、png ファイルのアップロードも不可能になりました (後で情報を調べたところ、レジストリ...

MySQL 5.7のワンクリックインストールとパスワードポリシーの変更方法

1.Mysqlスクリプトのワンクリックインストール [root@uat01 ~]# cat Inst...

Linux sshのデフォルトのリモートポート番号を変更する6つの手順

Linux のデフォルトの ssh リモート ポートは 22 です。デフォルトのポートは、悪意のある...

ウェブサイトのAboutページの紹介コンテンツの書き方

公式、電子商取引、ソーシャル ネットワーキング、個人のいずれの Web サイトでも、訪問者に貴重な時...

MySQLのグループカウントと範囲集計を実装する2つの方法

1つ目:通常動作 選択 SUM(ddd) AS count_days、 場合 aa.days >...

リモートDockerを使用した統合テスト環境の構築手順

需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...

Linux で開いているファイルが多すぎる問題を解決する方法

原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...