MySQL中的Unix信号处理
在Unix和类似Unix的系统上,进程可以是发送给它的信号的接收者,也可以是root
拥有该进程的帐户。可以使用kill命令发送信号。一些命令解释器将某些键序列与信号相关联,例如Control + C以发送SIGINT
信号。本节介绍MySQL服务器和客户端程序如何响应信号。
- 服务器对信号的响应
- 客户对信号的反应
服务器对信号的响应
mysqld对信号的响应如下:
SIGTERM
导致服务器关闭。这就像执行一条SHUTDOWN
语句而不必连接到服务器一样(要关闭服务器,需要具有SHUTDOWN
特权的帐户)。SIGHUP
使服务器重新加载授权表并刷新表,日志,线程缓存和主机缓存。这些动作类似于FLUSH
语句的各种形式。在MySQL 8.0.20之前,服务器还将状态报告写入具有以下格式的错误日志:Status information: Current dir: /var/mysql/dat / Running threads: 0 Stack size: 196608 Current locks: Key caches: default Buffer_size: 8388600 Block_size: 1024 Division_limit: 100 Age_limit: 300 blocks used: 0 not flushed: 0 w_requests: 0 writes: 0 r_requests: 0 reads: 0 handler status: read_key: 0 read_next: 0 read_rnd 0 read_first: 1 write: 0 delete 0 update: 0 Table status: Opened tables: 5 Open tables: 0 Open files: 7 Open streams: 0 Alarm status: Active alarms: 1 Max used alarms: 2 Next alarm time: 67
从MySQL 8.0.19开始,
SIGUSR1
导致服务器刷新错误日志,常规查询日志和慢速查询日志。一种用途SIGUSR1
是无需连接服务器即可实现日志轮换(刷新日志需要具有RELOAD
特权的帐户)。请参见“服务器日志维护”。服务器响应
SIGUSR1
是响应的一个子集SIGHUP
,能够SIGUSR1
被用作一个更“轻量”是刷新某些日志中没有其他信号SIGHUP
的影响,如冲洗线和主机缓存和写入错误日志的状态报告。SIGINT
通常服务器会忽略它。使用该--gdb
选项启动服务器会安装中断处理程序,以SIGINT
进行调试。请参见“在gdb下调试mysqld”。
客户对信号的反应
MySQL客户端程序对信号的响应如下:
- MySQL的客户端解释
SIGINT
(打字的典型结果控制 + C)作为指令中断当前的声明(如果有),或以其他方式取消任何部分输入线。可以使用--sigint-ignore
忽略SIGINT
信号选项禁用此行为。 SIGPIPE
默认情况下,使用MySQL客户端库的客户端程序会阻止信号。这些变化是可能的:- 客户端可以安装自己的
SIGPIPE
处理程序以覆盖默认行为。 - 客户端可以
SIGPIPE
通过在连接时指定CLIENT_IGNORE_SIGPIPE
选项来防止安装处理程序mysql_real_connect()
。请参见“ mysql_real_connect()”。
- 客户端可以安装自己的