Порт 3306 на моем сервере Ubuntu закрыт

33

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

'Mytestuser' @ '%'

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

Ubuntu установлен 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  -
Энди
источник

Ответы:

76

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

Удаление строки bind-address 127.0.0.1из /etc/mysql/my.cnfрешенного вопроса.

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

Энди
источник
2
Это сработало для меня. Обратите внимание, правильное имя файла /etc/mysql/my.cnfнет /etc/mysql/my.conf.
Ларри Битва
Я изменил свой bind-адрес, чтобы он соответствовал внешнему IP-адресу сервера, и это сработало для меня.
Баттл Буткус
Удалите строку полностью, и сервер будет слушать ВСЕ интерфейсы
s1mmel
Вы спасли мой день, пытаясь решить эту проблему в течение пары недель, спасибо!
budiantoip
9

Мое предложение, если вы уверены, что порты закрыты (я нахожу странным, что 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, чтобы узнать, есть ли у нее опция, которая может блокировать порты.

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

netstat -tuplen Также полезно посмотреть, какие открытые порты у вас на сервере, а какие находятся в режиме LISTEN.

Луис Альварадо
источник
Эй, я попробовал его на другом порту, и он все еще не работает, я также попробовал 'iptables -A INPUT -i eth0 -p tcp -m tcp --dport PORT -j ПРИНЯТЬ', но не повезло :( .. редактировать его нет o eth0 .. может все еще иметь надежду
Энди
@ Энди Обновленный ответ, чтобы включить еще несколько предложений.
Луис Альварадо
Спасибо за предложения, Луис, я посмотрю на это.
Энди
Я обновил результаты netstat -tuple к вопросу. Похоже, здесь есть проблема.
Энди
6

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

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

Джон Онстотт
источник
6

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

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

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

ftcosta
источник
sudo ufw allow 3306/tcpЯ пытался редактировать, но не позволил мне
Адам
1

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

зима
источник
1
Я пытался понять это примерно три часа, прежде чем увидел это, спасибо!
Оливер Ни