Forum Linux.général MySQL n'écoute pas le bon port (multi instance)

Posté par  . Licence CC By‑SA.
Étiquettes :
0
8
fév.
2013

Bonjour,

J'ai un serveur MySQL 5.1.67 (sous CentOS) sur lequel je souhaite faire tourner 2 instances différentes. C'est à dire qu'avec la même version de MySQL je souhaite pouvoir accéder à 2 database différentes selon un numéro de port choisi : 3306 pour la 1ère et 23306 (par exemple) pour la 2ème.

J'ai configuré mysqld_multi qui est fait pour ça.
J'ai donc bien créé 2 "datadir" différents pour chaque instance, ainsi qu'un PID et un socket chacun.
Le fichier my.cnf rssemble donc à ceci :

*******
*******
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
user=mysql
log=/var/log/mysqld_multi.log

[mysqld1]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld_prod.pid
tmpdir=/tmp
general-log-file=/var/run/mysqld/mysqld_prod.log
log-error=/var/log/mysqld_prod.log
port=3306
user=mysql
symbolic-links=0

[mysqld2]
datadir=/var/lib/mysql_demo
socket=/var/lib/mysql_demo/mysql_demo.sock
pid-file=/var/run/mysqld/mysqld_demo.pid
tmpdir=/tmp/mysqld_demo
general-log-file=/var/run/mysqld/mysqld_demo.log
log-error=/var/log/mysqld_demo.log
port=23306
user=mysql
symbolic-links=0

*******
*******

En fait, ça marche à peu près… enfin vous allez voir.

[Notes]
- Iptables a les ports 3306 et 23306 ouverts. Selinux est désactivé.
- "mysqld_multi report 1" et "mysqld_multi report 2" m'indique que les serveurs tournent.
- le service mysqld "de base" est off (chkconfig mysqld off / service mysqld stop)
- Rien à signaler dans les logs également.

Si je me connecte avec le socket, par exemple :

# mysql -u root -p --socket=/var/lib/mysql/mysql.sock

ou

# mysql -u root -p --socket=/var/lib/mysql/mysql.sock

dans ce cas tout va bien ! Je me connecte aux bases correspondantes.

PAR CONTRE, si je me connecte avec le port TCP/IP :

# mysql -u root -p --port=3306

ou

# mysql -u root -p --port=23306

je tombe toujours sur la 1ère instance, celle qui tourne sur le port 3306. C'est comme si le port TCP dans my.cnf n'était pas pris en compte !

Une idée ?

  • # reponse d'ingenieur ?

    Posté par  . Évalué à 3. Dernière modification le 08 février 2013 à 17:07.

    decrivez moi votre besoin, je vous dirais comment vous en passer…

    mysql gere tres bien le multi-user et multi-base

    tu peux donc tres bien n'avoir qu'une instance sur 3306
    puis un utilisateur userA qui n'a les droits que sur databaseA
    et un utilisateur userB qui n'a les droits que sur databaseB

    tout ca n'empechant pas root d'avoir acces à toutes les bases.

    je t'invites à regarder le contenu de la base "mysql"
    eventuellement avec phpmyadmin
    tu y verras aussi que tu peux limiter userA s'il ne vient pas de machineA, etc

    apres tu as peut-etre specifiquement besoin de savoir gerer du multiinstance, mais perso je n'en vois pas trop l'interet.

    • [^] # Re: reponse d'ingenieur ?

      Posté par  . Évalué à 2.

      Tu as certainement raison, mais c'était pour faciliter la vie des développeurs qui utilisent ce serveur. Leur code est exactement le même pour utiliser des versions prod et démo par exemple. Ils n'ont que le port à changer.

      • [^] # Re: reponse d'ingenieur ?

        Posté par  . Évalué à 3.

        dans un code bien fait, changer le login/pass/base n'est pas plus compliqué que de changer le port
        ca doit etre une variable definie dans un fichier de configuration.

  • # Et le serveur .

    Posté par  . Évalué à 6.

    Salut,

    Sur tes lignes de commandes tu ne précises pas de serveur sur lequel te connecter. La connexion se fait donc en local, via une socket unix, même si tu précises un port TCP à utiliser.

    Ça devrait donc fonctionner comme tu le veux si tu indiques l'option --host=127.0.0.1 (il ne faut pas mettre localhost, sinon on utilise, encore, une socket unix).

    A+
    JJD

    • [^] # Re: Et le serveur .

      Posté par  . Évalué à 1.

      Tu peux aussi forcer le protocole à utiliser avec l'option --protocol=TCP

    • [^] # Re: Et le serveur .

      Posté par  . Évalué à 2.

      Génial ça fonctionne !!
      Merci beaucoup.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.