Documentation Home

13.7.8.8 RESTART 语句

RESTART

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

for 的一种用途RESTART是当不可能或不方便在服务器主机上获得对 MySQL 服务器的命令行访问以重新启动它时。例如, SET PERSIST_ONLY可以在运行时用于对只能在服务器启动时设置的系统变量进行配置更改,但仍必须重新启动服务器才能使这些更改生效。该 RESTART语句提供了一种从客户端会话中执行此操作的方法,无需在服务器主机上进行命令行访问。

笔记

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

成功的RESTART操作需要mysqld在具有可用于检测为重新启动目的执行的服务器关闭的监视进程的环境中运行:

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

  • 如果不存在监视进程,则 RESTART失败并出现错误。

这些平台为声明提供必要的监控支持 RESTART

  • Windows,当mysqld作为 Windows 服务或独立启动时。(mysqld 分叉,一个进程充当另一个进程的监视器,另一个进程充当服务器。)

  • 使用 systemd 或mysqld_safe来管理 mysqld 的 Unix 和类 Unix 系统 。

配置监控环境使 mysqld启用该 RESTART语句:

  1. 在启动mysqld之前, 将环境变量设置为启动mysqldMYSQLD_PARENT_PID的进程的进程 ID 值。

  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使得确定要附加到以进行调试的服务器进程变得更加困难。为了缓解这种情况, --gdb除了设置调试环境的其他操作外,还可以通过抑制分叉来启动服务器。在非调试设置中, --no-monitor可能仅用于抑制派生监视器进程的目的。对于使用--gdb 或启动的服务器--no-monitor,执行 RESTART会导致服务器简单地退出而不重新启动。

Com_restart 状态变量跟踪 RESTART语句 的 数量。因为状态变量是为每次服务器启动而初始化的,并且不会在重新启动后持续存在,所以通常值为零,但如果语句已执行但失败 Com_restart ,则可以为非零 。RESTART