
Порт 3306 является стандартным для MySQL и отвечает за передачу данных между сервером базы данных и клиентскими приложениями. По умолчанию MySQL на Ubuntu настроен на прослушивание только локальных подключений, что ограничивает доступ к базе данных с внешних устройств.
Для разрешения удаленных подключений необходимо изменить конфигурационный файл MySQL, указав IP-адрес или диапазон адресов, с которых разрешен доступ. Одновременно важно убедиться, что файрвол UFW или iptables не блокирует порт 3306, иначе любые попытки подключения будут отклонены.
После открытия порта рекомендуется протестировать соединение с внешнего компьютера с помощью утилит telnet или nc, чтобы убедиться в корректной настройке. В случае проблем с доступом стоит проверить привилегии пользователей MySQL и правила безопасности сервера, чтобы исключить блокировку на уровне базы данных или операционной системы.
Автоматическое применение правил файрвола после перезагрузки системы предотвращает повторное закрытие порта. Настройка удаленного доступа через порт 3306 позволяет безопасно управлять базой данных и интегрировать MySQL с внешними приложениями без изменения стандартного порта.
Проверка текущего состояния порта 3306 на Ubuntu

Чтобы проверить доступность порта снаружи, примените nmap на IP-адресе сервера: nmap -p 3306 ваш_сервер. Статус open подтверждает, что порт открыт для внешних подключений, а closed или filtered указывает на блокировку файрволом или отсутствие прослушивания.
Дополнительно можно использовать netcat для тестирования соединения: nc -zv ваш_сервер 3306. Сообщение о успешном соединении гарантирует, что MySQL принимает подключения, а ошибка соединения требует проверки конфигурации сервера и правил безопасности.
Настройка MySQL для прослушивания внешних подключений
Чтобы MySQL принимал подключения не только с локального компьютера, необходимо изменить файл конфигурации mysqld.cnf, который обычно находится в /etc/mysql/mysql.conf.d/. Найдите строку:
bind-address = 127.0.0.1
и замените 127.0.0.1 на IP-адрес сервера или на 0.0.0.0 для всех интерфейсов:
bind-address = 0.0.0.0
После изменения конфигурации перезапустите MySQL:
sudo systemctl restart mysql
Для управления доступом пользователей создайте или обновите учетные записи с разрешением на подключение с внешнего IP. Пример команды:
GRANT ALL PRIVILEGES ON база.* TO ‘пользователь’@’%’ IDENTIFIED BY ‘пароль’;
Для наглядного контроля рекомендуется использовать таблицу с ключевыми параметрами конфигурации:
| Параметр | Описание | Рекомендованное значение |
|---|---|---|
| bind-address | IP-адрес интерфейса для прослушивания подключений | 0.0.0.0 или конкретный внешний IP |
| port | Порт, на котором MySQL принимает подключения | 3306 |
| skip-networking | Отключение сетевых подключений | Не использовать |
| user | Пользователь, от имени которого запускается сервер | mysql |
Изменение конфигурации файрвола UFW для разрешения порта 3306
Для открытия порта 3306 в Ubuntu с активным UFW выполните команду:
sudo ufw allow 3306/tcp
Эта команда разрешает входящие TCP-соединения на стандартный порт MySQL. После применения изменений проверьте статус правил:
sudo ufw status numbered
Если нужно ограничить доступ только для конкретного IP-адреса, используйте синтаксис:
sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp
После внесения правил рекомендуется перезагрузить UFW для их корректного применения:
sudo ufw reload
Проверка доступности порта с удаленного хоста поможет убедиться, что UFW пропускает соединения, а дополнительные ограничения применяются только к указанным IP.
Проверка правил iptables для доступа к порту 3306

Для контроля доступа к порту 3306 через iptables используйте команду:
sudo iptables -L -n -v
- Проверяйте наличие правил типа ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306.
- Если таких правил нет, порт блокируется по умолчанию.
- Правила с действием DROP или REJECT для TCP-порта 3306 нужно изменить или удалить.
Для добавления разрешающего правила выполните:
sudo iptables -A INPUT -p tcp —dport 3306 -j ACCEPT
Чтобы сохранить изменения после перезагрузки системы, примените:
- sudo iptables-save > /etc/iptables/rules.v4 для IPv4
- sudo ip6tables-save > /etc/iptables/rules.v6 для IPv6
После внесения правил повторно проверьте доступность порта с внешнего компьютера, чтобы убедиться в корректной настройке iptables.
Тестирование доступности порта 3306 с удаленного компьютера

Для проверки подключения к MySQL с внешнего компьютера используйте утилиту telnet:
telnet IP_сервера 3306
Если соединение установлено, терминал покажет подтверждение, а ошибка соединения укажет на блокировку порта или проблемы с конфигурацией сервера.
Альтернативно можно использовать netcat:
nc -zv IP_сервера 3306
- Настройки bind-address в mysqld.cnf
- Правила файрвола UFW или iptables
- Привилегии пользователей MySQL для удаленных подключений
Регулярное тестирование после изменений конфигурации помогает поддерживать доступность порта 3306 и исключает проблемы при подключении приложений.
Решение проблем с подключением к MySQL через порт 3306

Если удаленное подключение к MySQL не устанавливается, первым шагом проверьте, что сервер действительно прослушивает порт 3306. Выполните команду:
sudo ss -tuln | grep 3306
Отсутствие LISTEN означает неправильную настройку bind-address в mysqld.cnf или остановленный сервис MySQL.
Далее проверьте правила файрвола:
- Для UFW: sudo ufw status
- Для iptables: sudo iptables -L -n -v
Убедитесь, что порт 3306 разрешен для TCP-подключений и отсутствуют правила DROP или REJECT.
Проверьте учетные записи MySQL, чтобы пользователь имел право подключаться с нужного IP. Пример команды для предоставления доступа:
GRANT ALL PRIVILEGES ON база.* TO ‘пользователь’@’%’ IDENTIFIED BY ‘пароль’;
После внесения изменений перезапустите MySQL:
sudo systemctl restart mysql
Тестирование с удаленного хоста с помощью telnet или nc подтвердит исправность подключения.
Автоматическое применение правил файрвола после перезагрузки
После перезагрузки Ubuntu правила UFW и iptables могут сбрасываться. Для сохранения настроек выполните следующие действия.
Для UFW:
- Проверьте активность UFW: sudo ufw status
- Включите автозагрузку: sudo systemctl enable ufw
- Перезагрузите сервис для применения изменений: sudo systemctl restart ufw
Для iptables:
- Сохраните текущие правила IPv4: sudo iptables-save > /etc/iptables/rules.v4
- Сохраните текущие правила IPv6: sudo ip6tables-save > /etc/iptables/rules.v6
- Убедитесь, что пакет iptables-persistent установлен: sudo apt install iptables-persistent
- После перезагрузки правила автоматически загрузятся из файлов rules.v4 и rules.v6
Регулярная проверка состояния порта 3306 после перезагрузки гарантирует, что доступ к MySQL сохраняется без ручного вмешательства.
Вопрос-ответ:
Почему MySQL не принимает подключения с другого компьютера после открытия порта 3306?
Наиболее частая причина — параметр bind-address в файле mysqld.cnf установлен на 127.0.0.1. Это ограничивает сервер локальными подключениями. Для разрешения внешних подключений нужно заменить его на 0.0.0.0 или на конкретный IP-адрес, после чего перезапустить MySQL. Также необходимо убедиться, что правила файрвола UFW или iptables разрешают TCP-соединения на порт 3306.
Как проверить, открыт ли порт 3306 на Ubuntu?
Для проверки локально используйте команду sudo ss -tuln | grep 3306. Она покажет, прослушивает ли MySQL порт 3306. Для проверки с удаленного компьютера подходят утилиты telnet IP_сервера 3306 или nc -zv IP_сервера 3306. Если соединение не устанавливается, нужно проверить настройки MySQL и файрвола.
Можно ли ограничить доступ к порту 3306 только определенными IP-адресами?
Да, в UFW это делается командой sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp. В iptables можно добавить правило sudo iptables -A INPUT -p tcp -s 192.168.1.100 —dport 3306 -j ACCEPT. Это позволит подключаться только с указанного IP, остальные попытки будут отклоняться.
Что делать, если после перезагрузки Ubuntu порт 3306 снова закрыт?
Для UFW нужно включить автозагрузку: sudo systemctl enable ufw. Для iptables следует сохранить правила: sudo iptables-save > /etc/iptables/rules.v4 и убедиться, что установлен пакет iptables-persistent. После этого настройки будут применяться автоматически при перезагрузке.
Как проверить, что пользователь MySQL имеет право подключаться с удаленного компьютера?
В MySQL выполните команду SELECT host, user FROM mysql.user WHERE user=’имя_пользователя’;. Если в колонке host указано %, это разрешает подключения с любого IP. Для ограничения или предоставления доступа используйте GRANT ALL PRIVILEGES ON база.* TO ‘пользователь’@’%’ IDENTIFIED BY ‘пароль’; и затем FLUSH PRIVILEGES;.
Как открыть порт 3306 для MySQL на Ubuntu и разрешить подключение с других устройств?
Для начала откройте файл конфигурации MySQL mysqld.cnf, обычно расположенный в /etc/mysql/mysql.conf.d/. Найдите строку bind-address = 127.0.0.1 и замените её на 0.0.0.0 или на IP-адрес сервера, с которого будут подключаться клиенты. Сохраните изменения и перезапустите MySQL командой sudo systemctl restart mysql. Затем откройте порт 3306 в файрволе UFW: sudo ufw allow 3306/tcp, либо в iptables: sudo iptables -A INPUT -p tcp —dport 3306 -j ACCEPT. Проверьте доступность порта с удаленного компьютера через telnet IP_сервера 3306 или nc -zv IP_сервера 3306. Если подключение не устанавливается, убедитесь, что пользователь MySQL имеет разрешение на подключение с нужного IP, используя команду GRANT ALL PRIVILEGES ON база.* TO ‘пользователь’@’%’ IDENTIFIED BY ‘пароль’; и затем FLUSH PRIVILEGES;. После всех изменений порт 3306 будет доступен для внешних подключений.
