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()”。
- 客户端可以安装自己的
