Убить процесс mysqld - PullRequest
       5

Убить процесс mysqld

5 голосов
/ 10 июня 2010

У меня есть таблица с ~ 800k строк. Я управлял update users set hash = SHA1(CONCAT({about eight fields})) where 1;

Теперь у меня есть зависший процесс Sequel Pro, и я не уверен в процессе mysqld.

Это два вопроса:

  1. Какой вред может принести убийство этих программ? Я работаю над отдельной базой данных, поэтому никакие повреждения не должны наноситься другим базам данных в системе, верно?

  2. Предположим, вам пришлось обновить таблицу, как эта. Что было бы более быстрым / более надежным способом обновления без написания отдельного скрипта .

Я только что проверил с помощью phpMyAdmin, и он выглядит , как будто запрос завершен. У меня все еще есть Sequel Pro, использующий 100% обоих моих ядер ...

Ответы [ 2 ]

5 голосов
/ 09 августа 2010

Если вы используете InnoDB, который поддерживается журналом транзакций для целей восстановления и отката, то вам многое удастся, особенно в непроизводственной среде.

Самый простой способ завершить запрос отступника - использовать оболочку MySQL в качестве пользователя root:

SHOW PROCESSLIST;

Это даст вам список текущих соединений и идентификатор процесса для каждого из них. Чтобы завершить любой запрос, например номер 19, используйте:

KILL 19;

Обычно это отменяет и откатывает запрос. В некоторых случаях этого недостаточно, и вам может потребоваться принудительно завершить процесс сервера MySQL с помощью kill -9. В большинстве случаев вы сможете сразу перезагрузить сервер, и БД будет в последнем полностью зафиксированном состоянии.

1 голос
/ 10 июня 2010

Чтобы получить идентификаторы потоков (вместе с ним будет показан запрос):

mysqladmin proc

Чтобы безопасно убить поток запроса:

mysqladmin kill [id]

В итоге вы получите частично обновленную таблицу, если не будете использовать innodb, но с вами все будет в порядке. Подробнее :

Во время операций ОБНОВЛЕНИЕ или УДАЛЕНИЕ, флаг уничтожения проверяется после каждого блок чтения и после каждого обновления или удаленная строка Если установлен флаг уничтожения, утверждение отменено. Обратите внимание, что если вы не используете транзакции, изменения не отменяются.

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

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