在 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 线程客户端程序。客户端可以通过在连接时为
mysql_real_connect()
指定CLIENT_IGNORE_SIGPIPE
选项来阻止安装SIGPIPE
处理程序。请参见 mysql_real_connect()。