Tuto | Installation d’une base Mysql Multi-instances
Article publiée le 26 Décembre 2016
Un petit tutoriel sur l'installation d'une base de données MySQL multi instance. Ce type d'installation vous sera particulièrement utile si votre serveur héberge plusieurs instances applicative. En effet admettons que vous hébergiez plusieurs instances applicatives, au lieu de créer une base de données par application, vous pourrez créer une instance MySQL dédié par application. L'avantage est que vous pourrez effectuer un tunning précis de votre base de données par application.
- Procédez à l'installation de mysql via la commande apt-get install mysql-server
- Faites une sauvegarde du fichier de configuration original /etc/mysql/my.cnf et modifier le de la manière suivante (le fichier de configuration est bien sur à adapter. Dans cette exemple j'ai décidé de créer trois instances MySQL):
[client]port =3306socket = /var/run/mysqld/mysqld.sock[mysqld_safe]socket = /var/run/mysqld/mysqld.socknice =0[mysqld]#user = mysql[mysqldump]quickquote-namesmax_allowed_packet = 16M[mysql]#no-auto-rehash # faster start of mysql but no tab completition[isamchk]key_buffer = 16M!includedir /etc/mysql/conf.d/[mysqld1]user = mysql1pid-file = /var/run/mysqld1/mysqld.pidsocket = /var/run/mysqld1/mysqld.sockport =33061basedir = /usrdatadir = /var/lib/mysql1tmpdir = /tmplc-messages-dir = /usr/share/mysqlskip-external-lockingbind-address =127.0.0.1general_log_file = /var/log/mysql1/mysql.loggeneral_log =1key_buffer = 16Mmax_allowed_packet = 16Mthread_stack = 192Kthread_cache_size =8myisam-recover = BACKUPquery_cache_limit = 1Mquery_cache_size = 16Mexpire_logs_days =10max_binlog_size = 100M[mysqld2]user = mysql2pid-file = /var/run/mysqld2/mysqld.pidsocket = /var/run/mysqld2/mysqld.sockport =33062basedir = /usrdatadir = /var/lib/mysql2tmpdir = /tmplc-messages-dir = /usr/share/mysqlskip-external-lockingbind-address =127.0.0.1general_log_file = /var/log/mysql2/mysql.logkey_buffer = 16Mmax_allowed_packet = 16Mthread_stack = 192Kthread_cache_size =8myisam-recover = BACKUPquery_cache_limit = 1Mquery_cache_size = 16Mlog_error = /var/log/mysql2/error.logexpire_logs_days =10max_binlog_size = 100M[mysqld3]user = mysql3pid-file = /var/run/mysqld3/mysqld.pidsocket = /var/run/mysqld3/mysqld.sockport =33063basedir = /usrdatadir = /var/lib/mysql3tmpdir = /tmplc-messages-dir = /usr/share/mysqlskip-external-lockingbind-address =127.0.0.1general_log_file = /var/log/mysql3/mysql.loggeneral_log =1key_buffer = 16Mmax_allowed_packet = 16Mthread_stack = 192Kthread_cache_size =8myisam-recover = BACKUPquery_cache_limit = 1Mquery_cache_size = 16Mlog_error = /var/log/mysql3/error.logexpire_logs_days =10max_binlog_size = 100M
- On crée les différents users:
useradd -r mysql1
useradd -r mysql2
useradd -r mysql3
- On crée les répertoires avec les bons droits :
mkdir /var/lib/mysql{1,2,3}mkdir /var/lib/mysql{1,2,3}
chown mysql1:adm /var/log/mysql1chown mysql2:adm /var/log/mysql2chown mysql3:adm /var/log/mysql3mkdir /var/run/mysqld{1,2,3}chown mysql1 /var/run/mysqld1chown mysql2 /var/run/mysqld2chown mysql3 /var/run/mysqld3
- On initialise les datastores pour chaque instances
mysql_install_db --datadir=/var/lib/mysql1 --user=mysql1mysql_install_db --datadir=/var/lib/mysql2 --user=mysql2mysql_install_db --datadir=/var/lib/mysql3 --user=mysql3
- On démarre nos instances:
mysqld_multi --verbose --no-log start 1
mysqld_multi --verbose --no-log start 2mysqld_multi --verbose --no-log start 3
- Pour stopper une instance spécifique :
mysqld_multi --verbose --no-log stop <numéro de l'instance>
- Il est possible d'avoir un statut pour chaque instance grâce à la commande : mysqld_multi report
- Enfin la connexion à une instance via le client mysql se fait avec ce type de commande : mysql -uroot --socket=<chemin du fichier>
Exemple :mysql -uroot -ptoto --socket=/var/run/mysql1/mysqld.sock

Merci pour ce tuto.
J’ignorais l’existence de cette fonctionnalité grace à laquelle il n’est pas nécessaire d’utiliser plusieurs fichiers de conf.
Bonjour,
J’ai récemment renoncé à installer mysql en multinstance faute d’informations sur les mises à jour et l’intégration avec systemd. Comment se passe la maj de ton installation ?
Cordialement,
Salut,
Aucun soucis d’intégration avec systemd. Cependant à l’époque, je mettais systématiquement à jour systemd depuis les dépôts backport (sous debian jessie).
Merci pour ta réponse. Le gestionnaire de paquet est fait pour mettre à jour une seule installation. Comment se passe la maj des instances ?
Ne t’inquiète pas pour ça. Le multi instance n’est que de la conf. Aucun rapport donc avec le paquet MySQL qui se mettra à jour normalement via ton gestionnaire de paquets.
Merci pour ces infos Vincent. Il faut vraiment que je mettre ça en place.
J’ai fait mon installation multi-instance et c’est au poil, merci !