18
0
Fork 0

concision + mise à jour chemin de conf dans mariadb.conf

This commit is contained in:
btatu 2022-05-11 10:39:42 +02:00
parent d3d97d9b7c
commit 588dd1727c
1 changed files with 37 additions and 57 deletions

View File

@ -1521,47 +1521,41 @@ mysql> SET sql_log_bin = 0;
## Multiples instances MySQL
Il est possible de faire fonctionner plusieurs instances de MySQL sur un serveur ; chacune avec ses propres données, sa propre configuration et son utilisateur dédié.
Il est possible de faire fonctionner plusieurs instances de MySQL sur un serveur où chacune à ses propres données, sa propre configuration et son utilisateur dédié.
> On préfère utiliser le port 3307 pour la première instance afin de ne pas confondre une configuration avec et sans instance.
### Installation
Avant toute opération, **il est nécessaire de commenter cette ligne** dans le `/etc/mysql/my.cnf` :
Pour éviter l'héritage de paramètres issue de l'instance principale, **il est nécessaire de commenter cette ligne** dans le `/etc/mysql/my.cnf` :
~~~{.ini}
#user = mysql
~~~
Et de rajouter ces lignes dans `/etc/mysql/conf.d/50-multi.cnf` :
Ainsi que rajouter ces lignes dans `/etc/mysql/conf.d/50-multi.cnf` :
~~~{.ini}
[mysqld_multi]
user = mysqladmin
~~~
Créer un utilisateur pour l'instance (il doit avoir un shell valide comme `/bin/sh`) :
Créer un utilisateur dédié pour l'instance :
~~~
# useradd mysqld1
~~~
Créer le dossier qui va accueillir le *datadir* et donner les bons droits :
Créer les dossiers qui vont accueillir le *datadir* et les données temporaire avec les bons droits :
~~~
# mkdir -p /srv/mysqld_instances/mysqld1
# mkdir -vp /srv/mysqld_instances/mysqld1 /home/mysqld1-tmp
# touch /var/log/mysqld1.log
# chmod 755 /srv /srv/mysqld_instances
# chown -R mysqld1:mysqld1 /srv/mysqld_instances/mysqld1 /var/log/mysqld1.log
# chown -R mysqld1:mysqld1 /srv/mysqld_instances/mysqld1 /home/mysqld1-tmp /var/log/mysqld1.log
~~~
Créer un repertoire temporaire dédié à cette instance :
~~~
# mkdir /home/mysqld1-tmp
# chown mysqld1:mysqld1 /home/mysqld1-tmp
~~~
Ajouter ces lignes dans `/etc/mysql/conf.d/zzz_mysqld1.cnf` :
Ajouter ces lignes dans `/etc/mysql/mariadb.conf.d/zzz_mysqld1.cnf` :
~~~{.ini}
[mysqld1]
@ -1574,30 +1568,28 @@ datadir = /srv/mysqld_instances/mysqld1
log_error = /var/log/mysqld1.log
~~~
L'ajout de ces directives permet de désactiver l'héritage des valeurs issue de l'instance principale :
~~~{.ini}
skip-slave-start
log_bin = 0
slow_query_log = 0
~~~
Ajuster les permissions du fichier de configuration:
~~~
# chmod 644 /etc/mysql/conf.d/zzz_mysqld1.cnf
~~~
Créer ensuite le *datadir* :
Créer manuellement le *datadir* :
~~~
# mysql_install_db --user=mysqld1 --datadir=/srv/mysqld_instances/mysqld1 --defaults-file=/etc/mysql/mariadb.conf.d/zzz-mysqld1.cnf
# mysql_install_db --user=mysqld1 --datadir=/srv/mysqld_instances/mysqld1 --defaults-file=/etc/mysql/mariadb.conf.d/zzz_mysqld1.cnf
# chmod 700 /srv/mysqld_instances/mysqld1
~~~
> *Note 1* : même si l'on ne prévoit pas de faire tourner le mysqld principal sur le port 3306,
on préfère tout de même utiliser le port 3307 pour la première instance afin de ne pas
confondre une configuration avec et sans instance.
> *Note 2* : dans le cas où une réplication est déjà active sur l'instance principale, la nouvelle instance créée va automatiquement hériter des paramètres de réplication.
Pour éviter ça, il suffit de rajouter :
~~~{.ini}
[mysqld1]
skip-slave-start
~~~
### Démarrer une instance avec systemd
On créé une unité systemd multi-instances pour mysql dans `/etc/systemd/system/mysqld@.service`
@ -1622,19 +1614,14 @@ RuntimeDirectory=mysqld%i
WantedBy=multi-user.target
~~~
On recharge le daemon systemd pour que l'unité soit prise en compte :
On recharge le daemon systemd pour que l'unité soit prise en compte et on lance la nouvelle instance dont le "1" est une sorte d'alias de mysqld**1** :
~~~
# systemctl daemon-reload
~~~
Puis lancer la nouvelle instance :
~~~
# systemctl start mysqld@1
~~~
On peut voir le status de l'instance comme une unité systemd classique avec :
On s'assure qu'elle fonctionne bien :
~~~
# systemctl status mysqld@1
@ -1657,40 +1644,33 @@ août 18 15:49:27 huit mysqld_multi[16403]: 2020-08-18 15:49:27 0 [Note] /usr/sb
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**
> Pour stopper une instance, on évite la commande « mysqld_multi stop 1 » qui n'est pas assez fiable et peut laisser l'instance dans un état incorrect, difficile à récupérer.
Enfin, n'oubliez pas de définir un mot de passe root/mysqladmin pour la nouvelle instance !
Pour se conneter à la nouvelle instance, il faut utilisé la socket, par exemple :
~~~
# mysql -P3307 --socket=/var/run/mysqld1/mysqld1.sock -u root -p
~~~
**N'oubliez pas de mettre un mot de passe, ou supprimer l'utilisateur root et le remplacer par un utilisateur mysqladmin**, de la même manière quand dans une installation mono-instances : [HowtoMySQL#installation]().
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 :
On préfère passer la commande « shutdown » en interne qui devrait envoyer un signal SIGTERM (kill -15) au process mysqld :
~~~
# mysqladmin -h 127.0.0.1 -P3307 shutdown
~~~
> **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 :
Avec l'unité systemd on peux stopper l'unité systemd en faisant :
~~~
# systemctl stop mysqld@1
~~~
### Connexion aux instances et création du fichier *~/.my.cnf*
Lors de la création de plusieurs instances MySQL, on préférera donner un mot de passe différents, par instances, à lutilisateur `mysqladmin`
Lors de la création de plusieurs instances MySQL, on préférera donner à chacune un mot de passe différents à lutilisateur `mysqladmin`
Pour utilisé le multi client, on configurera le fichier ~/.my.cnf comme ceci :
On sécurise la nouvelle instance en définissant un mot de passe au compte mysqladmin :
~~~
# mysql -P3307 --socket=/var/run/mysqld1/mysqld1.sock -u root -p
~~~
On supprime l'utilisateur root pour le remplacer par l'utilisateur mysqladmin dont [les requêtes sont identiques à une installation mono-instances](HowtoMySQL#installation).
Pour utiliser le multi client, on configurera le fichier ~/.my.cnf comme ceci :
~~~
[client1]
@ -1706,13 +1686,13 @@ user = mysqladmin
password = bar
~~~
Avec cette configuration, on doit se connecter a l'instance mysql avec l'option `--defaults-group-suffix=$NUM` par exemple :
Cette configuration permettra de se connecter à l'instance mysql avec l'option `--defaults-group-suffix=$NUM` par exemple :
~~~
mysql --defaults-group-suffix=1
~~~
**Attention** : Si on utilise cela, il faut modifier vos scripts de mysqldump ou de création de base en conséquence.
> **Attention** : Si on utilise cela, il faut modifier vos scripts de mysqldump ou de création de base en conséquence.
### Nettoyage