concision + mise à jour chemin de conf dans mariadb.conf
This commit is contained in:
parent
d3d97d9b7c
commit
588dd1727c
|
@ -1521,47 +1521,41 @@ mysql> SET sql_log_bin = 0;
|
||||||
|
|
||||||
## Multiples instances MySQL
|
## 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
|
### 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}
|
~~~{.ini}
|
||||||
#user = mysql
|
#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}
|
~~~{.ini}
|
||||||
[mysqld_multi]
|
[mysqld_multi]
|
||||||
user = mysqladmin
|
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
|
# 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
|
# touch /var/log/mysqld1.log
|
||||||
# chmod 755 /srv /srv/mysqld_instances
|
# 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 :
|
Ajouter ces lignes dans `/etc/mysql/mariadb.conf.d/zzz_mysqld1.cnf` :
|
||||||
|
|
||||||
~~~
|
|
||||||
# mkdir /home/mysqld1-tmp
|
|
||||||
# chown mysqld1:mysqld1 /home/mysqld1-tmp
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Ajouter ces lignes dans `/etc/mysql/conf.d/zzz_mysqld1.cnf` :
|
|
||||||
|
|
||||||
~~~{.ini}
|
~~~{.ini}
|
||||||
[mysqld1]
|
[mysqld1]
|
||||||
|
@ -1574,30 +1568,28 @@ datadir = /srv/mysqld_instances/mysqld1
|
||||||
log_error = /var/log/mysqld1.log
|
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 :
|
Ajuster les permissions du fichier de configuration :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# chmod 644 /etc/mysql/conf.d/zzz_mysqld1.cnf
|
# 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
|
# 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,
|
### Démarrer une instance avec systemd
|
||||||
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
|
|
||||||
~~~
|
|
||||||
|
|
||||||
On créé une unité systemd multi-instances pour mysql dans `/etc/systemd/system/mysqld@.service`
|
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
|
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
|
# systemctl daemon-reload
|
||||||
~~~
|
|
||||||
|
|
||||||
Puis lancer la nouvelle instance :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
# systemctl start mysqld@1
|
# 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
|
# 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.
|
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 !
|
On préfère passer la commande « shutdown » en interne qui devrait envoyer un signal SIGTERM (kill -15) au process mysqld :
|
||||||
|
|
||||||
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 :
|
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# mysqladmin -h 127.0.0.1 -P3307 shutdown
|
# mysqladmin -h 127.0.0.1 -P3307 shutdown
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
> **Note** : a priori cela revient à envoyer un signal SIGTERM (kill -15) au process mysqld
|
Avec l'unité systemd on peux stopper l'unité systemd en faisant :
|
||||||
|
|
||||||
> **Note2** : Avec l'unité systemd on peux stopper l'unité systemd en faisant :
|
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# systemctl stop mysqld@1
|
# systemctl stop mysqld@1
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|
||||||
### Connexion aux instances et création du fichier *~/.my.cnf*
|
### 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, à l’utilisateur `mysqladmin`
|
Lors de la création de plusieurs instances MySQL, on préférera donner à chacune un mot de passe différents à l’utilisateur `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]
|
[client1]
|
||||||
|
@ -1706,13 +1686,13 @@ user = mysqladmin
|
||||||
password = bar
|
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
|
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
|
### Nettoyage
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue