Blog de Thomas Martin

Gérer plusieurs instances de MySQL

vendredi 19 juin 2009

Voici un résumé de la mise en oeuvre de multiples instances MySQL sur un
serveur Debian, à l'aide de l'outil mysqld_multi. Cette solution permet par
exemple d'offrir un accès complet à MySQL dans le cadre d'un hébergement
mutualisé (l'utilisateur peut alors créer ses propres bases, gèrer ses
utilisateurs, etc). Cela peut être aussi utilisé pour cloisonner totalement les
bases de données de différentes applications, et ainsi d'ajuster finement des
paramètres tels que max_connections pour chacune d'elles.

Voici les étapes :

  • Ajouter une ou plusieurs sections [mysqldN] dans /etc/mysql/my.cnf, où N
    correspond au numéro d'instance, et <instance> à son nom.
[mysqldN]
user = mysql-<instance>
port = 3307
socket = /var/run/mysqld-<instance>/mysqld.sock
pid-file = /var/run/mysqld-<instance>/mysqld.pid
datadir = /home/mysql/<instance>

Si vous utilisez les options --log, --log-bin ou --log-error, il est
nécessaire de les redéfinir dans chaque configuration d'instances (voir
Running Multiple MySQL Servers on the Same Machine).

Note : pour faire tourner l'instance avec un utilisateur différent (comme dans
cette exemple) il est à priori nécessaire de commenter le paramètre user = mysql dans
la section [mysqld] du my.cnf, sinon mysqld_multi retourne une erreur :

Ignoring user change to 'mysql-<instance>' because the user was set to 'mysql'
earlier on the command line

Décommenter ce paramètre ne gène pas le lancement de l'instance initiale.

  • Créer le compte système qui fera tourner l'instance.
useradd -r mysql-<instance>

  • Créer le répertoire de données de l'instance, et les répertoires annexes.
mysql_install_db --datadir=/home/mysql/<instance>
chown -R mysql-<instance> /home/mysql/<instance>
mkdir /var/run/mysqld-<instance>
chown mysql-<instance> /var/run/mysqld-<instance>

  • Démarrage de l'instance
mysqld_multi --verbose --no-log start N

Où N fait référence au numéro de l'instance.

Il est maintenant possible de s'y connecter en utilisant le numéro de port
TCP/IP spécifié plus haut, et en saisissant un mot de passe vide :

mysql -h 127.0.0.1 --port=3307 -u root -p

Si vous choisissez d'utiliser un mot de passe root commun à toutes vos
instances, vous trouverez pratique d'ajouter la section suivante à votre
fichier .my.cnf :

[mysqld_multi]
user = root
password = "<password>"

Enfin, voici un exemple de script d'init permettant de démarrer et d'arrêter
proprement toutes vos instances :

#!/bin/sh

case "$1" in
        start)
                mysqld_multi start
                ;;
        stop)
                mysqld_multi stop
                ;;
  *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac

exit 0
Tags: evolix, mysql, sysadmin.

Archive

  • 2010
    • janvier (1)
  • 2009
    • juin (2)
    • octobre (2)
  • 2008
    • mai (6)
    • juin (1)
    • août (1)
    • octobre (2)
    • novembre (1)

Tags

  • apache (1)
  • blog (2)
  • debian (6)
  • dkim (1)
  • dspam (1)
  • ec2 (1)
  • evolix (13)
  • freebsd (1)
  • ldap (1)
  • mysql (1)
  • oopss (10)
  • openbsd (3)
  • phone (1)
  • php (1)
  • postfix (2)
  • security (2)
  • sysadmin (8)
  • virtualization (1)
© 2008-2010 Thomas Martin RSS Feed Pour toutes remarques, commentaires, suggestions : blog_deletethis_@_deletethis_tmartin.fr