Spec-Zone.ru › MySQL 9.2

15.7.8.8 Заявление RESTART

RESTART

Это утверждение останавливает и перезапускает сервер MySQL. Оно требует привилегии SHUTDOWN.

Одно из применений RESTART — это случаи, когда нет возможности или неудобно получить доступ к командной строке сервера MySQL на хосте сервера для его перезапуска. Например, SET PERSIST_ONLY может быть использован во время выполнения для внесения изменений в системные переменные, которые можно задать только при запуске сервера, но для вступления этих изменений в силу необходимо перезапустить сервер. Утверждение RESTART предоставляет способ сделать это внутри сессий клиентов, без необходимости доступа к командной строке на хосте сервера.

Примечание

После выполнения утверждения RESTART клиент может ожидать потери текущего соединения. Если автоматическое переподключение включено, соединение восстанавливается после перезапуска сервера. В противном случае соединение необходимо восстановить вручную.

Успешная операция RESTART требует, чтобы mysqld выполнялся в среде, где доступен процесс мониторинга для обнаружения завершения работы сервера, произведённого в целях перезапуска:

  • При наличии процесса мониторинга, RESTART заставляет mysqld завершиться таким образом, чтобы процесс мониторинга мог определить, что он должен запустить новый экземпляр mysqld.

  • Если процесс мониторинга отсутствует, RESTART завершается с ошибкой.

Эти платформы предоставляют необходимую поддержку мониторинга для утверждения RESTART:

  • Windows, когда mysqld запускается как служба Windows или автономно. (mysqld выполняет форкинг, и один процесс действует как монитор для другого, который выступает в качестве сервера.)

  • Системы Unix и Unix-подобные системы, которые используют systemd или mysqld_safe для управления mysqld.

Для настройки среды мониторинга, в которой mysqld включает утверждение RESTART:

  1. Установите переменную среды MYSQLD_PARENT_PID в значение идентификатора процесса (PID) процесса, который запускает mysqld, перед запуском mysqld.

  2. Когда mysqld выполняет завершение из-за использования утверждения RESTART, он возвращает код выхода 16.

  3. Когда процесс мониторинга обнаруживает код выхода 16, он запускает mysqld снова. В противном случае он завершается.

Вот минимальный пример, реализованный в оболочке bash:

#!/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 были выполнены, но завершились неудачей.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/restart.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API