MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  MySQL プログラム  /  MySQL での Unix シグナル処理

4.10 MySQL での Unix シグナル処理

Unix および Unix に似たシステムでは、プロセスは、root システムアカウントまたはプロセスを所有するシステムアカウントによって送信されるシグナルの受信者になります。 シグナルは、kill コマンドを使用して送信できます。 一部のコマンドインタプリタは、特定のキーシーケンスを Control+C などのシグナルに関連付けて、SIGINT シグナルを送信します。 このセクションでは、MySQL サーバーおよびクライアントプログラムがシグナルに応答する方法について説明します。

シグナルへのサーバー応答

mysqld は、次のようにシグナルに応答します:

  • SIGTERM によってサーバーはシャットダウンします。 これは、サーバーに接続せずに SHUTDOWN ステートメントを実行する場合と似ています (停止するには、SHUTDOWN 権限を持つアカウントが必要です)。

  • SIGHUP によって、サーバーは付与テーブルをリロードし、テーブル、ログ、スレッドキャッシュ、およびホストキャッシュをフラッシュします。 これらのアクションは、FLUSH ステートメントのさまざまな形式に似ています。 シグナルを送信すると、サーバーに接続せずにフラッシュ操作を実行できるようになります。これには、それらの操作に十分な権限を持つ MySQL アカウントが必要です。 MySQL 8.0.20 より前のサーバーでは、次の形式のステータスレポートもエラーログに書き込まれます:

    Status information:
    
    Current dir: /var/mysql/data/
    Running threads: 4  Stack size: 262144
    Current locks:
    lock: 0x7f742c02c0e0:
    
    lock: 0x2cee2a20:
    :
    lock: 0x207a080:
    
    Key caches:
    default
    Buffer_size:       8388608
    Block_size:           1024
    Division_limit:        100
    Age_limit:             300
    blocks used:             4
    not flushed:             0
    w_requests:              0
    writes:                  0
    r_requests:              8
    reads:                   4
    
    handler status:
    read_key:           13
    read_next:           4
    read_rnd             0
    read_first:         13
    write:               1
    delete               0
    update:              0
    
    Table status:
    Opened tables:        121
    Open tables:          114
    Open files:            18
    Open streams:           0
    
    Memory status:
    <malloc version="1">
    <heap nr="0">
    <sizes>
      <size from="17" to="32" total="32" count="1"/>
      <size from="33" to="48" total="96" count="2"/>
      <size from="33" to="33" total="33" count="1"/>
      <size from="97" to="97" total="6014" count="62"/>
      <size from="113" to="113" total="904" count="8"/>
      <size from="193" to="193" total="193" count="1"/>
      <size from="241" to="241" total="241" count="1"/>
      <size from="609" to="609" total="609" count="1"/>
      <size from="16369" to="16369" total="49107" count="3"/>
      <size from="24529" to="24529" total="98116" count="4"/>
      <size from="32689" to="32689" total="32689" count="1"/>
      <unsorted from="241" to="7505" total="7746" count="2"/>
    </sizes>
    <total type="fast" count="3" size="128"/>
    <total type="rest" count="84" size="195652"/>
    <system type="current" size="690774016"/>
    <system type="max" size="690774016"/>
    <aspace type="total" size="690774016"/>
    <aspace type="mprotect" size="690774016"/>
    </heap>
    :
    <total type="fast" count="85" size="5520"/>
    <total type="rest" count="116" size="316820"/>
    <total type="mmap" count="82" size="939954176"/>
    <system type="current" size="695717888"/>
    <system type="max" size="695717888"/>
    <aspace type="total" size="695717888"/>
    <aspace type="mprotect" size="695717888"/>
    </malloc>
    
    Events status:
    LLA = Last Locked At  LUA = Last Unlocked At
    WOC = Waiting On Condition  DL = Data Locked
    
    Event scheduler status:
    State      : INITIALIZED
    Thread id  : 0
    LLA        : n/a:0
    LUA        : n/a:0
    WOC        : NO
    Workers    : 0
    Executed   : 0
    Data locked: NO
    
    Event queue status:
    Element count   : 0
    Data locked     : NO
    Attempting lock : NO
    LLA             : init_queue:95
    LUA             : init_queue:103
    WOC             : NO
    Next activation : never
  • MySQL 8.0.19 の時点で、SIGUSR1 により、サーバーはエラーログ、一般クエリーログおよびスロークエリーログをフラッシュします。 SIGUSR1 の使用方法の 1 つは、サーバーに接続せずにログローテーションを実装することです。サーバーに接続するには、これらの操作に十分な権限を持つ MySQL アカウントが必要です。 ログローテーションの詳細は、セクション5.4.6「サーバーログの保守」 を参照してください。

    SIGUSR1 へのサーバーレスポンスは、SIGHUP へのレスポンスのサブセットであり、スレッドおよびホストキャッシュのフラッシュやエラーログへのステータスレポートの書込みなど、他の SIGHUP 効果なしで特定のログをフラッシュする、より多くの「軽量」シグナルとして SIGUSR1 を使用できます。

  • SIGINT は通常、サーバーによって無視されます。 --gdb オプションを使用してサーバーを起動すると、デバッグ目的で SIGINT 用の割り込みハンドラがインストールされます。 セクション5.9.1.4「gdb での mysqld のデバッグ」を参照してください。

シグナルに対するクライアントのレスポンス

MySQL クライアントプログラムは、次のようにシグナルに応答します:

  • mysql クライアントは、SIGINT (通常は Control+C と入力した結果) を命令として解釈して、現在のステートメントがある場合は中断し、それ以外の場合は一部の入力行を取り消します。 この動作は、--sigint-ignore オプションを使用して無効にし、SIGINT シグナルを無視できます。

  • MySQL クライアントライブラリを使用するクライアントプログラムは、デフォルトで SIGPIPE シグナルをブロックします。 次のバリエーションが可能です:

    • クライアントは独自の SIGPIPE ハンドラをインストールして、デフォルトの動作をオーバーライドできます。 Writing C API Threaded Client Programsを参照してください。

    • クライアントは、接続時に mysql_real_connect()CLIENT_IGNORE_SIGPIPE オプションを指定することで、SIGPIPE ハンドラのインストールを防止できます。 mysql_real_connect()を参照してください。


関連キーワード:  サーバー, size, total, プログラム, シグナル, count, type, from, 接続, テーブル