RESTART语句
RESTART
该语句停止并重新启动MySQL服务器。它需要SHUTDOWN
特权。
一种用途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
语句:
- 在设置
MYSQLD_PARENT_PID
环境变量设置进程的进程ID的启动值的mysqld,启动前的mysqld。 - 当mysqld由于使用该
RESTART
语句而执行关闭操作时,它返回退出代码16。 - 当监视进程检测到退出代码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
执行了语句但失败了,则该值可以为非零。