Из-за некоторых плохих сценариев с моей стороны MySQL иногда выходит из строя - потребляя много мощности процессора (средняя загрузка более 20 - у меня только 8 ядер)! Когда я перезапускаю, все снова в порядке.
Итак, мой вопрос: есть ли способ перезапустить MySQL, когда он занимает более 400% ЦП?
Желательно перезапустить только связанные учетные записи, которые вызывают проблему.
Сервер: Linux с WHM
В этом случае перезапуск mysql - плохая практика. Это приводит к перегрузке ваших буферов, и если ваша база данных достаточно велика, потребуется некоторое время, чтобы прогреться.
Я полагаю, у вас есть тяжелые запросы, которые потребляют слишком много процессора.
Использовать mysql> show full processlist
выявлять долго выполняющиеся запросы и пытаться их оптимизировать: создавать индексы, переписывать запросы, чтобы они выполнялись быстрее и меньше сортировались.
Для немедленных результатов вы можете убить эти запросы, используя:
mysql> kill QUERYIDNUMBER
Чтобы напрямую ответить на ваши вопросы - вы можете безопасно перезапустить его с помощью service mysql restart
, но это займет много времени. Перезапуск заблокирует все новые подключения к базе данных, но будет ждать, пока не закончатся все запущенные запросы. Вы можете убить тяжелые запросы, чтобы ускориться.
Также, если вам нужно ускорить перезапуск mysql, есть хороший способ сделать это.
Первый забег mysql> set global innodb_max_dirty_pages_pct = 0;
затем подождите, пока все (или почти все) грязные страницы буфера не будут сброшены на диск, см. mysqladmin ext -i10 | grep dirty
Когда у вас есть такой вывод:
| Innodb_buffer_pool_pages_dirty | 12 |
Вы можете перезапустить свой сервер mysql, и это будет намного быстрее:
service mysql restart
Я могу только повторить, что пытаться решить эту проблему путем перезапуска mysql - действительно плохая идея. Вы должны попытаться идентифицировать и оптимизировать запросы, которые вызывают перегрузку вашего сервера.
Два совета, которые могут вам помочь:
EXPLAIN
Команда SQL.monit сделает это за вас: http://en.wikipedia.org/wiki/Monit