Comment lier un serveur MySQL à plusieurs adresses IP?

260

Existe-t-il un moyen secret de lier MySQL à plusieurs adresses IP?

Autant que je sache, le paramètre bind-address de my.cnf ne prend pas en charge plus d'une adresse IP et vous ne pouvez pas l'avoir plus d'une fois.

BlaM
la source

Réponses:

242

Non, il n'y en a pas (je viens de vérifier il y a 1 heure). Vous pouvez commenter l'adresse de liaison dans my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

Si vous ne voulez que deux adresses IP, vous devrez alors utiliser un pare-feu.

Christian Lescuyer
la source
31
Correct. La liaison est limitée à 0, 1 ou à toutes les adresses IP du serveur.
Joe
7
Notez cependant que vous pouvez publier et servir à la fois un socket Unix local et un socket réseau en spécifiant les options the socketet bind-address.
danorton
5
toujours vrai à compter d'aujourd'hui.
Dennis Nolte
22
C'est ridicule.
Phillipp
2
@AJP Mysql traite différemment 'localhost' et '127.0.0.1' dans le système de privilèges. Confirmé ici: Un fichier de socket Unix est utilisé si vous ne spécifiez pas de nom d'hôte ou si vous indiquez le nom d'hôte spécial localhost.
Christian Lescuyer
78

La liaison à 127.0.0.x ne le rendra pas disponible à tous les périphériques, il le rendra disponible localement uniquement. Si vous souhaitez le rendre disponible pour toutes les interfaces, vous devez utiliser 0.0.0.0. Si vous souhaitez y accéder à partir de plusieurs, mais de moins de toutes les interfaces, vous devez vous connecter à 0.0.0.0 et utiliser le pare-feu pour les interfaces auxquelles vous ne voulez pas accéder.

De plus, en tant que deuxième couche de sécurité, vous devez vous assurer que le champ hôte de tous vos utilisateurs MySQL est défini sur autre chose que% (c’est-à-dire n’importe quel hôte).

Panthère grise
la source
1
Sauf si votre pile réseau est endommagée, vous ne pouvez pas lier un port TCP à l'adresse 0.0.0.0.
John Gardeniers
26
Vous pouvez vous lier à 0.0.0.0. Vous ne pouvez tout simplement pas vous y rendre. Si vous êtes sur Linux (ou même sur Windows, installez simplement netcat pour Windows), essayez: dans un terminal: nc -l 0.0.0.0 4321 et dans un second terminal: telnet <IP de n’importe quelle interface de votre ordinateur a> 4321 Et cela se connecter à elle.
Grey Panther
Comme je le disais, à moins que votre pile réseau ne soit en panne ...
John Gardeniers
1
@JohnGardeniers Est - ce pourquoi il est dans la page man ip linux (7) défini dans les adresses spéciales: INADDR_ANY (0.0.0.0) means any address for binding;?
ebyrob
2
Sous Debian, créez un fichier /etc/mysql/conf.d/bindaddress.cnfavec le contenu[mysqld] \n bind-address = 0.0.0.0
Yves Martin
41

Vous ne pouvez pas lier plus d'une adresse IP, mais vous pouvez également vous lier à toutes les adresses IP disponibles. Si c'est le cas, utilisez simplement 0.0.0.0une adresse de liaison dans votre fichier de configuration MySQL (par exemple, /etc/mysql/my.cnf) comme suit:

bind-address    = 0.0.0.0

Si l'adresse est 0.0.0.0, le serveur accepte les connexions TCP / IP sur toutes les interfaces IPv4 de l'hôte du serveur.

De plus, si l'adresse est correcte ::, le serveur accepte les connexions TCP / IP sur toutes les interfaces IPv4 et IPv6 de l'hôte du serveur. Utilisez cette adresse pour autoriser les connexions IPv4 et IPv6 sur toutes les interfaces de serveur.

Ou vous pouvez simplement commenter bind-address=complètement, de sorte qu'il sera lié à toutes les adresses. Mais assurez-vous que vous n'avez pas skip-networkingactivé dans votre fichier my.cnf si vous souhaitez également autoriser les connexions distantes (Pour en savoir plus: MySQL: autorisez les connexions distantes ET locales ).

Après avoir changé l'adresse de liaison, n'oubliez pas de redémarrer votre serveur MySQL en:

sudo service mysql restart

Vous pouvez éventuellement envisager d'exécuter plusieurs instances de MySQL sur une même machine (différents ports) avec une réplication maître / esclave. La réplication permet de copier les données d'un serveur de base de données MySQL (le maître) vers un ou plusieurs serveurs de base de données MySQL (les esclaves).

Lire la suite:

Kenorb
la source
Cela fonctionne bien. Rappelez-vous simplement de vérifier si tous les utilisateurs sont autorisés à se connecter à partir de cette 2ème, 3ème, quelle que soit l'adresse IP
gies0r
21

Non vous ne pouvez pas. La page vers laquelle vous créez un lien indique clairement:

L'adresse IP à laquelle se lier. Une seule adresse peut être sélectionnée. Si cette option est spécifiée plusieurs fois, la dernière adresse donnée est utilisée.

Si aucune adresse ou 0.0.0.0 n'est spécifié, le serveur écoute toutes les interfaces.

Andreas
la source
12

Comme d'autres l'ont répondu, il n'y a pas encore moyen de se lier de manière sélective à plusieurs interfaces.

Linux a quelques outils TCP qui le rendent possible. Dans cette configuration, vous configureriez mysql pour écouter sur 127.0.0.1, puis utiliser redir pour l'exposer sur des interfaces arbitraires.

Je l'utilise pour aider un invité virtuel à voir mysql installé sur la machine hôte.

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &
txyoji
la source
Remarque MySQL> = 8.0.13 autorise la liaison à plusieurs interfaces.
txyoji
6

Je pense que votre question est liée à ce bogue http://bugs.mysql.com/bug.php?id=14979 Le rapport de bogue suggère une solution de contournement.


la source
Une demande de fonctionnalité MySQL datant de 2005!
Tonin
5

Avant MySQL 8.0.13, --bind-address accepte une valeur d'adresse unique, qui peut spécifier une adresse IP ou un nom d'hôte non générique unique, ou l'un des formats d'adresse générique permettant l'écoute sur plusieurs interfaces réseau (*, 0.0 .0.0 ou: :).

Depuis MySQL 8.0.13, --bind-address accepte une seule valeur comme décrit ci-dessus, ou une liste de valeurs séparées par des virgules. Lorsque l'option nomme une liste de plusieurs valeurs, chaque valeur doit spécifier une adresse IP ou un nom d'hôte non générique unique. aucun ne peut spécifier un format d'adresse générique (*, 0.0.0.0 ou: :).

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

Tadej
la source
3

Dans my.cnf change (généralement /etc/mysql/my.cnf sous Linux ou pour Windows, cochez cette réponse.

bind-address                   = 127.0.0.1

à

bind-address                   = 0.0.0.0

Puis redémarrez mysql (au redémarrage du service Ubuntu , mysql ) sous Windows, généralement à l'aide du redémarrage via Win + R services.msc

0.0.0.0 lui dit de se connecter à toutes les adresses IP disponibles avec un port également indiqué dans my.cnf

Aleksandar Pavić
la source