#### 13.7.8.8 RESTART 语句

[](<>)

```
RESTART
```

此语句停止并重新启动 MySQL 服务器。它需要[`关掉`](privileges-provided.html#priv_shutdown)特权。

一种用途[`重新开始`](restart.html)是在无法或不方便获得对服务器主机上的 MySQL 服务器的命令行访问以重新启动它时。例如，[`SET PERSIST_ONLY`](set-variable.html)可以在运行时用于对只能在服务器启动时设置的系统变量进行配置更改，但仍然必须重新启动服务器才能使这些更改生效。这[`重新开始`](restart.html)语句提供了一种从客户端会话中执行此操作的方法，而无需在服务器主机上进行命令行访问。

笔记

执行后[`重新开始`](restart.html)声明，客户端可以预期当前连接丢失。如果启用了自动重新连接，则在服务器重新启动后重新建立连接。否则，必须手动重新建立连接。

一个成功的[`重新开始`](restart.html)操作需要[**mysqld**](mysqld.html)在具有可用于检测出于重新启动目的而执行的服务器关闭的监视进程的环境中运行：

-   在存在监控过程的情况下，[`重新开始`](restart.html)原因[**mysqld**](mysqld.html)终止，以便监控进程可以确定它应该开始一个新的[**mysqld**](mysqld.html)实例。

-   如果不存在监控进程，[`重新开始`](restart.html)失败并出现错误。

    这些平台提供必要的监控支持[`重新开始`](restart.html)陈述：

-   窗户，什么时候[**mysqld**](mysqld.html)作为 Windows 服务或独立启动。([**mysqld**](mysqld.html)分叉，一个进程充当另一个进程的监视器，另一个进程充当服务器。）

-   使用 systemd 的 Unix 和类 Unix 系统或[**mysqld\_安全的**](mysqld-safe.html)管理[**mysqld**](mysqld.html).

    配置监控环境，以便[**mysqld**](mysqld.html)使[`重新开始`](restart.html)陈述：

1.  设置`MYSQLD_PARENT_PID`环境变量为启动进程的进程ID的值[**mysqld**](mysqld.html)， 在开始之前[**mysqld**](mysqld.html).

2.  什么时候[**mysqld**](mysqld.html)执行关闭由于使用[`重新开始`](restart.html)语句，它返回退出代码 16。

3.  当监控进程检测到退出码为 16 时，启动[**mysqld**](mysqld.html)再次。否则，它会退出。

    这是一个在**重击**贝壳：


```
#!/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 上，forking 用来实现[`重新开始`](restart.html)使得确定要附加到调试的服务器进程更加困难。为了缓解这种情况，启动服务器[`--gdb`](server-options.html#option_mysqld_gdb)禁止分叉，以及为设置调试环境而执行的其他操作。在非调试设置中，[`--no-monitor`](server-options.html#option_mysqld_no-monitor)可用于抑制分叉监视进程的唯一目的。对于以任一方式启动的服务器[`--gdb`](server-options.html#option_mysqld_gdb)要么[`--no-monitor`](server-options.html#option_mysqld_no-monitor), 执行[`重新开始`](restart.html)导致服务器直接退出而不重新启动。

这[`Com_restart`](server-status-variables.html#statvar_Com_xxx)状态变量跟踪的数量[`重新开始`](restart.html)陈述。因为状态变量在每次服务器启动时都会初始化，并且不会在重新启动后持续存在，`Com_restart`通常具有零值，但可以是非零，如果[`重新开始`](restart.html)语句已执行但失败。
