Как можно массово уничтожить соединения с MySQL?
Я открыл слишком много подключений к MySQL и теперь не могу получить к нему доступ. Там написано "Слишком много связей". Как я могу закрыть все эти соединения? Я также не знаю, как его перезапустить, что может решить проблему.
6 ответов
Я ответил на этот вопрос о массовом убийстве DB Connections в DBA StackExchange еще в мае 2011 года.
Что может позволить человеку войти в MySQL в таких стрессовых условиях? Ответ довольно прост: НЕ ДАЙТЕ ВСЕМ СУПЕР ПРИВИЛЕГИИ!!!
Почему СУПЕР Привилегия?
Согласно документации MySQL:
Привилегия SUPER позволяет учетной записи использовать CHANGE MASTER TO, KILL или mysqladmin kill для уничтожения потоков, принадлежащих другим учетным записям (вы всегда можете удалить собственные потоки), PURGE BINARY LOGS, изменения конфигурации с помощью SET GLOBAL для изменения глобальных системных переменных, mysqladmin команда отладки, включение или отключение ведения журнала, выполнение обновлений, даже если системная переменная read_only включена, запуск и остановка репликации на подчиненных серверах, указание любой учетной записи в атрибуте DEFINER хранимых программ и представлений, а также возможность подключения (один раз) даже если достигнут предел соединения, контролируемый системной переменной max_connections.
В свете этого обычные клиентские соединения не должны иметь привилегии SUPER. Как только число подключений к БД достигнет = max_connections, будет разрешено только еще одно подключение, и это одно подключение должно иметь привилегию SUPER. Если каждый и его бабушка имеют привилегию SUPER, все ставки сняты, и никто не может войти в систему.
У вас есть три следующих варианта:
Пуск -> Выполнить -> Services.msc
Найдите MySQL, щелкните правой кнопкой мыши и выберите перезагрузитьПуск -> Выполнить -> CMD
нет стоп MySQL вход
чистый старт MySQL enter- Убейте все экземпляры mySQLd.exe в панели задач. (не рекомендуется)
Если у вас есть доступ к вашему серверу, перезапустите mysql. если у вас нет доступа к вашему серверу, просто подождите.
Я решил это! Это была ошибка в коде C#, где я случайно зациклил "connection.Open ()". -.-
Class1 сказал: "Эй, Class2, открой соединение!" и Class2 ответил 'соединение открыто! Теперь откройте соединение, Class1!'. Затем Class1 открыл соединение и сказал Class2 "открыть соединение тоже!" и тааак на...
Прошу прощения за глупость, я просто не поняла об этом -.-
3 дня застряли (Y)
Ура!
Вы должны быть в состоянии войти в mysql с пользователем root.
Оттуда вы можете запустить "Показать список процессов". Затем вы можете запустить kill 'Id', чтобы уничтожить соединения.
Некоторые веб-приложения всегда сообщают "слишком много подключений", если они не могут подключиться к базе данных. Если вы получаете эту ошибку даже после перезапуска MySQL, то настоящей ошибкой, вероятно, является "нет соединения". Попробуйте подключиться к MySQL другим способом, командной строкой, phpmydmin или другим управляемым MySQL сайтом на том же сервере.
Если вы можете подключиться к MySQL с помощью альтернативных средств, проверьте строку подключения на вашем веб-сайте (бит, который дает имя пользователя и пароль для MySQL), затем подключитесь к этим учетным данным, возможно, что-то было изменено, но не обновлено в сценарии.
Если вы вообще не можете подключиться к MySQL и перезапустить MySQL не удалось, то вам нужно будет просмотреть журнал событий (в комментарии вы сказали, что это был сервер Windows). Перезапуск сервера - это ярлык, который исключит множество проблем, а также проверит наличие свободного места на диске.