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
|
||||
|
||||
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, à 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]
|
||||
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue