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 mysql
2
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
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 !