この記事は公式アカウント[DevelopingPigeon]から公開されています!フォローへようこそ!!!
古いルール-姉妹都市都市:
1。MYSQLの紹介
(1)アーキテクチャ
MYSQLはC / Sアーキテクチャを採用しています。サーバープログラムは保存されたデータと直接対話します。複数のクライアントプログラムがこのサーバープログラムに接続し、追加、削除、変更、チェックの要求をサーバーに送信し、サーバープログラムがデータを処理します。 。
(2)サーバープログラムの起動
1.UNIXライクなシステム
(1)mysqld
mysqld実行可能ファイルはMYSQLサーバープログラムを表します。この実行可能ファイルを実行すると、一般的には使用されないMYSQLサーバープロセスを開始できます。
(2)mysqld_safe
起動スクリプトは間接的にmysqldを呼び出し、サーバーの実行ステータスを継続的に監視し、エラー情報やその他の診断情報をエラーログに出力します。
(3)mysqld.server
起動スクリプトは間接的にmysqld_safeを呼び出し、サーバープログラムは最後にstartパラメータを追加することで起動できます。
mysqld.server start
このファイルは実際にはリンクファイルであり、対応する実際のファイルは... / supportfiles /mysql.serverです。このスクリプトを使用して、サーバープログラムを閉じることもできます。
mysqld.server stop
(4)mysqld_multi
複数のサーバーインスタンスを実行し、複数のサーバープロセスを開始または停止し、それらの実行ステータスを同時に報告します。
2.Windowsシステム
(1)手動スタート
mysqld実行可能ファイルを直接クリックします。
(2)サービス開始モード
プログラムを長時間実行したい場合は、オペレーティングシステムが管理するWindowsサービスとして登録できます。登録サービスは次のとおりです。
“完整可执行文件路径” –install [-manual] [服务名]
-manualは、サービスを手動で開始することを意味します。デフォルトのサービス名はMYSQLです。次に、MYSQLサーバーサービスを開始できます。
net start MYSQL
サービスをオフにします。
net stop MYSQL
(3)クライアントプログラムを起動します
mysql実行可能ファイルを介して、クライアントはサーバープログラムと対話できますが、-hサーバープログラムIP、-uログインユーザー名、-pユーザーのパスワード、-Pサーバープログラム監視などのいくつかのパラメーターを渡す必要があります。パスワードとpの間にスペースがない場合、エラーが報告されます。
(4)クライアントとサーバー間の接続
MYSQLクライアントプログラムとサーバープログラム間の通信は、基本的にプロセス間通信プロセスです。
1. TCP / IP
クライアントとサーバーは異なるホストにある可能性があるため、ネットワーク経由で通信する必要があります。MySQLはネットワーク通信プロトコルとしてTCPを使用します。サーバーはデフォルトでポート3306でリッスンし、ポート範囲は0〜65535です。
2.名前付きパイプと共有メモリ
Windowsユーザーは、プロセス間通信に名前付きパイプと共有メモリを使用できます。
名前付きパイプの起動:サーバープログラムを起動するコマンドに–enable-named-pipeパラメータを追加し、起動クライアントに–pipeパラメータを追加します。
共有メモリの起動:サーバープログラムは—shared-memoryパラメーターで開始し、クライアントプログラムは—protocol = memoryパラメーターで開始します。
3.UNIXドメインソケット
C / SはUnixライクなシステムで実行されており、UNIXドメインソケットを使用して通信できます。クライアントの起動時に—protocol = socketパラメーターを指定します。サーバープログラムがデフォルトでリッスンするUnixドメインソケットファイルは/tmp/mysql.sockであり、クライアントプログラムもデフォルトでこのUnixドメインソケットファイルに接続します。
二。MySQL処理要求プロセス
(I.概要
サーバープログラムがクライアントからのクエリ要求を処理する場合、接続管理、分析と最適化、およびストレージエンジンの3つのステップに分割されます。
(2)接続管理
クライアントプロセスがサーバープロセスに接続するたびに、サーバープロセスはクライアントとの対話を処理するスレッドを作成します。クライアントが終了すると、サーバーから切断され、サーバーはスレッドをキャッシュして別の新しいクライアント接続を待機します。 。クライアントから送信された接続要求を確認する必要があります。認証が失敗した場合、接続は拒否されます。C / Sが異なるマシンで実行されている場合、接続はトランスポート層セキュリティ(TLS)プロトコルを使用して暗号化されます。
(3)分析と最適化
1.クエリキャッシュ
MySQLサーバープログラムがリクエストを処理するとき、最初に前のキャッシュにクエリを実行します。同じリクエストがある場合は、キャッシュから直接返されます。このクエリキャッシュは、異なるクライアント間で共有できます。クエリ要求に文字の違いがある場合、キャッシュミスが発生し、クエリ要求に特定のシステム関数、ユーザー定義の変数と関数、およびシステムテーブルが含まれている場合、要求はキャッシュされません。たとえば、システム関数NOWは最新の現在時刻を照会しますが、この関数の2つの呼び出しは異なる結果である必要があるため、キャッシュされません。
MySQLキャッシュシステムは、関連する各テーブルを監視します。テーブルの構造またはデータが変更されている限り、関連するすべてのクエリキャッシュは無効になり、クエリキャッシュから削除されます。クエリキャッシュはシステムパフォーマンスを向上させることができますが、このキャッシュを維持するためにいくらかのオーバーヘッドがあります。MySQL5.7.20以降は推奨されておらず、8.0で直接削除されます。
2.構文解析
クエリキャッシュがヒットしない場合は、正式なクエリに入ります。クライアントはSQLステートメントを送信します。最初にステートメントを分析して構文が正しいかどうかを判断する必要があります。次に、テキストおよびさまざまなクエリからクエリを実行するテーブル条件が抽出されますMySQLサーバーによって内部的に使用されるいくつかのデータ構造にそれを置きます。
このプロセスは、コンパイラの字句解析->構文解析->意味解析に似ています。
3.クエリの最適化
構文解析後、サーバープログラムは必要な情報を取得しますが、SQLステートメントのクエリをより効率的にするには、外部結合を内部結合に変換したり、式を単純化したりするなど、SQLステートメントを最適化する必要があります。オン。最適化の結果、実行プランが生成されます。これは、クエリの実行に使用するインデックスと、テーブル間の接続順序を示します。EXPLAINステートメントを使用して、ステートメントの実行プランを表示できます。
(4)ストレージエンジン
MySQLサーバーは、データの保存と抽出の操作をストレージエンジンにカプセル化します。テーブルはレコードの行で構成されます。これは単なる論理的な概念です。ストレージエンジンは、実際のデータの物理的な保存と読み取りを担当します。さまざまなストレージエンジンがさまざまな機能を担当し、さまざまなストレージエンジンによって管理されるテーブルは、さまざまなストレージ構造とアクセスアルゴリズムを持つ場合があります。
管理を容易にするために、MySQLサーバー処理要求プロセスはサーバー層とストレージエンジン層に分割されます。さまざまなストレージ要求は、読み取りなどのさまざまな目的のための低レベルの機能を含む、サーバー層の統合された呼び出しインターフェイスを提供します。最初にインデックス。レコードなど。
レコードが要件を満たしていると判断した後、サーバーレイヤーは最初にレコードをバッファーに送信し、バッファーがいっぱいになると実際のレコードをクライアントに送信します。
(5)一般的に使用されるストレージエンジン
5.5.5より前のMySQLのデフォルトのストレージエンジンはMyISAMでしたが、その後InnoDBに変更されました。InnoDBはトランザクション、分散トランザクション、およびトランザクションの部分的なロールバックをサポートしますが、これらのエンジンのほとんどはサポートしていません。
現在のサーバープログラムでサポートされているストレージエンジンにクエリを実行します。
SHOW ENGINES;
テーブルごとに異なるストレージエンジンを設定したり、テーブルごとに物理ストレージ構造を変えたり、読み取りおよび書き込み方法を変えたりすることができます。テーブルを作成するときにエンジンを直接指定します。
CREATE TABLE(
…
)ENGINE = …;
テーブルのストレージエンジンを変更します。
ALTER TABLE 表名 ENGINE=…;