diff --git a/HowtoMySQL.md b/HowtoMySQL.md index f6cd41cb..160063fc 100644 --- a/HowtoMySQL.md +++ b/HowtoMySQL.md @@ -1483,7 +1483,7 @@ Créer un repertoire temporaire dédié à cette instance : Créer ensuite le *datadir* : ~~~ -# mysql_install_db --user=mysqld1 --datadir=/srv/mysqld_instances/mysqld1 +# mysql_install_db --user=mysqld1 --datadir=/srv/mysqld_instances/mysqld1 --log_error=/var/log/mysqld1.log # chmod 700 /srv/mysqld_instances/mysqld1 ~~~ @@ -1491,15 +1491,13 @@ Ajouter ces lignes dans `/etc/mysql/conf.d/zzz_mysqld1.cnf` : ~~~{.ini} [mysqld1] -mysqld = /usr/bin/mysqld_safe user = mysqld1 port = 3307 tmpdir = /home/mysqld1-tmp/ -socket = /var/run/mysqld/mysqld1.sock -pid-file = /var/run/mysqld/mysqld1.pid +socket = /var/run/mysqld1/mysqld1.sock +pid-file = /var/run/mysqld1/mysqld1.pid datadir = /srv/mysqld_instances/mysqld1 -log_error = /var/log/mysql/mysqld1/error.log -slow_query_log_file = /var/log/mysqld1-slow.log +log_error = /var/log/mysqld1.log ~~~ > *Note 1* : même si l'on ne prévoit pas de faire tourner le mysqld principal sur le port 3306, @@ -1514,18 +1512,63 @@ Pour éviter ça, il suffit de rajouter : skip-slave-start ~~~ -Si /usr est monté en RO, déplacer le log de mysqld_multi : +On créé une unité systemd multi-instances pour mysql dans `/etc/systemd/system/mysqld@.service` ~~~ -# mv /usr/share/mysql/mysqld_multi.log /var/log/mysql/mysqld_multi.log -# ln -s /var/log/mysql/mysqld_multi.log /usr/share/mysql/mysqld_multi.log -# chown mysql:adm /var/log/mysql/mysqld_multi.log +[Unit] +Description=MySQL Multi Server for instance %i +After=syslog.target +After=network.target + +[Service] +PIDFile=/var/run/mysqld%i/mysqld%i.pid +User=mysqld%i +Group=mysqld%i +Type=forking +ExecStart=/usr/bin/mysqld_multi start %i +ExecStop=/usr/bin/mysqld_multi stop %i +Restart=always +PrivateTmp=true +RuntimeDirectory=mysqld%i + +[Install] +WantedBy=multi-user.target +~~~ + +On recharge le daemon systemd pour que l'unité soit prise en compte : + +~~~ +# systemctl daemon-reload ~~~ Puis lancer la nouvelle instance : ~~~ -# mysqld_multi start 1 +# systemctl start mysqld@1 +~~~ + +On peux voir le status de l'instance comme une unité systemd classique avec : + +~~~ +# systemctl status mysqld@1 + + +● mysqld@1.service - MySQL Multi Server for instance 1 + Loaded: loaded (/etc/systemd/system/mysqld@.service; disabled; vendor preset: enabled) + Active: active (running) since Tue 2020-08-18 15:49:27 CEST; 6min ago + Process: 16403 ExecStart=/usr/bin/mysqld_multi start 1 (code=exited, status=0/SUCCESS) + Main PID: 16408 (mysqld) + Tasks: 30 (limit: 4915) + Memory: 70.7M + CGroup: /system.slice/system-mysqld.slice/mysqld@1.service + └─16408 /usr/sbin/mysqld --defaults-group-suffix=1 --user=mysqld1 --port=3307 --tmpdir=/localhome/emorino/mysqld1-tmp --socket=/var/run/mysqld1/mysq + +août 18 15:49:27 huit systemd[1]: Starting MySQL Multi Server for instance 1... +août 18 15:49:27 huit mysqld_multi[16403]: WARNING: Log file disabled. Maybe directory or file isn't writable? +août 18 15:49:27 huit mysqld_multi[16403]: [67B blob data] +août 18 15:49:27 huit mysqld_multi[16403]: Starting MariaDB servers +août 18 15:49:27 huit mysqld_multi[16403]: 2020-08-18 15:49:27 0 [Note] /usr/sbin/mysqld (mysqld 10.3.23-MariaDB-0+deb10u1) starting as process 16408 ... +août 18 15:49:27 huit systemd[1]: Started MySQL Multi Server for instance 1. ~~~ "1" est une sorte d'alias de mysqld**1** @@ -1538,13 +1581,6 @@ Pour se conneter à la nouvelle instance, il faut utilisé la socket, par exempl # mysql -P3307 --socket=/var/run/mysqld/mysqld1.sock ~~~ - -Pour voir l'état des instances : - -~~~ -# mysqld_multi report -~~~ - Et pour stopper une instance, on évite la commande « mysqld_multi stop 1 » qui n'est que rarement fiable et peut laisser l'instance dans un état incorrect, difficile à récupérer. On préfère passer la commande « shutdown » en interne : @@ -1555,6 +1591,12 @@ On préfère passer la commande « shutdown » en interne : > **Note** : a priori cela revient à envoyer un signal SIGTERM (kill -15) au process mysqld +> **Note2** : Avec l'unité systemd on peux stopper l'unité systemd en faisant : + +~~~ +# systemctl stop mysqld@1 +~~~ + ### Nettoyage Si le *mysqld* principal n'est pas utilisé, on désactivera le script d'init.d /etc/init.d/mysql (en ajoutant `exit 0`