Jak powiązać serwer MySQL z więcej niż jednym adresem IP?


260

Czy istnieje tajny sposób powiązania MySQL z więcej niż jednym adresem IP?

O ile widzę parametr bind-address w pliku my.cnf nie obsługuje więcej niż jednego adresu IP i nie możesz go mieć więcej niż jeden raz.

Odpowiedzi:


242

Nie, nie ma (właśnie sprawdziłem godzinę temu). Możesz skomentować adres powiązania w my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

Jeśli chcesz tylko 2 adresy IP, będziesz musiał użyć zapory.


31
Poprawny. Wiązanie jest ograniczone do 0, 1 lub wszystkich adresów IP na serwerze.
Joe

7
Należy jednak pamiętać, że nie można publikować i obsługiwać zarówno lokalnego gniazda unixowego, jak i sieciowego, określając zarówno opcje, jak socketi bind-address.
danorton

5
wciąż aktualne na dzień dzisiejszy.
Dennis Nolte,

22
To jest absurdalne.
Phillipp,

2
@AJP Mysql traktuje „localhost” i „127.0.0.1” inaczej w systemie uprawnień. Potwierdzono tutaj: plik gniazda Unix jest używany, jeśli nie podasz nazwy hosta lub jeśli podasz specjalną nazwę hosta localhost.
Christian Lescuyer,

78

Powiązanie z wersją 127.0.0.x nie spowoduje, że będzie ona dostępna dla wszystkich urządzeń, udostępni ją tylko lokalnie. Jeśli chcesz udostępnić go wszystkim interfejsom, powinieneś użyć 0.0.0.0. Jeśli chcesz uzyskać do niego dostęp z więcej niż jednego, ale mniej niż ze wszystkich interfejsów, powinieneś połączyć się z 0.0.0.0 i zaporę sieciową z interfejsów, do których nie chcesz uzyskać dostępu.

Ponadto, jako druga warstwa bezpieczeństwa, powinieneś upewnić się, że wszyscy użytkownicy MySQL mają ustawione pole hosta na wartość inną niż% (tj. Dowolny host).


1
Jeśli nie masz uszkodzonego stosu sieciowego, nie możesz powiązać portu TCP z adresem 0.0.0.0.
John Gardeniers,

26
Państwo może wiązać się z 0.0.0.0. Po prostu nie możesz do niego dotrzeć. Jeśli korzystasz z systemu Linux (lub nawet Windows, po prostu zainstaluj netcat dla Windows), spróbuj: w jednym terminalu: nc -l 0.0.0.0 4321, a w drugim terminalu: telnet <IP dowolnego interfejsu twojego komputera> 4321 I to połączy się z tym.
Gray Panther

Jak powiedziałem, chyba że masz zepsuty stos sieci ...
John Gardeniers,

1
@JohnGardeniers Czy dlatego, że to w OD Linux (7) Strona człowiek zdefiniowana pod specjalnymi adresami: INADDR_ANY (0.0.0.0) means any address for binding;?
ebyrob

2
Na Debianie utwórz /etc/mysql/conf.d/bindaddress.cnfplik z zawartością[mysqld] \n bind-address = 0.0.0.0
Yves Martin,

41

Nie można powiązać więcej niż jednego adresu IP, ale zamiast tego można powiązać wszystkie dostępne adresy IP. Jeśli tak, użyj 0.0.0.0adresu powiązania w pliku konfiguracyjnym MySQL (np. /Etc/mysql/my.cnf) w następujący sposób:

bind-address    = 0.0.0.0

Jeśli adres to 0.0.0.0, serwer akceptuje połączenia TCP / IP na wszystkich interfejsach hosta serwera IPv4.

Ponadto, jeśli adres jest ::, serwer akceptuje połączenia TCP / IP na wszystkich interfejsach hosta IPv4 i IPv6 na serwerze. Użyj tego adresu, aby zezwolić zarówno na połączenia IPv4, jak i IPv6 na wszystkich interfejsach serwera.

Możesz też po prostu bind-address=całkowicie skomentować , aby powiązać wszystkie adresy. Ale upewnij się, że nie masz skip-networkingwłączonej opcji w pliku my.cnf, jeśli chcesz również zezwalać na połączenia zdalne (czytaj więcej: MySQL: Zezwalaj na połączenia zdalne ORAZ lokalne ).

Po zmianie adresu powiązania nie zapomnij zrestartować serwera MySQL poprzez:

sudo service mysql restart

W końcu możesz rozważyć uruchomienie wielu instancji MySQL na jednym komputerze (różnych portach) z replikacją Master / Slave. Replikacja umożliwia kopiowanie danych z jednego serwera bazy danych MySQL (master) na co najmniej jeden serwer bazy danych MySQL (slave).

Czytaj więcej:


To działa dobrze. Pamiętaj tylko, aby sprawdzić, czy wszyscy użytkownicy mogą łączyć się z tego drugiego, trzeciego, dowolnego adresu IP
gies0r

21

Nie, nie możesz. Strona, do której prowadzi link, wyraźnie stwierdza:

Adres IP do powiązania. Można wybrać tylko jeden adres. Jeśli ta opcja zostanie podana wiele razy, użyty zostanie ostatni podany adres.

Jeśli nie podano adresu lub wartości 0.0.0.0, serwer nasłuchuje na wszystkich interfejsach.


12

Jak odpowiedzieli inni, nie ma jeszcze sposobu na selektywne powiązanie z więcej niż jednym interfejsem.

Linux ma kilka narzędzi TCP, które to umożliwiają. W tej konfiguracji skonfigurujesz mysql do nasłuchiwania na 127.0.0.1, a następnie użyjesz redir, aby udostępnić go na dowolnych interfejsach.

Używam tego, aby pomóc wirtualnemu gościowi box zobaczyć mysql zainstalowany na maszynie hosta.

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &

Uwaga MySQL> = 8.0.13 pozwala na powiązanie z więcej niż jednym interfejsem.
txyoji


5

W wersjach wcześniejszych niż MySQL 8.0.13 --industadres przyjmuje pojedynczą wartość adresu, która może określać pojedynczy adres IP lub nazwę hosta bez symboli wieloznacznych lub jeden z formatów adresów z symbolami wieloznacznymi, które umożliwiają słuchanie na wielu interfejsach sieciowych (*, 0,0 .0.0 lub: :).

Począwszy od MySQL 8.0.13, --bind-address akceptuje pojedynczą wartość, jak właśnie opisano, lub listę wartości oddzielonych przecinkami. Gdy opcja nazywa listę wielu wartości, każda wartość musi określać pojedynczy adres IP lub nazwę hosta niepoprawnie; żaden nie może określić formatu adresu z symbolem wieloznacznym (*, 0.0.0.0 lub: :).

Źródło: https://dev.mysql.com/doc/refman/8.0/en/server-options.html


3

W pliku my.cnf zmień (zwykle /etc/mysql/my.cnf w systemie Linux lub Windows sprawdź odpowiedź.

bind-address                   = 127.0.0.1

do

bind-address                   = 0.0.0.0

Następnie zrestartuj mysql (w usłudze Ubuntu restart mysql ) w systemie Windows zwykle uruchom ponownie usługę przez Win + R services.msc

0.0.0.0 mówi, aby wiązał się ze wszystkimi dostępnymi adresami IP z portem podanym również w my.cnf

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.