Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.7.8.8 重启语句

RESTART

该语句停止并重新启动 MySQL 服务器。它需要SHUTDOWN特权。

RESTART语句的一个用途是,当无法或不便在服务器主机上获取命令行访问权限以重新启动 MySQL 服务器时。例如,可以使用SET PERSIST_ONLY在运行时对系统变量进行配置更改,但是服务器必须重新启动这些更改才能生效。RESTART语句提供了从客户端会话中重新启动服务器的方式,而无需在服务器主机上获取命令行访问权限。

Note

执行RESTART语句后,客户端可以期望当前连接将被中断。如果启用自动重连,连接将在服务器重新启动后重新建立。否则,连接必须手动重新建立。

成功执行RESTART操作需要mysqld在一个监控进程可用的环境中,该进程可以检测到服务器重新启动的原因:

  • 在监控进程存在的情况下,RESTART导致mysqld终止,以便监控进程可以确定应该启动一个新的mysqld实例。

  • 如果没有监控进程,RESTART语句将失败并返回错误。

以下平台提供了必要的监控支持,以便使用RESTART语句:

  • Windows,mysqld作为 Windows 服务或独立进程运行时。(mysqld会fork,一个进程作为监控进程,另一个进程作为服务器。)

  • Unix 和 Unix 类系统,使用 systemd 或mysqld_safe管理mysqld

为了配置监控环境,使mysqld启用RESTART语句:

  1. 将环境变量MYSQLD_PARENT_PID设置为启动mysqld的进程ID之前启动mysqld

  2. mysqld由于使用RESTART语句进行关机时,它将返回退出代码16。

  3. 当监控进程检测到退出代码为16时,它将重新启动mysqld。否则,它将退出。

以下是一个在bash shell中实现的最小示例:

#!/bin/bash

export MYSQLD_PARENT_PID=$$

export MYSQLD_RESTART_EXIT=16

while true ; do
  bin/mysqld mysqld options here
  if [ $? -ne $MYSQLD_RESTART_EXIT ]; then
    break
  fi
done

在 Windows 上,用于实现RESTART的forking使得确定服务器进程以便调试更加困难。为了缓解这个问题,使用--gdb启动服务器可以抑制forking,另外还可以设置调试环境。对于非调试设置,可以使用--no-monitor来抑制监控进程的forking。对于使用--gdb--no-monitor启动的服务器,执行RESTART将导致服务器直接退出而不重新启动。

状态变量Com_restart跟踪RESTART语句的执行次数。由于状态变量在每个服务器启动时初始化,并且不跨越重启,因此RESTART语句执行失败时RESTART语句的值通常为零,但可以是非零,如果RESTART语句执行失败。