MySQL 서버를 둘 이상의 IP 주소에 바인딩하는 방법은 무엇입니까?


260

MySQL을 둘 이상의 IP 주소에 바인딩하는 비밀 방법이 있습니까?

내가 알 수 있는 한 my.cnf 의 bind-address 매개 변수는 둘 이상의 IP를 지원하지 않으며 두 번 이상 가질 수 없습니다.

답변:


242

아니요, 없습니다 (방금 1 시간 전에 확인했습니다). my.cnf에서 바인드 주소를 주석 처리 할 수 ​​있습니다.

#skip-networking
#bind-address                   = 127.0.0.1

2 개의 IP 만 원하면 방화벽을 사용해야합니다.


31
옳은. 바인딩은 서버의 0, 1 또는 모든 IP 주소 로 제한됩니다 .
Joe

7
그러나 socketbind-address옵션을 모두 지정하여 로컬 유닉스 소켓과 네트워크 소켓을 모두 게시하고 제공 할 수 있습니다.
danorton

5
오늘날도 여전히 그렇습니다.
Dennis Nolte

22
말도 안돼.
Phillipp

2
@AJP Mysql은 권한 시스템에서 'localhost'와 '127.0.0.1'을 다르게 취급합니다. 여기서 확인 : 호스트 이름을 지정하지 않거나 특수 호스트 이름 localhost를 지정하면 Unix 소켓 파일이 사용됩니다.
Christian Lescuyer

78

127.0.0.x에 바인딩하면 모든 장치에서 사용할 수 없으며 로컬에서만 사용할 수 있습니다. 모든 인터페이스에서 사용 가능하게하려면 0.0.0.0을 사용해야합니다. 둘 이상의 인터페이스에서 액세스하고 모든 인터페이스보다 적은 인터페이스에 액세스하려면 0.0.0.0에 바인딩하고 액세스하지 않으려는 인터페이스를 방화벽으로 차단해야합니다.

또한 두 번째 보안 계층으로 모든 MySQL 사용자가 호스트 필드를 % 이외의 호스트 필드로 설정했는지 확인해야합니다 (예 : 모든 호스트).


1
네트워크 스택이 끊어지지 않으면 TCP 포트를 0.0.0.0 주소로 바인딩 할 수 없습니다.
John Gardeniers

26
0.0.0.0에 바인딩 할 수 있습니다 . 당신은 그것에 라우팅 할 수 없습니다. Linux (또는 Windows의 경우 Windows 용 netcat 만 설치) 인 경우 한 터미널 : nc -l 0.0.0.0 4321 및 두 번째 터미널 : telnet <컴퓨터의 모든 인터페이스의 IP> 4321 및 다음을 시도하십시오. 그것에 연결됩니다.
그레이 표범

내가 말했듯이, 당신은 깨진 네트워크 스택 ...하지 않는 한
존 Gardeniers

1
@JohnGardeniers 그것이 특별한 주소 아래 정의 된 linux ip (7) 매뉴얼 페이지에있는 이유는 INADDR_ANY (0.0.0.0) means any address for binding;무엇입니까?
ebyrob

2
데비안에서 /etc/mysql/conf.d/bindaddress.cnf컨텐츠 가 포함 된 파일 파일 만들기[mysqld] \n bind-address = 0.0.0.0
Yves Martin

41

둘 이상의 IP 주소에는 바인딩 할 수 없지만 사용 가능한 모든 IP 주소에는 바인딩 할 수 있습니다. 그렇다면 0.0.0.0다음과 같이 MySQL 구성 파일 (예 : /etc/mysql/my.cnf)에 바인딩 주소를 사용하십시오.

bind-address    = 0.0.0.0

주소가 0.0.0.0이면 서버는 모든 서버 호스트 IPv4 인터페이스에서 TCP / IP 연결을 수락합니다.

또한 주소가 ::인 경우 서버는 모든 서버 호스트 IPv4 및 IPv6 인터페이스에서 TCP / IP 연결을 수락합니다. 모든 서버 인터페이스에서 IPv4 및 IPv6 연결을 모두 허용하려면이 주소를 사용하십시오.

또는 단순히 bind-address=전체적으로 주석을 달 수 있으므로 모든 주소에 바인딩됩니다. 그러나 skip-networking원격 연결도 허용하려면 my.cnf에서 활성화 하지 않았는지 확인하십시오 (더 읽기 : MySQL : 원격 및 로컬 연결 모두 허용 ).

바인딩 주소를 변경 한 후 다음을 수행하여 MySQL 서버를 다시 시작하십시오.

sudo service mysql restart

결국 마스터 / 슬레이브 복제를 사용하여 단일 머신 (다른 포트)에서 여러 개의 MySQL 인스턴스를 실행하는 것을 고려할 수 있습니다. 복제를 통해 하나의 MySQL 데이터베이스 서버 (마스터)의 데이터를 하나 이상의 MySQL 데이터베이스 서버 (슬레이브)로 복사 할 수 있습니다.

더 읽어보기 :


이것은 잘 작동합니다. 모든 사용자가 두 번째, 세 번째 IP 주소에서 연결할 수 있는지 확인하십시오
gies0r

21

아니 당신은 할 수 없습니다. 링크 된 페이지는 다음과 같이 명확하게 나타납니다.

바인딩 할 IP 주소입니다. 하나의 주소 만 선택할 수 있습니다. 이 옵션을 여러 번 지정하면 마지막으로 지정된 주소가 사용됩니다.

주소 나 0.0.0.0을 지정하지 않으면 서버는 모든 인터페이스에서 수신합니다.


12

다른 사람들이 대답했듯이 아직 여러 인터페이스에 선택적으로 바인딩 할 수있는 방법이 없습니다.

리눅스에는 가능한 TCP 툴이 있습니다. 이 설정에서는 127.0.0.1에서 수신 대기하도록 mysql을 구성한 다음 redir 을 사용 하여 임의 인터페이스에 노출시킵니다.

나는 이것을 사용하여 가상 상자 손님이 호스트 컴퓨터에 설치된 mysql을 볼 수 있도록 도와주었습니다.

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

참고 MySQL> = 8.0.13을 사용하면 둘 이상의 인터페이스에 바인딩 할 수 있습니다.
txyoji

6

귀하의 질문은이 버그와 관련이 있다고 생각합니다 http://bugs.mysql.com/bug.php?id=14979 버그 보고서는 몇 가지 해결 방법을 제안합니다.


2005 년부터 시작된 MySQL 기능 요청!
Tonin

5

MySQL 8.0.13 이전에 --bind-address는 단일 주소 값을 허용합니다. 단일 주소 값은 단일 비 와일드 카드 IP 주소 또는 호스트 이름 또는 여러 네트워크 인터페이스 (*, 0.0에서 청취 할 수있는 와일드 카드 주소 형식 중 하나)를 지정할 수 있습니다. .0.0 또는 : :).

MySQL 8.0.13부터 --bind-address는 방금 설명한 단일 값 또는 쉼표로 구분 된 값 목록을 허용합니다. 옵션이 여러 값의 목록 이름을 지정할 때 각 값은 하나의 비 와일드 카드 IP 주소 또는 호스트 이름을 지정해야합니다. 와일드 카드 주소 형식 (*, 0.0.0.0 또는 : :)을 지정할 수 없습니다.

출처 : https://dev.mysql.com/doc/refman/8.0/en/server-options.html


3

에서 my.cnf의 변화 (일반적으로 리눅스에 /etc/mysql/my.cnf 또는 Windows 확인 대답을.

bind-address                   = 127.0.0.1

bind-address                   = 0.0.0.0

그런 다음 Windows 에서 mysql (Ubuntu 서비스 mysql restart )을 일반적으로 Win + R 서비스를 통해 다시 시작하십시오.

0.0.0.0은 my.cnf에 제공된 포트로 사용 가능한 모든 IP에 바인딩하도록 지시합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.