サーバのシャットダウン プロセスには次のことが行われます。
シャットダウン プロセスの開始
サーバのシャットダウン (システム終了)
には様々な方法があります。たとえば、SHUTDOWN
権限を持つユーザは、mysqladmin
shutdown
コマンドを実行できます。MySQL
がサポートしているプラットフォームであれば
mysqladmin
コマンドを使用します。OS
に対応したシャットダウンの開始方法として、Unix
環境のシャットダウンでは、サーバが
SIGTERM
を受けるとシャットダウンし、Windows
環境では、サービス
マネージャの指示でシャットダウンします。
サーバによるシャットダウン スレッドの作成 (必要に応じて)
シャットダウンの開始方法によっては、サーバがシャットダウン
プロセスを処理するスレッドを作成することがあります。シャットダウンがクライアントからの要求によるのであった場合に、シャットダウン
スレッドが作成されます。シャットダウンが
SIGTERM
を受信したことによるものである場合、シャットダウン処理をグナル
スレッド (SIGTERM に対して)
が行うことがあります。または、別のスレッドを作成して、その処理を行うことがあります。サーバがシャットダウン
スレッドを作成しようとして、作成できない場合には、サーバは診断メッセージをエラー
ログに表示します。これは、メモリ不足などの場合に発生します。
Error: Can't create thread to kill server
サーバによる新規接続の拒否
シャットダウン中に新たなアクティビティを開始しないようにするために、サーバは新たなクライアントからの接続を拒否します。これは、P ポート、Unix のソケット ファイル、Windows の名前付きパイプや共有ファイルなどの接続に対して、ネットワーク接続を閉じる、という方法を取ります。
サーバによる現行のアクティビティの停止
クライアント接続に関連しているスレッドでは、クライアントへの接続を止め、そのスレッドはバイタルを失った
(無くなった)
ものとしてマークします。スレッドはそのようにマークされたことを認識し、消滅します。アイドル接続のスレッドは、簡単に消滅します。クエリを処理中のスレッドはその程度を定期的に把握しているために、消滅するまでに時間がかかります。スレッド停止に関する詳細は、項12.5.5.3. 「KILL
構文」
を参照してください。このリンクでは、MyISAM
テーブルでの REPAIR TABLE
または OPTIMIZE TABLE
オペ中の消滅に関して特記しています。
オープン
トランザクションのスレッドは、トランザクションがロールバックします。ノート:
スレッドが非トランザクションのテーブルを更新中の場合には、UPDATE
または INSERT
などのオペレーションでテーブルを部分的に更新した状態にすることがあります。これはオペレーションが完了する前に停止する可能性があるためです。
サーバがマスタのレプリケーション サーバである場合は、スレッドは接続中のサーバに関連するスレッドを別のクライアントからのスレッドのように扱います。そのため、レプリケーションに関係しているスレッドはバイタルを失い、状態のチェックが済むと終了します。
サーバがすスレーブのレプリケーション サーバである場合、I/O と SQL のスレッドがアクティブなときには、クライアント スレッドが失われる前に中断します。SQL スレッドは現行クエリを完了してから、中断します。これにより、レプリケーションで問題が発生しないようにします。SQL スレッドがその時点でトランザクションの最中であった場合は、トランザクションがロールバックします。
ストレージ エンジンのシャットダウンまたはクローズ
この段階で、テーブル キャッシュはフラッシュが済み、オープン テーブルのすべてを閉じます。
それぞれのストレージ
エンジンでは、関係しているテーブルに対して必要なアクションを取ります。たとえば、MyISAM
では、テーブルへのインデックスの書き込みで保留中のものをフラッシュします。InnoDB
では、ディクスにバッファ
メモリをフラッシュします。その時点での
LSN
をテーブルスペースへ書き込み、内部スレッドを停止します。innodb_fast_shutdown
で 2
と設定していた場合はこの限りではありません。
サーバの終了