Spec-Zone .ru
спецификации, руководства, описания, API

5.1.12. Процесс Завершения работы

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

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

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

  2. Сервер создает поток завершения работы в случае необходимости.

    В зависимости от того, как инициировалось завершение работы, сервер мог бы создать поток, чтобы обработать процесс завершения работы. Если завершение работы требовал клиент, поток завершения работы создается. Если завершение работы является результатом получения a 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 находится в середине транзакции в этой точке, сервер ожидает, пока текущая группа события репликации (если кто-либо) не закончила выполняться, или до пользовательских проблем a KILL QUERY или KILL CONNECTION оператор. См. также Раздел 13.4.2.6,"STOP SLAVE Синтаксис". Так как нетранзакционные операторы не могут откатываться, чтобы гарантировать безопасную от катастрофического отказа репликацию, только транзакционные таблицы должны использоваться.

    Отметить

    Чтобы гарантировать безопасность при столкновении на ведомом устройстве, следует также выполнить ведомое устройство с --relay-log-recovery включенный.

    См. также Раздел 16.2.2, "Реле репликации и Журналы Состояния").

  5. Сервер завершает работу или закрывает механизмы хранения.

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

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

  6. Выходы сервера.