在 Unix 和類 Unix 系統上,程序可以接收由 root
系統帳戶或擁有該程序的系統帳戶傳送給它的訊號。可以使用 kill 命令傳送訊號。某些命令直譯器會將特定的按鍵序列與訊號關聯,例如 Control+C 會傳送 SIGINT
訊號。本節說明 MySQL 伺服器和用戶端程式如何回應訊號。
mysqld 對訊號的回應如下:
SIGTERM
會導致伺服器關閉。這就像執行SHUTDOWN
陳述式,而無需連線到伺服器 (關閉需要具有SHUTDOWN
權限的帳戶)。SIGHUP
會導致伺服器重新載入授權表,並刷新表格、記錄、執行緒快取和主機快取。這些動作就像FLUSH
陳述式的各種形式。傳送訊號可讓刷新操作在無需連線到伺服器的情況下執行,這需要具有執行這些操作所需權限的 MySQL 帳戶。SIGUSR1
會導致伺服器刷新錯誤記錄、一般查詢記錄和慢查詢記錄。SIGUSR1
的一個用途是在無需連線到伺服器的情況下實作記錄輪替,這需要具有執行這些操作所需權限的 MySQL 帳戶。如需記錄輪替的資訊,請參閱 第 7.4.6 節,「伺服器記錄維護」。伺服器對
SIGUSR1
的回應是SIGHUP
回應的子集,使SIGUSR1
可以用作更「輕量」的訊號,它只會刷新某些記錄,而不會像SIGHUP
那樣,刷新執行緒和主機快取,並將狀態報告寫入錯誤記錄。伺服器通常會忽略
SIGINT
。使用--gdb
選項啟動伺服器會為偵錯目的安裝SIGINT
的中斷處理常式。請參閱 第 7.9.1.4 節,「在 gdb 下偵錯 mysqld」。
MySQL 用戶端程式對訊號的回應如下:
mysql 用戶端會將
SIGINT
(通常是輸入 Control+C 的結果)解讀為中斷目前陳述式(如果有的話)的指示,否則會取消任何部分輸入行。可以使用--sigint-ignore
選項停用此行為,以忽略SIGINT
訊號。預設情況下,使用 MySQL 用戶端程式庫的用戶端程式會封鎖
SIGPIPE
訊號。以下變化是可能的:用戶端可以安裝自己的
SIGPIPE
處理常式,以覆寫預設行為。請參閱 編寫 C API 執行緒用戶端程式。用戶端可以在連線時指定
CLIENT_IGNORE_SIGPIPE
選項給mysql_real_connect()
,以防止安裝SIGPIPE
處理常式。請參閱 mysql_real_connect()。