18
0
Fork 0

mise à jour procedure de création d'instances

This commit is contained in:
emorino 2020-08-18 16:04:15 +02:00
parent 3b849d0335
commit aa6021c820
1 changed files with 60 additions and 18 deletions

View File

@ -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`