Dans le cas ou vous gérez plusieurs serveurs MySQL (distants ou sur différents VLAN), il peut être utile de déporter tout traitement long sur un seul serveur SQL dédié pour peu de regrouper l’ensemble des bases de données.
En attendant MariaDB 10 qui permettra la réplication multi-master, il est nécessaire de mettre en place plusieurs instances MySQL sur la même machine. Une réplication pourra ensuite être lancée sur chaque instance vers chaque serveur SQL source, configuré évidemment en master.
Voici donc un guide rapide de mise en place d’instances multiples MySQL (l’ancienne méthode tout à la main n’est plus nécessaire et c’est tant mieux).
Installation
root@sqlbackend:~ # apt-get install mysql-server-5.5 |
Configuration
Je vais créer ici trois nouvelles instances mysql1, mysql2 et mysql3 ; chacune aura donc sa directive serveur. A noter que je ne supprime pas l’instance principale pour ne pas me ramasser à la prochaine mise à jour OS. Il faut cependant commenter l’option user sinon les instances supplémentaires ne se lanceront pas.
root@sqlbackend:~ # nano /etc/mysql/my.cnf |
pid-file = /var/run/mysqld1/mysqld.pid |
socket = /var/run/mysqld1/mysqld.sock |
datadir = /var/lib/mysql1 |
lc-messages-dir = /usr/share/mysql |
general_log_file = /var/log/mysql1/mysql.log |
pid-file = /var/run/mysqld2/mysqld.pid |
socket = /var/run/mysqld2/mysqld.sock |
datadir = /var/lib/mysql2 |
lc-messages-dir = /usr/share/mysql |
general_log_file = /var/log/mysql2/mysql.log |
pid-file = /var/run/mysqld3/mysqld.pid |
socket = /var/run/mysqld3/mysqld.sock |
datadir = /var/lib/mysql3 |
lc-messages-dir = /usr/share/mysql |
general_log_file = /var/log/mysql3/mysql.log |
Chaque instance s’exécute sous un utilisateur dédié :
root@sqlbackend:~ # useradd -r mysql1 |
root@sqlbackend:~ # useradd -r mysql2 |
root@sqlbackend:~ # useradd -r mysql3 |
Les répertoires de chaque instance sont à créer de cette manière :
root@sqlbackend:~ # mkdir /var/lib/mysql{1,2,3} |
root@sqlbackend:~ # mkdir /var/log/mysql{1,2,3} |
root@sqlbackend:~ # chown mysql1:adm /var/log/mysql1 |
root@sqlbackend:~ # chown mysql2:adm /var/log/mysql2 |
root@sqlbackend:~ # chown mysql3:adm /var/log/mysql3 |
root@sqlbackend:~ # mkdir /var/run/mysqld{1,2,3} |
root@sqlbackend:~ # chown mysql1 /var/run/mysqld1 |
root@sqlbackend:~ # chown mysql2 /var/run/mysqld2 |
root@sqlbackend:~ # chown mysql3 /var/run/mysqld3 |
Il reste à initialiser les datastores :
root@sqlbackend:~ # mysql_install_db --datadir=/var/lib/mysql1 --user=mysql1 |
root@sqlbackend:~ # mysql_install_db --datadir=/var/lib/mysql2 --user=mysql2 |
root@sqlbackend:~ # mysql_install_db --datadir=/var/lib/mysql3 --user=mysql3 |
L’exécution de chaque instance est désormais possible :
root@sqlbackend:~ # mysqld_multi --verbose --no-log start 1 |
root@sqlbackend:~ # mysqld_multi --verbose --no-log start 2 |
root@sqlbackend:~ # mysqld_multi --verbose --no-log start 3 |