Безопасно ли убивать реплицирующийся процесс MySQL, который «копирует в таблицу tmp»? - PullRequest
5 голосов
/ 27 января 2010

У меня проблема на главном сервере MySQL (5.0, Linux): я попытался добавить комментарий к строке таблицы, что выражается в команде ALTER TABLE. Теперь процесс застрял в «copy to tmp table», копируя 100'000'000 + строк. Использование дискового ввода-вывода слишком велико.

Поскольку мастер использует репликацию, я не уверен, что смогу убить этот процесс. Рабы еще не видели команду ALTER TABLE.

(Чтобы было ясно: я говорю об уничтожении процесса из MySQL-PROCESSLIST, а не из самого процесса MySQL-Daemon.)

Ответы [ 3 ]

3 голосов
/ 07 февраля 2010

Да, вы можете убить его - ALTER не попадет в блоки, пока транзакция не будет завершена, т.е. пока ALTER не будет завершен. Таким образом, подчиненные не увидят и не выполнят его, и мастер выполнит откат к старой структуре таблицы.

Вы можете легко проверить, что АЛЬТЕР еще не находится в журналах, используя show binlog events или утилиту mysqlbinlog.

0 голосов
/ 06 февраля 2010

Вы можете убить операцию, но могут произойти две вещи:

  1. подчиненная схема несовместима с ведущим (и поэтому:)
  2. репликация на ведомых устройствах может остановиться.

Когда репликация останавливается, вы можете попытаться вручную исправить подчиненные устройства, пропустив инструкцию 'alter table', введя на подчиненном сервере:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

0 голосов
/ 27 января 2010

Нет, это не безопасно. Только если у вас есть полная резервная копия (недавно) базы данных, чтобы восстановить в случае возникновения проблемы. Могут быть некоторые блокировки, и в результате вы получите заблокированные таблицы, что может повредить ключи.

Как совет, если вы добавляете новые столбцы для такой большой базы данных. Это проще

  • для создания подражателя схемы таблицы
  • запустить alter для этой таблицы, пока она пуста,
  • заполнить оригинал вставкой в ​​... () выбрать поля из ....

Это намного быстрее. Затем, очевидно, переименуйте таблицу в оригинал.

...