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タグの使用と分析に関する簡単な説明

推薦する

MySQLトランザクションの特徴と分離レベルについてお話ししましょう

インターネットにはすでにこの種の記事が溢れていますが、私がこれをまだ書いている理由は単純です。それは...

MySQL バッチ挿入ループの詳細なサンプルコード

背景数日前、MySql でページングを行っていたときに、ページングに制限 0,10 を使用するとデー...

HTMLでは、全体的なスタイルとレイアウトを崩さずに、部分的に強制スクロールバーを使用できます。

まずはエフェクト画像を投稿します:全体的なスタイルとレイアウトが崩れないように、スクロール バーがロ...

vue3ソースコード解析の簡単な実装方法

目次序文🍹準備🍲vue3 の使い方🍖 実装要約する序文最近、私の最初の公式 vue3 + ts プロ...

CentOS 6.4 MySQL 5.7.18 のインストールと設定方法のグラフィックチュートリアル

Centos6.4 で mysql5.7.18 をインストールするための具体的な手順が全員に共有され...

美容・スタイリングウェブサイト向けのカラーマッチングテクニックと効果表示

色はあらゆるウェブサイトにとって最も重要な要素の 1 つであり、閲覧者に大きな影響を与えるため、色の...

Pure CSS3はdivの出入りを順番に実現します

この記事は主に、純粋な CSS3 を使用して div が順番に出入りする効果を紹介します。一定の参考...

Ubuntu Server のターミナルのウェルカム メッセージで広告を無効にする方法

最新の Ubuntu Server バージョンを使用している場合、ようこそメッセージに、Ubuntu...

CSS でよく発生する問題の整理 (ロゴのハッキング/コンテナの固定/画像の垂直方向の中央揃え)

1. IEブラウザモードハックロゴ1. CSSハックロゴコードをコピーコードは次のとおりです。 ie...

H5でクリックされたときにaタグの背景色をキャンセルする方法

1. モバイル端末でクリックされたときにタグの青色を解除する { -webkit-tap-highl...

MySQL では UTF-8 が推奨されないのはなぜですか?

最近、Rails 経由で「utf8」でエンコードされた UTF-8 文字列を MariaDB に保存...

MYSQL での Truncate の使用法の詳細な説明

この記事のガイド: テーブル内のデータを削除するには、削除と切り捨ての 2 つの方法があります。TR...

WebpackはCSSファイルを読み込み、その設定方法

webpackはCSSファイルとその設定をロードします複数の CSS ファイルを作成した後、HTML...

Ubuntu での mysql のインストールと使用 (一般版)

Ubuntu のバージョンに関係なく、MySQL データベースのインストールは基本的に同じです。具...

テキストの折り畳み特殊効果を実現する HTML+CSS の例

この記事では、主に HTML + CSS を使用してテキストの折りたたみ特殊効果を実現する例を紹介し...