Как отследить источник Aborted_connects mysql server
Исследуя эту проблему, я заметил несколько неладных моментов, которые казались связанными, но на самом деле таковыми не были.
Самый большой измеримый признак был
mysqladmin -p ext | grep Abort | grep -v 0
Enter password:
| Aborted_clients | 2 |
| Aborted_connects | 112776
Эти две переменные состояния на самом деле не связаны (см. страницу руководства, где они объясняются). Первая была связана с ошибками, которые видел клиент: сервер через некоторое время закрывал неактивные соединения, и я исправил это, увеличив конфигурационную переменную wait_timeout.
Вторая ошибка не указывает на то, что активное соединение вообще закрыто. Скорее, это показывает, что соединение не может быть установлено по какой-то причине. Возможно, это сеть, или, возможно, проблема с разрешениями или что-то еще. Первое, что я сделал, это проверил наличие потери пакетов между сервером базы данных и веб-сервером; сеть работала нормально.
Исключив это (по крайней мере, к моему удовлетворению), я обратился к tcpdump, чтобы посмотреть, что происходит с этими соединениями. Я выполнил следующую команду в одном окне своего сеанса экрана, чтобы увидеть, когда соединение было прервано:
tcpdump -s 1500 -w tcp.out port 3306
После того, как я увидел прерванное соединение, я отменил tcpdump и посмотрел полученный файл. Проверка сеанса с помощью tcpdump -r показала, что сеанс TCP завершен; на этом слое ничего плохого не происходило. Поэтому я использовал утилиту strings для просмотра текста, отправленного в пакетах:
strings tcpdump.out
Host 'XXX.XX.XX.XXX' is not allowed to connect to this MySQL server
Я проверил этот IP-адрес.... но перед этим, я решил проверить таблицы GRAND сервера и действительно... этот IP-адрес который является машиной в локальной сети не разрешен для подключения.