MySQL lehnt es ab, Remoteverbindungen zu akzeptieren

12

Ich habe gerade einen neuen Ubuntu-Server mit MySQL (Percona 5.5) installiert, der jedoch keine Verbindungen von Remote-Hosts akzeptiert

Folgendes passiert, wenn ich versuche, eine Remoteverbindung zu diesem Server herzustellen:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Als ich überprüfte, ob MySQL Remoteverbindungen abhört, sah ich Folgendes:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Wie Sie sehen können, 127.0.0.1:3306heißt es "Ich akzeptiere nur lokale Verbindungen".

Ich habe meine skip_networkingund bind-addressVariablen überprüft - alles ist ausgeschaltet:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

Ich habe einen anderen Server mit absolut der gleichen Konfiguration und es funktioniert großartig:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

Was kann der Grund dafür sein? Wie kann ich MySQL auf Remoteverbindungen reagieren lassen?

Temnovit
quelle
Beachten Sie, dass die Variable bind_addresserst seit Version 5.6 verfügbar ist ( bugs.mysql.com/bug.php?id=44355 ), sodass in Version 5.5 ein leerer Satz zurückgegeben wird, auch wenn dieser festgelegt ist.
Fälscher
Zeigen Sie uns Ihre my.cnf-Einstellungen.
user9517
Haben Sie nach Problemen außerhalb von mySQL gesucht, z. B. nach einer Firewall oder einem Routing-Problem?
Stese

Antworten:

20

Versuchen Sie bind-address = 0.0.0.0, Ihren [mysqld]Abschnitt zu erweitern my.cnfund mysqld neu zu starten .

Guido Vaccarella
quelle
2
Die Datei ist bei/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo
Meins war in /etc/my.cnf.d/bind-addr.cnf
Joseph
0

Dies könnte an der Benutzertabelle der MySQL-Datenbank liegen (verwenden Sie MySQL; show tables;). Wenn die Bindung an 0.0.0.0 für Sie nicht funktioniert, geben Sie Ihrem Benutzer den Host '%' anstelle von 'localhost' in dieser Tabelle.

Versuchen Sie beispielsweise, einen Benutzer wie folgt zu erstellen:

CREATE USER yourusername @ '%' IDENTIFIZIERT DURCH 'yourpassword'

Ameise versuchen, sich mit diesem Benutzer zu verbinden.

periket2000
quelle
3
Eine verweigerte Verbindung bedeutet im Allgemeinen, dass der relevante IP: -Port nicht überwacht wird.
user9517
Es stimmt, ich wurde von "Kann keine Verbindung zum MySQL-Server herstellen" geflasht, ich erinnere mich nicht an das Telnet. Es tut uns leid.
Periket2000
"Kann keine Verbindung zu MySQL herstellen" stammt nicht von einem Privileg, das einem Benutzer nicht zur Verfügung steht. Es handelt sich um ein {IP: Port} -Paar, das bei einem Verbindungsversuch nicht übereinstimmt.
Fabien Haddadi
0

Wenn alles andere fehlschlägt und Sie sicher sind, dass der Server den Standardport überwacht und Sie versuchen, verzweifelt von einem anderen Host aus eine Verbindung mit dem MySQL-Client herzustellen, versuchen Sie, den Port in der URL des MySQL-Befehls anzugeben.

Seltsamerweise musste ich die folgende Syntax verwenden:

mysql -h someHost --port=3306 -u someUser -p someDb

Ich habe dies (Fehler?) Ganz zufällig gefunden (nachdem ich meine Haare verloren habe :)).

Mein Setup: Debian Jessie, frisches MySQL 5.7.18, Benutzer / Datenbank erstellt, Bindungsadresse auskommentiert, MySQL neu gestartet

Ondrej
quelle
Eine rationale Erklärung ist, dass der someHost MySQL-Server tatsächlich 3306 abhört, wie die --port-Direktive zeigt. Ihre MySQL-Client-Binärdatei stammt jedoch aus der MariaDB-Version. Daher wird standardmäßig Port 3307 verwendet, sofern nicht anders angegeben. Überprüfen Sie den Ursprung der von Ihnen verwendeten MySQL-Client-Binärdatei. Tipp: Überprüfen Sie auch Ihre PATH-Umgebungsvariable ...
Fabien Haddadi
0

Ich hatte gerade dieses Problem und mein Problem schien mit der Firewall zu tun zu haben. Übrigens - Vielen Dank an @Temnovit für die MySQL-Befehle zur Fehlerbehebung.

Ich habe netstat verwendet, um festzustellen, ob der Server ausgeführt wird und sich am richtigen Port befindet. Mit einem einfachen Telnet-Befehl konnte ich auch feststellen, dass mein Server keine Verbindungen an diesem Port akzeptiert.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Nach einer weiteren hilfreichen Antwort auf Fedora-Firewall-Befehle konnte ich die richtigen Ports öffnen.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Mein Telnet-Befehl war dann erfolgreich.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Wenn Sie immer noch Probleme haben, liegt wahrscheinlich ein Problem mit den Benutzerberechtigungen vor.

Eric Fossum
quelle
0

Ich habe mariadbinstalliert. Die soulution war das zu ändern , bind-addresssich an/etc/mysql/mariadb.conf.d/50-server.cnf

Alex Balcome
quelle
-1

Die im folgenden Link beschriebene Lösung sollte Ihr Problem lösen: http://www.debianhelp.co.uk/remotemysql.htm

bml13
quelle
2
bml13, das Zitieren eines Links zur Unterstützung Ihrer Antwort ist eine ausgezeichnete Praxis, aber wir bevorzugen es sehr, dass die Leute die Antwort hier schreiben und einen Link hinzufügen, nicht nur den Link setzen und dabei belassen.
MadHatter
1
... vor allem, weil das jetzt eine tote Verbindung ist.
Haz