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