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            = 3306
socket          = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0
[mysqld]
#user           = mysql
[mysqldump]
quick
quote-names
max_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            = mysql1
pid-file        = /var/run/mysqld1/mysqld.pid
socket          = /var/run/mysqld1/mysqld.sock
port            = 33061
basedir         = /usr
datadir         = /var/lib/mysql1
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address            = 127.0.0.1
general_log_file        = /var/log/mysql1/mysql.log
general_log             = 1
key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
myisam-recover          = BACKUP
query_cache_limit       = 1M
query_cache_size        = 16M
expire_logs_days        = 10
max_binlog_size         = 100M
[mysqld2]
user            = mysql2
pid-file        = /var/run/mysqld2/mysqld.pid
socket          = /var/run/mysqld2/mysqld.sock
port            = 33062
basedir         = /usr
datadir         = /var/lib/mysql2
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address            = 127.0.0.1
general_log_file        = /var/log/mysql2/mysql.log
key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
myisam-recover          = BACKUP
query_cache_limit       = 1M
query_cache_size        = 16M
log_error               = /var/log/mysql2/error.log
expire_logs_days        = 10
max_binlog_size         = 100M
[mysqld3]
user            = mysql3
pid-file        = /var/run/mysqld3/mysqld.pid
socket          = /var/run/mysqld3/mysqld.sock
port            = 33063
basedir         = /usr
datadir         = /var/lib/mysql3
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address            = 127.0.0.1
general_log_file        = /var/log/mysql3/mysql.log
general_log             = 1
key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
myisam-recover          = BACKUP
query_cache_limit       = 1M
query_cache_size        = 16M
log_error               = /var/log/mysql3/error.log
expire_logs_days        = 10
max_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/mysql1
chown mysql2:adm /var/log/mysql2
chown mysql3:adm /var/log/mysql3
mkdir /var/run/mysqld{1,2,3}
chown mysql1 /var/run/mysqld1
chown mysql2 /var/run/mysqld2
chown mysql3 /var/run/mysqld3
  • On initialise les datastores pour chaque instances
mysql_install_db --datadir=/var/lib/mysql1 --user=mysql1
mysql_install_db --datadir=/var/lib/mysql2 --user=mysql2
mysql_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 2

mysqld_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