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 をインストールする方法

推薦する

Oracle10パーティションとMySQLパーティションの違いの詳細な説明

一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...

KVM 仮想マシンのオンライン ホット マイグレーションを実装する方法 (画像とテキスト)

1. KVM仮想マシンの移行方法と注意すべき点KVM 仮想マシンを移行する方法は 2 つあります。...

ウェブサイトを構築するときは、UTF-8 または GB2312 エンコードを使用する必要がありますか?

外国のウェブサイトを開くと文字化けした文字が表示されることが多く、また、英語以外の外国のウェブサイト...

MySQLインデックスに関する重要な面接の質問をいくつか共有します

序文インデックスは、データベース内の 1 つ以上の列の値を並べ替え、データベースが効率的にデータを取...

MySQL で 2 つのテーブルをクエリする場合の from と join の違いの概要

序文MySQL では、複数テーブル結合クエリは非常に一般的な要件です。複数テーブルクエリを使用する場...

njs モジュールを使用して nginx 構成に js スクリプトを導入する

目次序文1. NJSモジュールをインストールする方法1: NJSモジュールを動的にロードする方法2:...

Nginx はリクエスト接続を統合し、ウェブサイトのアクセス例を高速化します

序文世界最高の Web サーバーの 1 つである Nginx の利点は明らかです。 Nginx がリ...

iPhone デバイスの WAP ページでフォントサイズが大きい問題の解決策

JavaScriptコントロールを使用したくない場合は、次の方法を試してください。 Safariブラ...

DOM操作テーブルの例(DOMはテーブルを作成します)

1. HTML タグを使用してテーブルを作成します。コードをコピーコードは次のとおりです。 <...

MySQL での実行計画の詳細分析

序文効率的なSQL文の書き方は、Explain実行計画の分析と切り離せません。実行計画とは何か、効率...

Webpackプラグインを書いてnpmに公開するための80行のコード

1. はじめに最近、 Webpackの原理を勉強しています。これまでは Webpack の設定方法し...

HTML 選択ボックスのプレースホルダーの作成に関する問題

テキスト入力でプレースホルダーを使用していますが、問題なく動作します。しかし、選択ボックスにはプレー...

CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

var() の紹介と使用法詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効ですvar()...

HTML リスト ボックス、テキスト フィールド、ファイル フィールドのサンプル コード

ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...

Linux inotifyリアルタイムバックアップの実装方法の詳細説明

リアルタイム レプリケーションは、企業データをバックアップする最も重要な方法です。主に、ユーザーが送...