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
Ответы:
Основываясь на ограниченных данных, мне интересно, есть ли у вас межсетевой экран между клиентом и сервером MySQL (он может быть непосредственно на хостах), который разрешает 3306 серверу MySQL, но блокирует ответные пакеты на первоначальный запрос SYN.
Возможно, вы захотите выполнить дамп пакета с обеих сторон, чтобы выяснить, что происходит на стороне TCP, и / или проверить любые межсетевые экраны, которые существуют между обеими сторонами.
источник
Я подозреваю, что это не проблема MySQL как таковая.
Убедитесь, что с транспортным уровнем все в порядке. Можете ли вы получить TCP-соединение с помощью
telnet [db_server] 3306
?Согласны ли ваш клиент и сервер относительно того, должно ли соединение быть зашифровано SSL?
Я не могу вспомнить многих ситуаций, когда я хотел бы установить mysql-соединение через общедоступный Интернет, что, как я подозреваю, вы подразумеваете под «возможностью подключения извне». Если он не зашифрован, это огромный риск для безопасности, и накладные расходы на настройку SSL для каждого соединения слишком высоки для большинства случаев использования. Возможно, вы захотите посмотреть на использование какого-то постоянного зашифрованного туннеля.
источник
Прерванное соединение считается ошибкой соединения в MySQL, которая может не регистрироваться в журнале ошибок MySQL. См. Потерянные соединения TCP, не зарегистрированные как ошибки, но приводящие к заблокированному хосту .
источник