在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
选项启动服务器时,会安装一个中断处理程序以用于调试目的。请参阅第7.9.1.4节,“在gdb下调试mysqld”。
MySQL客户端程序按照以下方式响应信号:
-
MySQL客户端mysql将
SIGINT
(通常是输入Control+C的结果)解释为中断当前语句的指令,如果有语句,或者取消部分输入行,否则取消。可以使用--sigint-ignore
选项禁用该行为。 -
使用MySQL客户端库的客户端程序默认阻止
SIGPIPE
信号。这些变体是可能的:-
客户端可以安装自己的
SIGPIPE
处理程序以覆盖默认行为。请参阅编写C API线程客户端程序。 -
客户端可以通过在连接时指定
CLIENT_IGNORE_SIGPIPE
选项来防止安装SIGPIPE
处理程序。请参阅mysql_real_connect()
。
-