7.1.19 Процесс завершения работы сервера
Процесс завершения работы сервера происходит следующим образом:
-
Запускается процесс завершения работы.
Это может произойти несколькими способами. Например, пользователь с привилегией
SHUTDOWNможет выполнить команду mysqladmin shutdown. Команда mysqladmin может быть использована на любой платформе, поддерживаемой MySQL. Также возможны другие методы инициации завершения работы, специфичные для операционной системы: сервер завершает работу в Unix при получении сигналаSIGTERM. Сервер, работающий как служба в Windows, завершает работу, когда диспетчер служб сообщает ему об этом. -
Сервер создает поток завершения, если это необходимо.
В зависимости от того, как был инициирован процесс завершения, сервер может создать поток для обработки процесса завершения. Если завершение было запрошено клиентом, создается поток завершения. Если завершение вызвано получением сигнала
SIGTERM, поток обработки сигнала может сам обработать завершение или создать отдельный поток для этого. Если сервер пытается создать поток завершения, но не может (например, если память исчерпана), он выводит диагностическое сообщение, которое отображается в журнале ошибок:Error: Can't create thread to kill server
-
Сервер прекращает принимать новые подключения.
Для предотвращения инициации новых операций во время завершения работы сервер прекращает принимать новые подключения клиентов, закрывая обработчики сетевых интерфейсов, на которых он обычно слушает подключения: порт TCP/IP, файл сокета Unix, именованную трубу Windows и общую память в Windows.
-
Сервер завершает текущую активность.
Для каждого потока, связанного с подключением клиента, сервер прерывает соединение с клиентом и отмечает поток как убитый. Потоки умирают, когда замечают, что они помечены таким образом. Потоки для неактивных подключений умирают быстро. Потоки, которые в настоящее время обрабатывают операторы, периодически проверяют свое состояние и умирают дольше. Для дополнительной информации о завершении потоков см. Раздел 15.7.8.4, «Оператор KILL», в частности, для инструкций по убитым операциям
REPAIR TABLEилиOPTIMIZE TABLEна таблицахMyISAM.Для потоков, имеющих открытую транзакцию, транзакция откатывается. Если поток обновляет нетранзакционную таблицу, операция, такая как многострочное
UPDATEилиINSERT, может оставить таблицу частично обновленной, потому что операция может завершиться до завершения.Если сервер является сервером источника репликации, он обрабатывает потоки, связанные с подключенными репликами, как другие клиентские потоки. То есть каждый из них помечается как убитый и выходит, когда в следующий раз проверяет свое состояние.
Если сервер является репликой, он останавливает потоки ввода-вывода и SQL репликации, если они активны, прежде чем помечать клиентские потоки как убитые. Поток SQL разрешается завершить текущее утверждение (чтобы избежать проблем с репликацией), а затем останавливается. Если поток SQL находится посреди транзакции на этом этапе, сервер ждет, пока текущая группа репликации (если есть) не закончит выполнение или пока пользователь не выполнит оператор
KILL QUERYилиKILL CONNECTION. См. также Раздел 15.4.2.5, «Оператор STOP REPLICA». Поскольку нетранзакционные операторы не могут быть отменены, чтобы гарантировать безопасность репликации при аварийных ситуациях, следует использовать только транзакционные таблицы.ПримечаниеЧтобы гарантировать безопасность при аварийных ситуациях репликации, необходимо запустить репликацию с включенным
--relay-log-recovery.См. также Раздел 19.2.4, «Журналы репликации и хранилища метаданных репликации».
-
Сервер завершает работу или закрывает хранилища данных.
На этом этапе сервер очищает кэш таблиц и закрывает все открытые таблицы.
Каждое хранилище данных выполняет необходимые действия для таблиц, которыми оно управляет.
InnoDBочищает свой буферный пул в диск (еслиinnodb_fast_shutdownне равен 2), записывает текущий LSN в пространство таблиц и завершает свои внутренние потоки.MyISAMочищает все ожидающие записи индексов для таблицы. Сервер завершает работу.
Для предоставления информации процессам управления сервер возвращает один из кодов выхода, описанных в следующем списке. Фраза в скобках указывает действие, выполняемое системой systemd в ответ на код на платформах, где systemd используется для управления сервером.
0 = успешное завершение (перезапуск не выполнен)
1 = неуспешное завершение (перезапуск не выполнен)
2 = неуспешное завершение (перезапуск выполнен)
© 2025 Oracle
Licensed under the GPLv2 License.