Почему возникает ошибка при попытке подключиться к базе данных?

При подключении к БД MySQL возникает ошибка: <br/> ERROR 2002 (HY000): Can't connect to server on доменное имя сервера (115) <br/> Проблема проявляется только на одной клиентской машине, остальные подключаются нормально. При попытке соединиться с портом через telnet или nc получается то же самое — похоже, что соединение блокируется на этапе установления TCP-соединения, хотя файрволл отключён. В чём может быть причина?
  • 10 апреля 2026 г. 18:01
Ответы на вопрос 4
Короткий ответ: причина — не в MySQL-клиенте, а в сетевом уровне между этой конкретной машиной и сервером. Ошибка 2002 с кодом (115) обычно означает, что TCP‑connect не завершился (EINPROGRESS / таймаут или блокировка). Чаще всего это либо неправильный маршрут / блокировка на стороне клиента/сетевого оборудования, либо попытка подключиться по адресу/семейству (IPv6) куда сервер не слушает.

Что проверить и как отладить (шаги в порядке приоритетности)

1) Проверить, как клиент разрешает имя (IPv4 vs IPv6)
- getent hosts your-mysql-host
- dig +short A your-mysql-host; dig +short AAAA your-mysql-host
Если есть AAAA, клиент может пытаться по IPv6 и это не работает. Попробуйте:
- telnet -4 your-mysql-host 3306  (форсировать IPv4)
- nc -4 -v your-mysql-host 3306
Если по IPv4 работает — причина в IPv6.

2) Проверить, доходит ли SYN до сервера
На сервере (или его стене) запустите tcpdump и попробуйте соединиться с проблемного клиента:
- sudo tcpdump -nni any port 3306 and host <IP_клиента> or host <IP_сервера>
Если SYN от клиента не появляется — проблема в маршрутизации/блокировке до сервера (на клиенте, в маршрутизаторе, у провайдера). Если SYN приходит, но нет ответа — сервер отклоняет/фильтрует.

3) Проверить локальную сторону — клиент
- ping, traceroute: ping <server>, traceroute -T -p 3306 <server>
- ip route show
- ss -tan | grep ESTAB / grep 3306
- sudo tcpdump -nni any host <server> and port 3306 — смотрите идут ли SYN и приходят ли ответы
- iptables -L -v -n  (или nft list ruleset), убедитесь, что OUTPUT не блокирует соединения
Иногда VPN/клиентский firewall/SELinux/сетевой неймспейс блокируют исходящие соединения.

4) Проверить серверную фильтрацию по IP/службам
- iptables/nftables на сервере, fail2ban, tcpwrappers (hosts.deny)
В логах сервера (iptables, auth, mysql) может быть запись о блокировке. Если сервер отвечает только на соединения от разрешённых IP — ваш клиент может быть в чёрном списке.

5) Дополнительные вещи
- Попробуйте подключиться по явному IPv4 адресу: mysql -h 1.2.3.4 -P3306 --protocol=TCP
- Проверьте /etc/hosts — может стоять неправильная запись для имени сервера.
- Проверьте MTU/PMTU проблемы (иногда ругается на нестандартные пути), но для SYN обычно не характерно.
- Если клиент в контейнере/виртуалке — проверьте сетевой режим (NAT, bridge).

Типичные реальные причины
- DNS/AAAA → клиент пытается по IPv6, сервер не слушает IPv6.
- Сервер блокирует конкретный IP (iptables, fail2ban, tcpwrappers).
- Маршрутизация/шлюз на клиенте неверна — пакеты не доходят.
- Локальный firewall на клиенте (OUTPUT) или корпоративный прокси/ACL блокирует исходящие TCP.
- VPN/сетевой namespace мешает соединению.

Если пришлёте выводы нескольких команд (getent hosts, ping, traceroute, tcpdump/описание того, видно ли SYN на сервере), помогу точно локализовать проблему и дам конкретное решение.
115 это tcp-таймаут (SYN-ACK не приходит). если файрвол ты проверял на клиенте — глянь на сервере: <code>iptables -L -n</code> . fail2ban или docker часто втихаря свои цепочки вешают, ufw про них не в курсе. <br/> <br/> p.s. <code>ip route get SERVER_IP</code> с проблемной машины тоже проверь — мб маршрут кривой
Проверить корректен ли ip и dns с помощью nslookup, а то может база данных видит другой ip. <br/> Попробовать подключится по ip, если по ip подключается значит резолвится не  правильно. <br/> Проверить не включен ли vpn. <br/> Проверить файл hosts, не появилось ли чего лишнего. <br/> Проверить в каком месте обрывается соединение, может где то по маршруту. <br/> Проверить не блокирует ли соединение  tcpwrapper, в связи какими то новыми сервисами или обновлениями.
Если фаерволл не активен действительно, то fail2ban ничего не заблокирует. Вангую что на клиентской машине запись hosts)
Похожие вопросы