6.10 MySQL 中的 Unix 信号处理
在 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 命令行客户端》mysql 客户端将
SIGINT
(通常是通过Control+C键盘组合键)解释为当前语句的中断指令,如果当前没有语句,则取消部分输入行。这项行为可以使用--sigint-ignore
选项来忽略SIGINT
信号。 -
使用 MySQL 客户端库的客户端程序默认情况下会阻止
SIGPIPE
信号。可能的变体如下:-
客户端可以安装自己的
SIGPIPE
处理程序,以 Override 默认行为。见编写 C API 多线程客户端程序。 -
客户端可以在连接时指定
CLIENT_IGNORE_SIGPIPE
选项到mysql_real_connect()
以防止安装SIGPIPE
处理程序。见mysql_real_connect()。
-