15.7.8.8 重启语句
RESTART
该语句停止并重新启动 MySQL 服务器。它需要SHUTDOWN
特权。
RESTART
语句的一个用途是,当无法或不便在服务器主机上获取命令行访问权限以重新启动 MySQL 服务器时。例如,可以使用SET PERSIST_ONLY
在运行时对系统变量进行配置更改,但是服务器必须重新启动这些更改才能生效。RESTART
语句提供了从客户端会话中重新启动服务器的方式,而无需在服务器主机上获取命令行访问权限。
执行RESTART
语句后,客户端可以期望当前连接将被中断。如果启用自动重连,连接将在服务器重新启动后重新建立。否则,连接必须手动重新建立。
成功执行RESTART
操作需要mysqld在一个监控进程可用的环境中,该进程可以检测到服务器重新启动的原因:
以下平台提供了必要的监控支持,以便使用RESTART
语句:
-
Windows,mysqld作为 Windows 服务或独立进程运行时。(mysqld会fork,一个进程作为监控进程,另一个进程作为服务器。)
-
Unix 和 Unix 类系统,使用 systemd 或mysqld_safe管理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
语句执行失败。