Port 3306 wydaje się być zamknięty na moim serwerze Ubuntu

33

Mam dwa serwery VPS i oba mają zainstalowany MySQL , jeden do testowania, a drugi do programowania. Jeden z moich serwerów nie pozwala mi łączyć się z zewnątrz. Z użytkownikiem;

„mytestuser” @ '% ”

Według wyszukiwarki portów otwartych port 3306 dla serwera naruszającego protokół wydaje się być zamknięty. Mam własne programy C ++ i Java nasłuchujące na dowolnych portach bez żadnych problemów. Dlaczego tak się dzieje i jak mogę to naprawić?

Zainstalowanym Ubuntu jest Ubuntu 11.10 (GNU / Linux 2.6.32-042stab072.10 x86_64)

Wyniki netstat -tuplena każdym serwerze

Obrażający serwer

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

Serwer działający

tcp        0      0 *:mysql                 *:*                     LISTEN      mysql      1847519288  -
Andy
źródło

Odpowiedzi:

76

Problem polegał na tym, że serwer nasłuchiwał tylko wewnętrznie.

Usunięcie linii bind-address 127.0.0.1z /etc/mysql/my.cnfrozwiązanego problemu.

Nowsze wersje Ubuntu (≥16.04) mogą mieć tę linię /etc/mysql/mysql.conf.d/mysqld.cnf.

Andy
źródło
2
To zadziałało dla mnie. Uwaga: poprawna nazwa pliku to /etc/mysql/my.cnfnie /etc/mysql/my.conf.
Larry Battle
Zmieniłem adres powiązania, aby dopasować go do zewnętrznego adresu IP serwera i to działało dla mnie.
Buttle Butkus
Usuń linię całkowicie, a serwer będzie nasłuchiwał WSZYSTKICH interfejsów
s1mmel
Uratowałeś mi dzień, próbujesz rozwiązać ten problem przez kilka tygodni, dzięki!
budiantoip
9

Moja sugestia, jeśli jesteś pewien, że porty są zamknięte (uważam za dziwne, że VPS ma ten port zamknięty), to zmień plik konfiguracyjny MySQL, aby użyć innego.

Wystarczy otworzyć plik konfiguracyjny w terminalu sudo nano /etc/mysql/mysql.confi poszukać [mysqld]sekcji. W nim poszukaj linii, która czyta port = 3306. Zmień na inny niewykorzystany port i zapisz plik.

Następnie po prostu zrestartuj VPS lub ponownie uruchom usługę, np sudo service mysql restart.

Należy zauważyć, że jeśli plik mysql.confnie znajduje się w tym, o którym wspomniałem powyżej, może znajdować się w innych miejscach:

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

A jeśli servicepolecenie nie działa, zrób to:

sudo /etc/init.d/mysql restart

Jeśli problem będzie się powtarzał, w moim przypadku sprawdziłbym iptables (tak naprawdę usunęłbym wszystko z iptables tylko po to, żeby zacząć od nowa, jeśli może to być opcja) lub inną opcję z włączoną zaporą ogniową.

Ponieważ są to VPS, sprawdziłbym również Panel sterowania VPS, aby sprawdzić, czy ma jakąkolwiek opcję blokującą porty.

Poza tym działałbym nmapna VPS, aby zobaczyć, które porty zostały otwarte. Musisz uruchomić go spoza VPS, aby zobaczyć, które porty zostały otwarte.

netstat -tuplen dobrym pomysłem jest również sprawdzenie, jakie otwarte porty masz na serwerze, a które w trybie LISTEN.

Luis Alvarado
źródło
Hej, próbowałem go na innym porcie i nadal nie działa, próbowałem też „iptables -A WEJŚCIE -i eth0 -p tcp -m tcp - port PORT -j AKCEPTUJ”, ale bez powodzenia :( .. edytuj im nie o eth0 .. może wciąż mieć nadzieję
Andy
@Andy Zaktualizowana odpowiedź w celu uwzględnienia dodatkowych sugestii.
Luis Alvarado,
Dziękuję za sugestie Luis. Zajmę się tym.
Andy,
Zaktualizowałem wyniki polecenia netstat -tuple do pytania. Wygląda na to, że jest tu problem.
Andy,
6

Naprawiłem to, zmieniając bind-address 127.0.0.1na bind-address 0.0.0.0in /etc/mysql/mysql.conf.d(aby MySQL nasłuchiwał na wszystkich portach).

Ponadto skonfigurowałem konto użytkownika mysql, aby mogło być używane zdalnie (patrz https://stackoverflow.com/a/24171107/132374 ).

Jon Onstott
źródło
6

Używam tej metody:

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

Nie trzeba zmieniać innych plików konfiguracyjnych ani domyślnie otwierać żadnych dodatkowych portów.

ftcosta
źródło
sudo ufw allow 3306/tcpPróbowałem edytować, ale nie pozwoliłem
Adam
1

Może się zdarzyć, że Twoja konfiguracja znajduje się w katalogu /etc/mysql/mysql.conf.d/mysqld.cnf, sprawdź, czy tak nie jest.

zimowy
źródło
1
Próbowałem to rozgryźć przez około trzy godziny, zanim to zobaczyłem, dzięki!
Oliver Ni