Как убить соединения MySQL
Я создаю сайт с MySQL. Я использую TOAD для MySQL, и вдруг я не могу подключиться к базе данных, поскольку получаю сообщение об ошибке:
"Слишком много соединений"
Есть ли способ в Toad для MySQL просматривать существующие подключения, чтобы их можно было убить или просто закрыть все соединения?
Ответы
Ответ 1
Нет, для нет встроенной команды MySQL . Существуют различные инструменты и скрипты, которые его поддерживают, вы можете убить некоторые соединения вручную или перезапустить сервер (но это будет медленнее).
Используйте SHOW PROCESSLIST
для просмотра всех подключений и KILL
идентификатор процесса, который вы хотите убить.
Вы можете отредактировать параметр тайм-аута, чтобы демон MySQL запустил неактивные процессы или увеличил количество подключений. Вы даже можете ограничить количество подключений для каждого имени пользователя, так что если процесс будет работать неправильно, единственным затронутым процессом будет сам процесс, и никакие другие клиенты в вашей базе данных не будут заблокированы.
Если вы больше не можете подключиться к серверу, вы должны знать, что MySQL всегда резервирует 1 дополнительное соединение для пользователя с привилегией SUPER
. Если ваш процесс нарушения по какой-то причине не использует имя пользователя с этой привилегией...
Затем после того, как вы снова получите доступ к своей базе данных, вы должны исправить процесс (веб-сайт), который порождает многие подключения.
Ответ 2
mysql> SHOW PROCESSLIST;
+-----+------+-----------------+------+---------+------+-------+---------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------------+------+---------+------+-------+----------------+
| 143 | root | localhost:61179 | cds | Query | 0 | init | SHOW PROCESSLIST |
| 192 | root | localhost:53793 | cds | Sleep | 4 | | NULL |
+-----+------+-----------------+------+---------+------+-------+----------------+
2 rows in set (0.00 sec)
mysql> KILL 192;
Query OK, 0 rows affected (0.00 sec)
USER 192:
mysql> SELECT * FROM exept;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> SELECT * FROM exept;
ERROR 2013 (HY000): Lost connection to MySQL server during query
Ответ 3
Я бы рекомендовал проверить соединения, чтобы показать максимальное подключение потока
show variables like "max_connections";
образец
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 13 |
+-----------------+-------+
1 row in set
Затем увеличьте его на примере
set global max_connections = 500;
Ответ 4
Как уже упоминалось выше, для этого нет специальной команды. Однако, если все эти соединения неактивны, используя "таблицы flush"; может освободить все те соединения, которые неактивны.
Ответ 5
В MySQL Workbench:
Левый навигатор> Управление> Клиентские подключения
Это дает вам возможность убивать запросы и соединения.
Примечание: это не TOAD, как спросил OP, но пользователи MySQL Workbench, такие как я, могут оказаться здесь