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 = /var/lib/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=/var/lib/mysql/<instance>
chown -R mysql-<instance> /var/lib/mysql/<instance>
mkdir /var/run/mysqld-<instance>
chown mysql-<instance> /var/run/mysqld-<instance>
A noter que je place le datadir dans /var/lib/mysql/<instance>, j'ai donc
préalablement déplacé ailleurs les données de l'instance initiale. Libre à vous
de placer le datadir où bon vous semble.
- 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, puis de modifier le mot de passe root :
mysql -h 127.0.0.1 --port=3307 -u root