Порт 3306, похоже, закрыт на моем сервере Ubuntu

У меня есть два VPS серверы, и оба имеют MySQL установлены, один для тестирования и один для разработки. Один из моих серверов не позволяет мне подключаться извне. С пользователем;

'mytestuser'@'%'

Согласно с поиск открытого порта, порт 3306 для сервера-нарушителя, по-видимому, закрыт. У меня есть собственные программы на C++ и Java, которые прослушивают произвольные порты без каких-либо проблем. Почему это происходит и как я могу это исправить?

Установлена Ubuntu 11.10 (GNU/Linux 2.6.32-042stab072.10 x86_64)

Результаты netstat -tuple на каждом сервере

Сервер-нарушитель

tcp        0      0 localhost.lo:submission *:*                     LISTEN      root       39967664    -

Рабочий сервер

tcp        0      0 *:mysql                 *:*                     LISTEN      mysql      1847519288  -

Проблема заключалась в том, что сервер прослушивал только внутренне.

Удаление линии bind-address 127.0.0.1 от /etc/mysql/my.cnf решил проблему.

Более новые версии Ubuntu (≥16.04) могут содержать эту строку в /etc/mysql/mysql.conf.d/mysqld.cnf.

Мое предложение, если вы уверены, что порты закрыты (я нахожу странным, что для VPS этот порт закрыт), состоит в том, чтобы изменить конфигурационный файл MySQL на использование другого.

Просто откройте конфигурационный файл в терминале, sudo nano /etc/mysql/mysql.conf, и ищите [mysqld] раздел. В нем найдите строку, которая гласит port = 3306. Измените его на другой неиспользуемый порт и сохраните файл.

Затем просто либо перезапустите VPS, либо перезапустите службу, например sudo service mysql restart.

Просто чтобы отметить, что, если файл mysql.conf это не в том, о котором я упоминал выше, это может быть в других местах:

/etc/my.conf/etc/my.cnf/etc/mysql/my.conf

И если в service команда не работает, тогда сделайте это:

sudo /etc/init.d/mysql restart

Если проблема не устранена, то в моем случае я бы проверил iptables (На самом деле я бы удалил все в iptables просто для того, чтобы начать все сначала, если бы это было возможно) или любой другой вариант с поддержкой брандмауэра.

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

Кроме того, я бы побежал nmap на VPS, чтобы увидеть, какие порты вы открыли. Вам нужно запустить его извне VPS, чтобы увидеть, какие порты они открыли.

netstat -tuplen также неплохо посмотреть, какие открытые порты у вас есть на сервере и какие из них находятся в режиме ПРОСЛУШИВАНИЯ.

Я использую этот метод:

sudo ufw statussudo ufw allow XXXX/tcp# use a port other than the default/predictable 3306# work outside, and close the door when you are donesudo ufw deny XXXX/tcp

Нет необходимости изменять другие файлы конфигурации, и по умолчанию не открываются дополнительные порты.

Я исправил это, изменив bind-address 127.0.0.1 к bind-address 0.0.0.0 в /etc/mysql/mysql.conf.d (так что MySQL прослушивает все порты).

Кроме того, я настроил учетную запись пользователя mysql для удаленного использования (см. https://stackoverflow.com/a/24171107/132374).

Может случиться так, что ваша конфигурация находится в каталоге /etc/mysql/mysql.conf.d/mysqld.cnf, убедитесь, что это не так.