Что произойдет, если вы убьете длительный запрос на изменение? - PullRequest
28 голосов
/ 28 апреля 2010

Что произойдет, если вы убьете длительный запрос alter?Будет ли запрос на изменение просто вернуться?Сколько времени это может занять (как часть времени, которое уже выполняется)?

Что если этот запрос реплицируется на другой сервер?Убьет ли процесс на другом сервере запрос на изменение исходного сервера?

Мы запускаем mysql

Ответы [ 2 ]

17 голосов
/ 28 апреля 2010

Это зависит от того, что вы делаете. Если вы запускаете команду an alter table...add index для таблицы InnoDB (не уверен насчет MyISAM), то она просто будет запускаться и запускаться, поскольку сначала копирует весь запасной запас и чертову таблицу: в середине «копировать в временную таблицу» его практически невозможно остановить.

Смотрите здесь:

В большинстве случаев ALTER TABLE работает делая временную копию оригинальный стол. Переделка выполняется на копии, а затем исходная таблица удаляется, а новая один переименован. Пока ALTER TABLE есть выполнение, исходная таблица читается другими сессиями. Обновления и записи в таблицу зашли в тупик пока новый стол не будет готов, а затем автоматически перенаправляются на новая таблица без неудачных обновлений.

0 голосов
/ 26 января 2016

Что если этот запрос реплицируется на другой сервер?

ALTER будет выполняться и на этом сервере, с соответствующими последствиями.

Будет ли уничтожение процесса на другом сервере отменять запрос на изменение исходного сервера?

Нет. Исходный сервер не имеет обратного канала, чтобы узнать о том, что произошло (или не произошло) на ведомом устройстве. Если вы убьете ALTER на ведомом устройстве, то вы окажетесь в ситуации, когда мастер имеет новое ограничение или индекс, а ведомый не имеет. Это редко рецепт счастья:)

Как только ALTER входит в журнал репликации, вы должны либо позволить ему работать везде, либо уничтожить его везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...