4.10 MySQL 中的 Unixsignal 处理
在 Unix 和类似 Unix 的系统上,进程可以是root
或拥有该进程的帐户发送给它的 signal 的接收者。可以使用kill命令发送 signal。一些命令解释器将某些键序列与 signal 相关联,例如 Control C 以发送SIGINT
signal。本节介绍 MySQL 服务器和 Client 端程序如何响应 signal。
服务器对 signal 的响应
mysqld对 signal 的响应如下:
-
SIGTERM
导致服务器关闭。这就像执行SHUTDOWN语句而不必连接到服务器一样(要关闭服务器,该帐户需要具有SHUTDOWN特权的帐户)。 -
SIGHUP
使服务器重新加载授权 table,并刷新 table,日志,线程缓存和主机缓存。这些动作类似于FLUSH语句的各种形式。服务器还将具有以下格式的状态报告写入错误日志:
Status information:
Current dir: /var/mysql/data/
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
SIGINT
通常会被服务器忽略。使用--gdb选项启动服务器会为SIGINT
安装一个中断处理程序,以进行调试。参见第 28.5.1.4 节“在 gdb 下调试 mysqld”。
Client 对 signal 的回应
MySQLClient 端程序对 signal 的响应如下:
-
mysqlClient 端将
SIGINT
(通常是键入 Control C 的结果)解释为指令来中断当前语句(如果存在),或者取消任何部分 Importing 行。可以使用--sigint-ignore选项禁用此行为,以忽略SIGINT
signal。 -
默认情况下,使用 MySQLClient 端库的 Client 端程序会阻止
SIGPIPE
signal。这些变化是可能的: -
Client 端可以安装自己的
SIGPIPE
处理程序以覆盖默认行为。参见第 27.7.3.3 节“编写 C API 线程 Client 端程序”。- Client 端可以通过在连接时为mysql_real_connect()指定
CLIENT_IGNORE_SIGPIPE
选项来阻止SIGPIPE
处理程序的安装。参见第 27.7.6.54 节,“ mysql_real_connect()”。
- Client 端可以通过在连接时为mysql_real_connect()指定