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

推薦する

JavaScript関数の詳細な説明これを指す問題

目次1.関数内のこの方向1. 通常の機能2. コンストラクター3. オブジェクトメソッド4. イベン...

CSSの4種類の配置の違いの詳細な説明

フロントエンド開発でよく使われるCSSの配置方法は、位置決めには、通常位置決め、相対位置決め、絶対位...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...

Vue3とTypeScriptを組み合わせたプロジェクト開発の実践記録

目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...

ウェブページ HTML 順序付きリスト ol と順序なしリスト ul

データを整理するためのリストWeb ページの表示を制御する多数の HTML タグを学習した後、読者は...

CentOs でノード バージョンを手動でアップグレードする方法

1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...

画像の半透明処理 画像と半透明の背景の実装のアイデアとコード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

Vueドロップダウンリストの2つの実装方法の比較

Vueドロップダウンリストの2つの実装最初の方法はv-forを使用する <el-select ...

MySQL サーバー IO 100% 分析および最適化ソリューション

序文ストレス テスト中に、リソース使用のボトルネックによって発生する最も直接的なパフォーマンスの問題...

Docker コンテナで DockerFile を使用して複数の Tomcat サービスをデプロイする手順

1. [admin@JD ~]$ cd opt #ルートディレクトリにoptと入力2. [admin...

MySQLデータのバックアップ方法の選択と考え方

目次1. rsync、cpでファイルをコピーする2. xxxをoutfile構文に選択する3. 遅延...

MySQL データベース設計 3 つのパラダイム例分析

3つのパラダイム1NF: フィールドは分離不可能です。 2NF: 主キーがあり、非主キー フィールド...

WeChatミニプログラムはどのようにしてユーザー情報とユーザーの電話番号を同時に取得するのか

今日ログインページを書いていたとき、個人情報と携帯電話番号を認証する必要がありましたが、ページにボタ...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...