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()を参照してください。