Wie binde ich einen MySQL-Server an mehr als eine IP-Adresse?

260

Gibt es eine geheime Möglichkeit, MySQL an mehrere IP-Adressen zu binden?

Soweit ich sehen kann, unterstützt der Parameter bind-address in der my.cnf nicht mehr als eine IP und Sie können ihn nur einmal haben.

BlaM
quelle

Antworten:

242

Nein, gibt es nicht (ich habe gerade vor 1 Stunde nachgesehen). Sie können die Bindeadresse in my.cnf kommentieren:

#skip-networking
#bind-address                   = 127.0.0.1

Wenn Sie nur 2 IPs möchten, müssen Sie eine Firewall verwenden.

Christian Lescuyer
quelle
31
Richtig. Die Bindung ist entweder auf 0, 1 oder alle IP-Adressen auf dem Server beschränkt.
Joe
7
Beachten Sie jedoch, dass Sie sowohl einen lokalen Unix-Socket als auch einen Netzwerk-Socket veröffentlichen und bereitstellen können, indem Sie die Optionen socketund bind-addressangeben.
Danorton
5
noch heute wahr.
Dennis Nolte
22
Das ist lächerlich.
Phillipp
2
@AJP Mysql behandelt 'localhost' und '127.0.0.1' im Berechtigungssystem unterschiedlich. Bestätigt hier: Eine Unix-Socket-Datei wird verwendet, wenn Sie keinen Hostnamen oder den speziellen Hostnamen localhost angeben.
Christian Lescuyer
78

Durch das Binden an 127.0.0.x wird es nicht für alle Geräte verfügbar, sondern nur lokal. Wenn Sie es allen Schnittstellen zur Verfügung stellen möchten, sollten Sie 0.0.0.0 verwenden. Wenn Sie von mehr als einer, aber weniger als allen Schnittstellen darauf zugreifen möchten, sollten Sie eine Bindung zu 0.0.0.0 herstellen und die Schnittstellen, über die nicht zugegriffen werden soll, von der Firewall trennen.

Als zweite Sicherheitsebene sollten Sie außerdem sicherstellen, dass für alle MySQL-Benutzer im Feld host ein anderer Wert als% (dh ein beliebiger Host) festgelegt ist.

Grauer Panther
quelle
1
Solange Sie keinen fehlerhaften Netzwerkstapel haben, können Sie keinen TCP-Port an die Adresse 0.0.0.0 binden.
John Gardeniers
26
Sie können an 0.0.0.0 binden. Man kann einfach nicht dorthin gelangen. Wenn Sie unter Linux arbeiten (oder sogar unter Windows, installieren Sie einfach netcat für Windows), versuchen Sie Folgendes: In einem Terminal: nc -l 0.0.0.0 4321 und in einem zweiten Terminal: telnet <IP einer Schnittstelle Ihres Computers> 4321 Und es wird eine Verbindung herstellen.
Grey Panther
Wie gesagt, es sei denn, Sie haben einen defekten Netzwerkstapel ...
John Gardeniers
1
@JohnGardeniers Ist das der Grund ist es in dem Linux - IP (7) man - Seite unter besonderen Adressen definiert: INADDR_ANY (0.0.0.0) means any address for binding;?
Ebyrob
2
Erstellen Sie unter Debian eine Datei /etc/mysql/conf.d/bindaddress.cnfmit Inhalt[mysqld] \n bind-address = 0.0.0.0
Yves Martin
41

Sie können nicht an mehr als eine IP-Adresse binden, sondern an alle verfügbaren IP-Adressen. Wenn ja, verwenden Sie einfach 0.0.0.0für eine verbindliche Adresse in Ihrer MySQL-Konfigurationsdatei (z. B. /etc/mysql/my.cnf) Folgendes:

bind-address    = 0.0.0.0

Wenn die Adresse 0.0.0.0 lautet, akzeptiert der Server TCP / IP-Verbindungen auf allen IPv4-Schnittstellen des Serverhosts.

Wenn die Adresse lautet ::, akzeptiert der Server TCP / IP-Verbindungen auf allen IPv4- und IPv6-Schnittstellen des Serverhosts. Verwenden Sie diese Adresse, um sowohl IPv4- als auch IPv6-Verbindungen auf allen Serverschnittstellen zuzulassen.

Oder Sie können einfach bind-address=alles auskommentieren, damit es an alle Adressen gebunden wird. skip-networkingStellen Sie jedoch sicher, dass Sie in Ihrer my.cnf nicht aktiviert haben, wenn Sie auch Remoteverbindungen zulassen möchten (Weitere Informationen: MySQL: Sowohl Remoteverbindungen als auch lokale Verbindungen zulassen ).

Vergessen Sie nach dem Ändern der Bindungsadresse nicht, Ihren MySQL-Server neu zu starten:

sudo service mysql restart

Schließlich können Sie in Betracht ziehen, mehrere Instanzen von MySQL auf einem einzelnen Computer (verschiedenen Ports) mit Master / Slave-Replikation auszuführen. Durch die Replikation können Daten von einem MySQL-Datenbankserver (dem Master) auf einen oder mehrere MySQL-Datenbankserver (die Slaves) kopiert werden.

Weiterlesen:

Kenorb
quelle
Das funktioniert gut. Denken Sie daran, zu überprüfen, ob alle Benutzer von diesem 2., 3., unabhängig von der IP-Adresse, eine Verbindung herstellen dürfen
gies0r
21

Nein, du kannst nicht. Die Seite, auf die Sie verlinken, enthält folgende Angaben:

Die IP-Adresse, an die gebunden werden soll. Es kann nur eine Adresse ausgewählt werden. Wenn diese Option mehrmals angegeben wird, wird die zuletzt angegebene Adresse verwendet.

Wenn keine Adresse oder 0.0.0.0 angegeben ist, überwacht der Server alle Schnittstellen.

Andreas
quelle
12

Wie andere geantwortet haben, gibt es noch keine Möglichkeit, sich selektiv an mehr als eine Schnittstelle zu binden.

Linux hat einige TCP-Tools, die dies ermöglichen. In diesem Setup konfigurieren Sie mysql so, dass es 127.0.0.1 abhört , und verwenden dann Redir , um es auf beliebigen Schnittstellen verfügbar zu machen.

Ich habe dies verwendet, um einem virtuellen Box-Gast zu helfen, zu sehen, wie MySQL auf dem Hostcomputer installiert ist.

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &
txyoji
quelle
Hinweis MySQL> = 8.0.13 ermöglicht das Binden an mehr als eine Schnittstelle.
Txyoji
6

Ich denke, Ihre Frage hängt mit diesem Fehler zusammen. Http://bugs.mysql.com/bug.php?id=14979 Der Fehlerbericht schlägt eine Problemumgehung vor.


quelle
Eine MySQL-Feature-Anfrage aus dem Jahr 2005!
Tonin
5

Vor MySQL 8.0.13 akzeptiert --bind-address einen einzelnen Adresswert, der eine einzelne Nicht-Platzhalter-IP-Adresse oder einen Hostnamen oder eines der Platzhalter-Adressformate angeben kann, die das Abhören mehrerer Netzwerkschnittstellen ermöglichen (*, 0.0 .0.0 oder: :).

Ab MySQL 8.0.13 akzeptiert --bind-address einen einzelnen Wert wie oben beschrieben oder eine Liste von durch Kommas getrennten Werten. Wenn die Option eine Liste mit mehreren Werten benennt, muss jeder Wert eine einzelne Nicht-Platzhalter-IP-Adresse oder einen Hostnamen angeben. Keiner kann ein Platzhalteradressformat (*, 0.0.0.0 oder: :) angeben.

Quelle: https://dev.mysql.com/doc/refman/8.0/de/server-options.html

Tadej
quelle
3

In my.cnf change (normalerweise /etc/mysql/my.cnf unter Linux oder für Windows) überprüfen Sie diese Antwort.

bind-address                   = 127.0.0.1

zu

bind-address                   = 0.0.0.0

Starten Sie dann mysql (unter Ubuntu- Dienst mysql restart ) unter Windows neu. Starten Sie den Dienst normalerweise über Win + R services.msc neu

0.0.0.0 weist es an, an alle verfügbaren IPs mit dem ebenfalls in my.cnf angegebenen Port zu binden

Aleksandar Pavić
quelle