Como vincular o servidor MySQL a mais de um endereço IP?

260

Existe uma maneira secreta de vincular o MySQL a mais de um endereço IP?

Tanto quanto posso ver, o parâmetro bind-address no my.cnf não suporta mais de um IP e você não pode tê-lo mais de uma vez.

BlaM
fonte

Respostas:

242

Não, não existe (acabei de verificar 1 hora atrás). Você pode comentar o endereço de ligação em my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

Se você quiser apenas 2 IPs, precisará usar um firewall.

Christian Lescuyer
fonte
31
Corrigir. A ligação é limitada a 0, 1 ou a todos os endereços IP no servidor.
Joe
7
Observe, no entanto, que você pode publicar e atender um soquete unix local e um soquete de rede especificando as opções sockete bind-address.
Danorton 30/03/12
5
ainda é verdade a partir de hoje.
Dennis Nolte
22
Isso é ridículo.
Phillipp
2
O @AJP Mysql trata 'localhost' e '127.0.0.1' de maneira diferente no sistema de privilégios. Confirmado aqui: Um arquivo de soquete Unix será usado se você não especificar um nome de host ou se especificar o nome de host especial localhost.
Christian Lescuyer
78

A ligação ao 127.0.0.x não o tornará disponível para todos os dispositivos, mas apenas localmente. Se você deseja disponibilizá-lo para todas as interfaces, use 0.0.0.0. Se você deseja acessá-lo a partir de mais de uma, mas menos de todas as interfaces, deve ligar-se ao 0.0.0.0 e fazer o firewall das interfaces pelas quais não deseja acessar.

Além disso, como uma segunda camada de segurança, você deve garantir que todos os usuários do MySQL tenham o campo host definido como algo diferente de% (ou seja, qualquer host).

Pantera Cinza
fonte
1
A menos que você tenha uma pilha de rede quebrada, não poderá vincular uma porta TCP ao endereço 0.0.0.0.
John Gardeniers
26
Você pode ligar para 0.0.0.0. Você simplesmente não pode rotear para ele. Se você estiver no Linux (ou mesmo no Windows, basta instalar o netcat para windows), tente: em um terminal: nc -l 0.0.0.0 4321 e em um segundo terminal: telnet <IP de qualquer interface que seu computador tenha> 4321 irá se conectar a ele.
Grey Panther
Como eu disse, a menos que você tem uma pilha de rede quebrado ...
John Gardeniers
1
@JohnGardeniers É por isso que está na página do manual linux ip (7) definida em endereços especiais INADDR_ANY (0.0.0.0) means any address for binding;:?
Ebyrob
2
No Debian, crie um arquivo /etc/mysql/conf.d/bindaddress.cnfcom conteúdo[mysqld] \n bind-address = 0.0.0.0
Yves Martin
41

Você não pode vincular a mais de um endereço IP, mas pode vincular a todos os endereços IP disponíveis. 0.0.0.0Nesse caso, use apenas um endereço de ligação no seu arquivo de configuração do MySQL (por exemplo, /etc/mysql/my.cnf) da seguinte maneira:

bind-address    = 0.0.0.0

Se o endereço for 0.0.0.0, o servidor aceitará conexões TCP / IP em todas as interfaces IPv4 do host do servidor.

Além disso, se o endereço for ::, o servidor aceita conexões TCP / IP em todas as interfaces IPv4 e IPv6 do host do servidor. Use esse endereço para permitir conexões IPv4 e IPv6 em todas as interfaces do servidor.

Ou você pode simplesmente comentar bind-address=completamente, para que ele se vincule a todos os endereços. Mas certifique-se de que você não skip-networkingativou no my.cnf se também deseja permitir conexões remotas (Leia mais: MySQL: permita conexões remotas e locais ).

Após alterar o endereço de ligação, não se esqueça de reiniciar o servidor MySQL:

sudo service mysql restart

Eventualmente, você pode considerar executar várias instâncias do MySQL em uma única máquina (portas diferentes) com replicação Master / Slave. A replicação permite que os dados de um servidor de banco de dados MySQL (o mestre) sejam copiados para um ou mais servidores de banco de dados MySQL (os escravos).

Consulte Mais informação:

kenorb
fonte
Isso funciona bem. Lembre-se de verificar se todos os usuários têm permissão para se conectar a partir desse segundo, terceiro, qualquer que seja o endereço IP
gies0r
21

Não, você não pode. A página para a qual você vincula afirma claramente:

O endereço IP ao qual ligar. Somente um endereço pode ser selecionado. Se esta opção for especificada várias vezes, o último endereço fornecido será usado.

Se nenhum endereço ou 0.0.0.0 for especificado, o servidor escutará em todas as interfaces.

Andreas
fonte
12

Como outros responderam, ainda não há como vincular seletivamente a mais de uma interface.

O Linux possui algumas ferramentas TCP que tornam possível. Nesta configuração, você configuraria o mysql para ouvir em 127.0.0.1 e depois usaria o redirecionamento para expô-lo em interfaces arbitrárias.

Eu tenho usado isso para ajudar um convidado de caixa virtual a ver o mysql instalado na máquina host.

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &
txyoji
fonte
Nota MySQL> = 8.0.13 permite a ligação a mais de uma interface.
txyoji 21/06
6

Acho que sua pergunta está relacionada a este bug http://bugs.mysql.com/bug.php?id=14979 O relatório de bug sugere alguma solução alternativa.


fonte
Uma solicitação de recurso do MySQL que data de 2005!
Tonin
5

Antes do MySQL 8.0.13, --bind-address aceita um único valor de endereço, que pode especificar um único endereço IP sem curinga ou nome de host ou um dos formatos de endereço curinga que permitem escutar em várias interfaces de rede (*, 0,0 .0.0 ou: :).

A partir do MySQL 8.0.13, --bind-address aceita um valor único, conforme descrito acima, ou uma lista de valores separados por vírgula. Quando a opção nomeia uma lista de vários valores, cada valor deve especificar um único endereço IP ou um nome de host sem curinga; nenhum pode especificar um formato de endereço curinga (*, 0.0.0.0 ou: :).

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

Tadej
fonte
3

Na mudança my.cnf (geralmente /etc/mysql/my.cnf no Linux ou no Windows, verifique esta resposta.

bind-address                   = 127.0.0.1

para

bind-address                   = 0.0.0.0

Em seguida, reinicie o mysql (no serviço Ubuntu , reinicie o mysql ) no Windows, em geral, reinicie o serviço através do Win + R services.msc

0.0.0.0 diz para ligar a todos os IPs disponíveis com a porta também fornecida em my.cnf

Aleksandar Pavić
fonte