Прервано соединение (ошибка чтения пакетов связи)

8

Mysql error.log показывает

[Warning] Aborted connection 320935 to db: '...' user: '...' host: '...' (Got an error reading communication packets)

Пока клиентская сторона получает:

Lost connection to MySQL server at 'reading initial communication packet', system error: 111
Lost connection to MySQL server at 'reading authorization packet', system error: 0
and after a while: Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

Я прочитал руководство по MySQL об этом и многие другие темы. Поэтому я изменил некоторые значения в my.cnf

max_allowed_packet      = 512M
connect_timeout = 60
net_read_timeout = 120
innodb_buffer_pool_size = 5G

Посмотрел журнал запросов на разорванное соединение:

22400 Connect user@host on dbname
22400 Query SELECT @@sql_mode
22400 Query     SET SESSION sql_mode=''
22400 Query     SET NAMES utf8
22400 Init DB   dbname
22400 Init DB   dbname

Проверено состояние таблицы. bind-address - это IP-адрес сервера, но мне нужно иметь возможность подключаться извне.

Aborted_connects is 196
PiTheNumber
источник
Можете ли вы проверить качество связи между двумя хостами? базовые 100 пингов должны делать ..
произнес

Ответы:

4

Основываясь на ограниченных данных, мне интересно, есть ли у вас межсетевой экран между клиентом и сервером MySQL (он может быть непосредственно на хостах), который разрешает 3306 серверу MySQL, но блокирует ответные пакеты на первоначальный запрос SYN.

Возможно, вы захотите выполнить дамп пакета с обеих сторон, чтобы выяснить, что происходит на стороне TCP, и / или проверить любые межсетевые экраны, которые существуют между обеими сторонами.

Мэтью Ифе
источник
Спасибо. Какие данные я могу предоставить, чтобы прояснить это? У меня нет брандмауэра на моем конце, не уверен насчет другой стороны. В основном соединение работает, так что, я думаю, это не брандмауэр. Я попытался сбросить пакет, но там много трафика, и проблема показывает только несколько раз в день. Мне не удалось определить фильтр, который захватывает только пакеты, которые мне нужны.
PiTheNumber
4

Я подозреваю, что это не проблема MySQL как таковая.

Убедитесь, что с транспортным уровнем все в порядке. Можете ли вы получить TCP-соединение с помощью telnet [db_server] 3306?

Согласны ли ваш клиент и сервер относительно того, должно ли соединение быть зашифровано SSL?

Я не могу вспомнить многих ситуаций, когда я хотел бы установить mysql-соединение через общедоступный Интернет, что, как я подозреваю, вы подразумеваете под «возможностью подключения извне». Если он не зашифрован, это огромный риск для безопасности, и накладные расходы на настройку SSL для каждого соединения слишком высоки для большинства случаев использования. Возможно, вы захотите посмотреть на использование какого-то постоянного зашифрованного туннеля.

mc0e
источник
telnet connect и большинство соединений работают нормально только время от времени эта проблема появляется. Да, это соединение через общедоступный интернет. Я хотел бы иметь шифрование здесь, но я не контролирую другой конец. В любом случае мне сначала нужно стабилизировать соединение.
PiTheNumber