在 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()。