Spec-Zone.ru › MySQL 5.7

5.1.16 Процесс завершения работы сервера

Процесс завершения работы сервера происходит следующим образом:

  1. Инициализируется процесс завершения работы.

    Это может произойти несколькими способами. Например, пользователь с привилегией SHUTDOWN может выполнить команду mysqladmin shutdown. Команда mysqladmin может быть использована на любой платформе, поддерживаемой MySQL. Также возможны другие методы запуска завершения работы, специфичные для операционной системы: сервер на Unix завершается, когда он получает сигнал SIGTERM. Сервер, работающий как служба в Windows, завершается, когда менеджер служб сообщает ему об этом.

  2. При необходимости сервер создает поток завершения.

    В зависимости от того, как был инициирован процесс завершения, сервер может создать поток для обработки этого процесса. Если завершение запрошено клиентом, создаётся поток завершения. Если завершение вызвано получением сигнала SIGTERM, поток обработки сигнала может сам обрабатывать завершение или может создать отдельный поток для этого. Если сервер пытается создать поток завершения, но не может (например, если память исчерпана), он выводит диагностическое сообщение, которое появляется в журнале ошибок:

    Error: Can't create thread to kill server
    
  3. Сервер прекращает принимать новые подключения.

    Для предотвращения запуска новых операций во время завершения работы, сервер прекращает принимать новые подключения клиентов, закрывая обработчики сетевых интерфейсов, на которых он обычно прослушивает подключения: порт TCP/IP, файл сокета Unix, именованную трубу Windows и общую память в Windows.

  4. Сервер завершает текущую активность.

    Для каждого потока, связанного с подключением клиента, сервер разрывает подключение к клиенту и помечает поток как завершённый. Потоки умирают, когда обнаруживают, что они помечены таким образом. Потоки для простаивающих подключений умирают быстро. Потоки, которые в настоящее время обрабатывают операторы, периодически проверяют своё состояние и умирают дольше. Дополнительную информацию о завершении потоков см. в разделе 13.7.6.4, «Оператор KILL», в частности, для инструкций по завершению убитых операций REPAIR TABLE или OPTIMIZE TABLE на таблицах MyISAM.

    Для потоков, имеющих открытую транзакцию, транзакция отменяется. Если поток обновляет нетранзакционную таблицу, операция, такая как обновление нескольких строк UPDATE или INSERT, может оставить таблицу частично обновлённой, поскольку операция может завершиться до завершения.

    Если сервер является сервером репликации источника, он обрабатывает потоки, связанные с текущими подключёнными репликами, как другие клиентские потоки. То есть каждый из них помечается как завершённый и завершается при следующей проверке его состояния.

    Если сервер является репликой, он останавливает потоки ввода-вывода и потоки SQL, если они активны, прежде чем помечать клиентские потоки как завершенные. Потоку SQL разрешается завершить текущий оператор (чтобы избежать проблем с репликацией), а затем он останавливается. Если поток SQL находится в середине транзакции на этом этапе, сервер ждёт, пока не завершится текущая группа репликации (если таковая имеется) или пока пользователь не выполнит оператор KILL QUERY или KILL CONNECTION. См. также раздел 13.4.2.6, «Оператор STOP SLAVE». Поскольку нетранзакционные операторы отменить нельзя, для обеспечения безопасности репликации при сбоях следует использовать только транзакционные таблицы.

    Примечание

    Для обеспечения безопасности репликации при сбоях реплики необходимо запускать реплику с включённым --relay-log-recovery.

    См. также раздел 16.2.4, «Журнал репликации и хранилища метаданных репликации».

  5. Сервер завершает или закрывает хранилища данных.

    На данном этапе сервер сбрасывает кэш таблиц и закрывает все открытые таблицы.

    Каждое хранилище данных выполняет необходимые действия для таблиц, которые оно управляет. InnoDB сбрасывает свой пул буферов на диск (если innodb_fast_shutdown не равно 2), записывает текущий LSN в табличное пространство и завершает свои внутренние потоки. MyISAM сбрасывает все ожидающие записи индексов для таблицы.

  6. Сервер завершает работу.

Для предоставления информации процессам управления сервер возвращает один из кодов выхода, описанных в следующем списке. Фраза в скобках указывает действие, выполняемое systemd в ответ на код, для платформ, на которых systemd используется для управления сервером.

  • 0 = успешное завершение (перезапуска не требуется)

  • 1 = неуспешное завершение (перезапуска не требуется)

  • 2 = неуспешное завершение (перезапуск требуется)

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

Spec-Zone.ru

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