• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 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()”。