Le port 3306 semble être fermé sur mon serveur Ubuntu

33

J'ai deux serveurs VPS , et MySQL est installé sur les deux serveurs, un pour les tests et un pour le développement. Un de mes serveurs ne me laissera pas me connecter de l'extérieur. Avec l'utilisateur;

'mytestuser' @ '%'

Selon un détecteur de port ouvert , le port 3306 du serveur incriminé semble être fermé. J'ai des programmes C ++ et Java de ma propre écoute sur des ports arbitraires sans aucun problème. Pourquoi cela se produit-il et comment puis-je le réparer?

Ubuntu installé est Ubuntu 11.10 (GNU / Linux 2.6.32-042stab072.10 x86_64)

Résultats de netstat -tuplesur chaque serveur

Serveur offensant

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

Serveur de travail

tcp        0      0 *:mysql                 *:*                     LISTEN      mysql      1847519288  -
Andy
la source

Réponses:

76

Le problème était que le serveur n'écoutait qu'en interne.

Supprimer la ligne bind-address 127.0.0.1de /etc/mysql/my.cnfrésolu le problème.

Les versions les plus récentes d’Ubuntu (≥16.04) peuvent avoir cette ligne dans /etc/mysql/mysql.conf.d/mysqld.cnf.

Andy
la source
2
Cela a fonctionné pour moi. Notez que le nom de fichier correct est /etc/mysql/my.cnf, pas /etc/mysql/my.conf.
Larry Battle
J'ai changé mon adresse de lien pour correspondre à l'adresse IP externe du serveur et cela a fonctionné pour moi.
Buttle Butkus
Supprimez complètement la ligne et le serveur écoutera TOUTES les interfaces
s1mmel
Tu as sauvé ma journée, essayant de résoudre ce problème depuis quelques semaines, merci!
budiantoip
9

Ma suggestion, si vous êtes sûr que les ports sont fermés (je trouve ça bizarre pour un VPS de fermer ce port) est de changer le fichier de configuration de MySQL pour en utiliser un autre.

Ouvrez simplement le fichier de configuration dans le terminal sudo nano /etc/mysql/mysql.conf, et recherchez la [mysqld]section. Dans ce document , recherchez la ligne qui lit port = 3306. Changez-le sur un autre port non utilisé et enregistrez le fichier.

Ensuite, redémarrez simplement le SMV ou redémarrez le service, comme sudo service mysql restart.

Juste pour noter que, si le fichier mysql.confne se trouve pas dans celui que j'ai mentionné ci-dessus, il se peut que ce soit dans cet autre endroit:

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

Et si la servicecommande ne fonctionne pas, procédez comme suit:

sudo /etc/init.d/mysql restart

Si le problème persiste, dans mon cas, je vérifierai iptables (je supprimerais tout ce qui se trouve dans iptables juste pour recommencer à zéro si cela pouvait être une option) ou toute autre option activée pour le pare-feu.

Puisqu'ils sont VPS, je voudrais également vérifier le panneau de configuration VPS pour voir s'il a une option qui peut bloquer les ports.

En dehors de cela, je courrais nmapsur le VPS pour voir quels ports vous avez ouverts. Vous devez l'exécuter depuis l'extérieur du VPS pour voir quels ports ils ont ouverts.

netstat -tuplen C'est aussi une bonne idée de voir quels ports ouverts vous avez sur le serveur et lesquels sont en mode LISTEN.

Luis Alvarado
la source
Hé, je l'ai essayé sur un autre port et il me manque toujours de se comporter, j'ai aussi essayé 'iptables -A INPUT -i eth0 -p tcp -m tcp --dport PORT -j ACCEPT' mais pas de chance :( .. modifier je ne suis pas o eth0 .. pourrait toujours avoir de l'espoir
Andy
@Andy Réponse mise à jour pour inclure quelques suggestions supplémentaires.
Luis Alvarado
Merci pour les suggestions Luis je vais examiner cela.
Andy
J'ai mis à jour les résultats de netstat -tuple à la question. On dirait qu'il y a un problème ici.
Andy
6

J'ai corrigé cela en passant bind-address 127.0.0.1à bind-address 0.0.0.0in /etc/mysql/mysql.conf.d(pour que MySQL écoute sur tous les ports).

De plus, j'ai configuré un compte utilisateur mysql à utiliser à distance (voir https://stackoverflow.com/a/24171107/132374 ).

Jon Onstott
la source
6

J'utilise cette méthode:

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

Pas besoin de changer d'autres fichiers de configuration, et pas de ports supplémentaires ouverts par défaut.

ftcosta
la source
sudo ufw allow 3306/tcpJ'ai essayé d'éditer mais je ne voulais pas me laisser faire
Adam
1

Il peut arriver que votre configuration se trouve dans le répertoire /etc/mysql/mysql.conf.d/mysqld.cnf, vérifiez si ce n'est pas le cas.

hiver
la source
1
J'essayais de comprendre pendant environ trois heures avant de voir ceci, merci!
Oliver Ni