¿Cómo vincular el servidor MySQL a más de una dirección IP?

260

¿Hay alguna forma secreta de vincular MySQL a más de una dirección IP?

Hasta donde puedo ver, el parámetro bind-address en my.cnf no admite más de una IP y no puede tenerlo más de una vez.

BlaM
fuente

Respuestas:

242

No, no lo hay (acabo de comprobarlo hace 1 hora). Puede comentar la dirección de enlace en my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

Si solo desea 2 IP, deberá usar un firewall.

Christian Lescuyer
fuente
31
Correcto. El enlace está limitado a 0, 1 o todas las direcciones IP en el servidor.
Joe
77
Sin embargo, tenga en cuenta que puede publicar y servir tanto un socket de Unix local como un socket de red especificando las opciones sockety bind-address.
danorton
55
sigue siendo cierto a partir de hoy.
Dennis Nolte
22
Eso es ridículo.
Phillipp
2
@AJP Mysql trata 'localhost' y '127.0.0.1' de manera diferente en el sistema de privilegios. Confirmado aquí: se utiliza un archivo de socket Unix si no especifica un nombre de host o si especifica el nombre de host especial localhost.
Christian Lescuyer
78

El enlace a 127.0.0.x no lo hará disponible para todos los dispositivos, lo hará disponible solo localmente. Si desea que esté disponible para todas las interfaces, debe usar 0.0.0.0. Si desea acceder desde más de una, pero desde menos de todas las interfaces, debe vincular a 0.0.0.0 y cortafuegos de las interfaces a las que no desea acceder.

Además, como segunda capa de seguridad, debe asegurarse de que todos los usuarios de MySQL tengan un campo de host configurado en algo diferente a% (es decir, cualquier host).

Pantera gris
fuente
1
A menos que tenga una pila de red rota, no puede vincular un puerto TCP a la dirección 0.0.0.0.
John Gardeniers
26
Usted puede unirse a 0.0.0.0. Simplemente no puedes dirigirte a él. Si está en Linux (o incluso en Windows, simplemente instale netcat para Windows) intente: en un terminal: nc -l 0.0.0.0 4321 y en un segundo terminal: telnet <IP de cualquier interfaz que tenga su computadora> 4321 Y se conectará a él
Grey Panther
Como dije, a menos que tenga una pila de red rota ...
John Gardeniers
1
@JohnGardeniers ¿Es por eso que está en la página de manual de Linux ip (7) definida bajo direcciones especiales INADDR_ANY (0.0.0.0) means any address for binding;:?
ebyrob
2
En Debian, cree un archivo /etc/mysql/conf.d/bindaddress.cnfcon contenido[mysqld] \n bind-address = 0.0.0.0
Yves Martin
41

No puede enlazar a más de una dirección IP, pero puede enlazar a todas las direcciones IP disponibles. Si es así, solo use 0.0.0.0una dirección de enlace en su archivo de configuración de MySQL (por ejemplo, /etc/mysql/my.cnf) de la siguiente manera:

bind-address    = 0.0.0.0

Si la dirección es 0.0.0.0, el servidor acepta conexiones TCP / IP en todas las interfaces IPv4 del host del servidor.

Además, si la dirección es ::, el servidor acepta conexiones TCP / IP en todas las interfaces IPv4 e IPv6 del host del servidor. Utilice esta dirección para permitir conexiones IPv4 e IPv6 en todas las interfaces del servidor.

O simplemente puede comentar por bind-address=completo, por lo que se unirá a todas las direcciones. Pero asegúrese de que no haya skip-networkinghabilitado en my.cnf si también desea permitir conexiones remotas (Leer más: MySQL: Permitir conexiones remotas Y locales ).

Después de cambiar la dirección de enlace, no olvide reiniciar su servidor MySQL:

sudo service mysql restart

Eventualmente, puede considerar ejecutar múltiples instancias de MySQL en una sola máquina (diferentes puertos) con replicación Maestro / Esclavo. La replicación permite que los datos de un servidor de base de datos MySQL (el maestro) se copien en uno o más servidores de base de datos MySQL (los esclavos).

Lee mas:

kenorb
fuente
Esto funciona bien Solo recuerde verificar si todos los usuarios pueden conectarse desde esa segunda, tercera, cualquier dirección IP
gies0r
21

No, no puedes. La página a la que enlaza indica claramente:

La dirección IP a la que enlazar. Solo se puede seleccionar una dirección. Si esta opción se especifica varias veces, se utiliza la última dirección proporcionada.

Si no se especifica una dirección o 0.0.0.0, el servidor escucha en todas las interfaces.

Andreas
fuente
12

Como han respondido otros, todavía no hay una manera de unirse selectivamente a más de una interfaz.

Linux tiene algunas herramientas TCP que lo hacen posible. En esta configuración, configuraría mysql para escuchar en 127.0.0.1 y luego usaría redir para exponerlo en interfaces arbitrarias.

He estado usando esto para ayudar a un invitado de caja virtual a ver mysql instalado en la máquina host.

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &
txyoji
fuente
Nota MySQL> = 8.0.13 permite el enlace a más de una interfaz.
txyoji
6

Creo que su pregunta está relacionada con este error http://bugs.mysql.com/bug.php?id=14979 El informe de error sugiere alguna solución alternativa.


fuente
¡Una solicitud de características de MySQL que data de 2005!
Tonin
5

Antes de MySQL 8.0.13, --bind-address acepta un único valor de dirección, que puede especificar una única dirección IP o nombre de host sin comodín, o uno de los formatos de dirección comodín que permiten escuchar en múltiples interfaces de red (*, 0.0 .0.0, o: :).

A partir de MySQL 8.0.13, --bind-address acepta un solo valor como se acaba de describir, o una lista de valores separados por comas. Cuando la opción nombra una lista de valores múltiples, cada valor debe especificar una sola dirección IP o nombre de host sin comodín; ninguno puede especificar un formato de dirección comodín (*, 0.0.0.0 o: :).

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

Tadej
fuente
3

En my.cnf change (generalmente /etc/mysql/my.cnf en Linux o para Windows, verifique esta respuesta.

bind-address                   = 127.0.0.1

a

bind-address                   = 0.0.0.0

Luego reinicie mysql (en el servicio de Ubuntu mysql restart ) en Windows, generalmente reinicie el servicio a través de Win + R services.msc

0.0.0.0 le dice que se una a todas las IP disponibles con el puerto también dado en my.cnf

Aleksandar Pavić
fuente