MySQL データベース アーキテクチャの詳細

MySQL データベース アーキテクチャの詳細

序文:

多くの同僚は長年働いていますが、MySQL の習熟度は表面的な CRUD に限られています。MySQL の深い原理や技術的な知識についてはほとんど知りません。勤務年数が長くなるにつれて、職場での競争力は低下し続けます。面接に出かけると、面接官に殴られることがよくあるようになりました。たとえば、MySQL の面接で最もよく聞かれる質問は次のとおりです。

  • MySQL の MVCC メカニズムの原理を説明していただけますか?
  • MySQL のトランザクション原理と実装は何ですか?
  • MySQL データのマスタースレーブレプリケーションの原理は何ですか?
  • MySQL の基礎データのストレージ構造は何ですか?
  • MySQL で大量のデータ ストレージをサポートできるようにするにはどうすればよいでしょうか?
  • MySQL のロック機構の原理と実装は何ですか?
  • MySQL インデックスのメカニズム?インデックス作成にはどのようなデータ構造とアルゴリズムが関係していますか?
  • MySQL がインデックス構造として B+ ツリーを使用するのはなぜですか?
  • B+ ツリーはどれくらいの量のデータを保存できますか?
  • MySQL におけるギャップロックの実装原理について教えてください。
  • InnoDB エンジンがクラッシュするのはなぜですか?その実装原理を説明していただけますか?
  • 他の高頻度インタビューシリーズを待つ

一つずつ挙げていくと、おそらく MySQL に関する面接でよく聞かれる質問は何百もあるでしょう。あなたはそれらすべてを知っていますか?

これは単なる面接ではありません。低レベルのプログラマーからシニアエンジニア、アーキテクトなどへと昇進したいのであれば、MySQL の基本的な原理とテクノロジーを習得する必要があります。

注: Binghe は今後、MySQL の基礎原理と技術に関する記事を随時連載する予定です。彼は友人たちと力を合わせて、自分が習得した MySQL の基礎技術をみんなに伝え、面接で面接官に勝ち、仕事で他の友人に勝つよう努力します。

1. MySQL アーキテクチャ

まず、以下に示す MySQL アーキテクチャ図を見てみましょう。

MySQL アーキテクチャ図から、MySQL アーキテクチャは上から順に、ネットワーク接続層、データベース サービス層、ストレージ エンジン層、システム ファイル層の 4 つの部分に大まかに分けられることがわかります。次に、各パートの構成情報について簡単に説明します。

2. ネットワーク接続層

ネットワーク接続層は、MySQL アーキテクチャ全体の最上位に位置し、主にクライアント コネクタとして機能します。 MySQL サーバーとの接続を確立する機能を提供し、 JavaCC++、Pythonなど、ほぼすべての主流のサーバー側言語をサポートしています。各言語は、独自の API インターフェイスを介して MySQL との接続を確立します。

3. データベースサービス層

データベース サービス層は、データベース サーバー全体の中核であり、主にシステム管理および制御ツール、接続プール、SQL インターフェイス、パーサー、クエリ オプティマイザー、キャッシュが含まれます。

4. 接続プール

主に、クライアントとデータベース間の接続情報を保存および管理する役割を担います。接続プール内のスレッドは、クライアントからデータベースへの接続情報を管理します。

5. システム管理および制御ツール

データベース内のデータのバックアップと復元、データベース全体のセキュリティの確保、セキュリティ管理の提供、データベース クラスター全体の調整と管理など、データベース システムの管理および制御機能を提供します。

6. SQLインターフェース

主な役割は、クライアントから送信されたさまざまな SQL コマンドを受信し、その SQL コマンドを他の部分に送信し、他の部分から返された結果データを受信し、結果データをクライアントに返すことです。

7. 構文解析ツリー

主な役割は、要求された SQL を「解析ツリー」に解析し、さらに MySQL のいくつかのルールに従って「解析ツリー」を文法的に検証して、それが正当かどうかを確認することです。

クエリオプティマイザー

MySQL では、「解析ツリー」がパーサーの構文チェックに合格すると、オプティマイザーによって実行プランに変換され、ストレージ エンジンと対話し、ストレージ エンジンを介して基礎となるデータ ファイルと対話します。

9. キャッシュ

MySQL のキャッシュは、一連の小さなキャッシュで構成されています。たとえば、MySQL テーブル キャッシュ、レコード キャッシュ、MySQL の権限キャッシュ、エンジン キャッシュなどです。 MySQL のキャッシュにより、データ クエリのパフォーマンスが向上します。クエリ結果がキャッシュにヒットした場合、MySQL は結果情報をキャッシュに直接返します。

10. ストレージエンジン層

MySQL のストレージ エンジン層は、主にデータの書き込みと読み取り、および基礎となるファイルとのやり取りを担当します。 MySQL のストレージ エンジンはプラグイン ベースであることは注目に値します。サーバー内のクエリ実行エンジンは、関連するインターフェイスを介してストレージ エンジンと通信します。同時に、インターフェイスは異なるストレージ エンジン間の違いを隠します。 MySQL で最もよく使用されるストレージ エンジンは InnoDB と MyISAM です。

InnoDB と MyISAM ストレージ エンジンは、学生が習得しておくべき重要なものです。これらは面接で頻繁にテストされ、アーキテクトになるために知っておく必要のある知識でもあります

11. システムファイル層

システム ファイル レイヤーには主に、MySQL にデータを保存し、上位レベルのストレージ エンジンと対話する基礎となるファイルが含まれ、ファイルの物理的なストレージ レイヤーとなります。主に保存されるファイルには、ログ ファイル、データ ファイル、構成ファイル、MySQL pid ファイル、ソケット ファイルなどが含まれます。

12. ログファイル

MySQL のログには主に、エラー ログ、一般クエリ ログ、バイナリ ログ、スロー クエリ ログなどが含まれます。

1. エラーログ

主にMySQLの動作中に生成されたエラー情報を保存します。 MySQL でエラー ログを表示するには、次の SQL ステートメントを使用できます。

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

2. 一般的なクエリログ

主に MySQL 操作中の一般的なクエリ情報を記録します。次の SQL ステートメントを使用して、MySQL で一般的なクエリ ログ ファイルを表示できます。

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

3. バイナリログ

主にMySQLデータベースに対して実行された挿入、変更、削除操作を記録し、SQL文の実行時間と実行期間も記録します。ただし、バイナリログにはselectやshowなどデータベースを変更しないSQL文は記録されません。主にデータベース データを復元し、MySQL マスター スレーブ レプリケーションを実装するために使用されます。

バイナリ ログが有効になっているかどうかを確認します。

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

バイナリログパラメータを表示する

'%binlog%' のような変数を表示する

ログファイルの表示

バイナリログを表示します。

4. スロークエリログ

スロークエリは主に、実行時間が指定された時間を超える SQL ステートメントを記録します。デフォルトの時間は 10 秒です。

スロークエリログが有効になっているかどうかを確認する

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

低速クエリ設定の期間を表示する

'%long_query_time%' のような変数を表示する

13. データファイル

データ ファイルには、主に db.opt ファイル、frm ファイル、MYD ファイル、MYI ファイル、ibd ファイル、ibdata ファイル、ibdata1 ファイル、ib_logfile0 ファイル、ib_logfile1 ファイルなどが含まれます。

1.db.opt ファイル

主に現在のデータベースで使用されている文字セットや検証ルールなどの情報を記録します。

2. frmファイル

データ テーブルの構造情報、主にデータ テーブルに関連するメタデータ情報、データ テーブルのテーブル構造定義情報などを格納します。各テーブルには frm ファイルがあります。

MySQL 8 バージョンの innodb ストレージ エンジンのテーブルには frm ファイルがないことに注意してください。 (MySQL 8 の新機能については、使用方法から基本原理、MySQL 5 との違いまで、後ほど記事を書く予定です)。

3. MYDファイル

MyISAM ストレージ エンジン専用のファイル形式です。主に MyISAM ストレージ エンジン データ テーブルにデータを格納します。各 MyISAM ストレージ エンジン テーブルは .MYD ファイルに対応します。

4. MYIファイル

MyISAM ストレージ エンジン専用のファイル形式で、主に MyISAM ストレージ エンジン データ テーブルに関連するインデックス情報が格納されます。各 MyISAM ストレージ エンジン テーブルは .MYI ファイルに対応します。

5.ibdファイル

Innodb ストレージ エンジンのデータ ファイルとインデックス ファイルを格納します。主に専用テーブルスペースのデータとインデックスを格納します。各テーブルは .ibd ファイルに対応します。

6. ibdataファイル

Innodb ストレージ エンジンのデータ ファイルとインデックス ファイルを格納します。主に共有テーブルスペースのデータとインデックスを格納します。すべてのテーブルは 1 つ (または複数) の .ibdata ファイルを共有します。共有 .ibdata ファイルの数は、構成に応じて指定できます。

7. ibdata1 ファイル

MySQL システム テーブルスペース データ ファイルには、主に MySQL データ テーブル メタデータ、Undo ログ、その他の情報が格納されます。

8. ib_logfile0 および ib_logfile1 ファイル

MySQL データベースの Redo ログ ファイルは、主に MySQL でトランザクションの永続性を実装するために使用されます。ある時点で MySQL に障害が発生し、データベースの ibd ファイルに書き込まれていないダーティ ページがある場合、MySQL を再起動すると、MySQL は Redo ログ情報に基づいてデータをやり直し、Redo ログに書き込まれているがデータ テーブルにまだ書き込まれていないデータを永続化します。

14. 設定ファイル

すべての MySQL 構成情報を保存するために使用されます。Unix/Linux 環境では my.cnf ファイル、Windows 環境では my.ini ファイルです。

1.pidファイル

pid ファイルは、MySQL プロセスの実行時にそのプロセス ID を保存するファイルです。主に Unix/Linux 環境に存在します。具体的な保存ディレクトリは、my.cnf または my.ini ファイルで設定できます。

2. ソケットファイル

ソケット ファイルは、pid ファイルと同様に、MySQL が Unix/Linux 環境で実行されている場合にのみ存在するファイルです。 Unix/Linux 環境では、クライアントはソケットを介して直接 MySQL に接続できます。

MySQL アーキテクチャの詳細に関するこの記事はこれで終わりです。MySQL アーキテクチャに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベースにスクレイピー データを保存する 2 つの方法 (同期と非同期)
  • MySQL に JSON のようなデータを保存する Python の例
  • Ubuntu に MySQL 5.7 をインストールし、データ ストレージ パスを構成する方法
  • MySQLでデータベースデータ保存ディレクトリを変更する方法
  • MySQLデータストレージプロセスパラメータの詳細な例
  • Centos7でmysql5.7.19のデータ保存場所を移動する方法
  • MySQLのスイッチングデータ保存ディレクトリの実装方法
  • MySQL 5.7 でデータベースのデータ保存場所を変更する方法
  • MySQL 空間データストレージと関数

<<:  Vue でのルーティングガードの具体的な使用法

>>:  nofollowタグの使用と分析に関する簡単な説明

推薦する

1 時間で MySQL データベースを学ぶ (Zhang Guo)

目次1. データベースの概要1.1 開発の歴史2. MySQL の紹介2.1. MySQLの概要2....

HTML タグのメタ概要、HTML5 のヘッド メタ属性の概要

序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...

Bootstrap 3.0 学習ノートボタンスタイル

この記事では主にボタンのスタイルについて説明します。 1. オプション2. サイズ3. 活動状況4....

Centos7 サーバーで jar パッケージ プロジェクトを開始する最良の方法

序文Linux 上で jar パッケージを実行する方法は誰もが知っています。なぜ別々に話したいのでし...

Ubuntu でディスク容量不足により MySQL が起動しない場合の解決策

序文最近、データベースのテーブルに 2 つのフィールドを追加しました。その後、ディスク容量不足のよう...

要素の$notifyポイントについての簡単な説明

当初の意図は、element-ui の $notify 通知をコンポーネントにカプセル化することでし...

Docker インストール rocketMQ チュートリアル (最も詳細)

RocketMQ は、Alibaba が設計した分散型のキューベースのメッセージング ミドルウェア...

MySQLで適切なインデックスを選択する方法

まずは栗を見てみましょう EXPLAIN select * from employees where...

HTMLの基本構造を包括的に理解する

HTML入門ハイパーテキスト マークアップ言語: ハイパーテキスト マークアップ言語ハイパーテキスト...

MySQL ストレージエンジン InnoDB の設定と使用方法の説明

MyISAM と InnoDB は、MySQL で最も一般的なストレージ エンジンです。前回の記事で...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

Windows 10 の Docker で countly-server を展開して実行するプロセス

私は最近countlyに触れて、慣れてきました。私は、必要に応じてcountlyのクラッシュプラグイ...

Vue cli開発に基づく外部コンポーネントVantのデフォルトスタイルの変更の詳細な説明

目次序文1. 少ない2. コンポーネントをインポートする3. 設定ファイルを変更するステップ1: l...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...