Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

15.7.8.8 重新启动语句

Press CTRL+C to copy
RESTART

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

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

Note

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

成功的 RESTART 操作需要 mysqld 在具有监控进程的环境中运行,以检测服务器重新启动:

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

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

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

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

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

要配置监控环境,以便 mysqld 启用 RESTART 语句:

  1. 设置 MYSQLD_PARENT_PID 环境变量为启动 mysqld 进程的进程 ID 的值,然后启动 mysqld

  2. mysqld 由于使用 RESTART 语句而关闭时,它返回退出代码 16。

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

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

Press CTRL+C to copy
#!/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 的 fork 操作使得在调试时确定要附加到的服务器进程变得更加困难。为了缓解这一问题,使用 --gdb 启动服务器时,会抑制 fork 操作,除了其他用于设置调试环境的操作外。在非调试设置中,--no-monitor 可以用于抑制监控进程的 fork。对于使用 --gdb--no-monitor 启动的服务器,执行 RESTART 将导致服务器简单地退出而不重新启动。

状态变量 Com_restart 跟踪 RESTART 语句的数量。因为状态变量在每次服务器启动时都会被初始化,并且不会跨重启持久化,因此 Com_restart 通常的值为零,但如果执行了 RESTART 语句但失败了,那么它的值可能不为零。