Laboratoire infra Linux HA #2 – SĂ©paration de la BDD
LAB07-DB-01
Cet article est le second opus de la suite d’articles sur la mise en Ĺ“uvre d’une infrastructure Linux visant Ă servir le blog “lab07.lab”.
Dans le prĂ©cĂ©dent article nous avons rĂ©alisĂ© l’installation et la configuration d’un serveur LAMP sous Debian 12 servant Worpdress Ă l’aide d’Apache, de MySQL et PHP : lab07-front-01
.
Dans cet article on va migrer la base de données vers un hôte dédié : lab07-db-01
.
Installation des paquets
L’installation de Percona MySQL Ă©tant combinĂ©e avec celle des autres paquets dans le premier article, elle sera reprise ici Ă un dĂ©tail près : on va dĂ©sactiver cette cochonnerie de tĂ©lĂ©mĂ©trie ; toi j’sais pas mais moi je dĂ©teste ces trucs qui discutent dans mon dos.
Évitons la tĂ©lĂ©mĂ©trie Ă l’installation
La tĂ©lĂ©mĂ©trie avec Percona n’est pas un opt-in donc on va opt-out comme des grands avant de l’installer. On va exporter une variable qui n’aura pas besoin de rester chargĂ©e ou de l’ĂŞtre de nouveau.
root@lab07-db-01:~$ export PERCONA_TELEMETRY_DISABLE=1
Le paragraphe initial de cet article visant Ă crĂ©er une variable d’environnement globale a complètement Ă©tĂ© supprimĂ© suite au commentaire de Jakadi parce que 1) ce n’Ă©tait pas la bonne mĂ©thode (j’ajoutai ma variable Ă
/etc/environment
) et, 2) la variable d’environnement ne nĂ©cessite aucune persistance.
Assez traîné, on installe Percona
root@lab07-db-01:~$ apt install -y curl
# On télécharge et on installe le paquet d'installation du dépôt
root@lab07-db-01:~$ curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb
root@lab07-db-01:~$ apt install -y gnupg2 lsb-release ./percona-release_latest.generic_all.deb
# On met à jour la liste des paquets auquel on peut prétendre
root@lab07-db-01:~$ apt update
# On mets en place le dépôt 8.0
root@lab07-db-01:~$ percona-release setup ps80
root@lab07-db-01:~$ percona-release enable ps-80 release
# Et on remet Ă jour la liste
root@lab07-db-01:~$ apt update
# Pour enfin installer notre SGBD
root@lab07-db-01:~$ apt install percona-server-server
LĂ tu acceptes les paquets supplĂ©mentaires nĂ©cessaires au bon fonctionnement. L’agent de tĂ©lĂ©mĂ©trie fait d’ailleurs encore parler de lui, on va lui faire sa fĂŞte.
Pendant l’installation de MySQL, j’ai choisi de ne pas configurer de mot de passe root MySQL et de conserver l’authentification legacy.
# On désactive le service de télémétrie
root@lab07-db-01:~$ systemctl disable percona-telemetry-agent
Removed "/etc/systemd/system/multi-user.target.wants/percona-telemetry-agent.service".
# On confirme ce choix dans my.cnf. Printf ici plutĂ´t qu'echo pour ajouter les sauts de ligne
root@lab07-db-01:~$ printf "\n[mysqld]\npercona_telemetry_disable=1" >> /etc/mysql/my.cnf
# Enfin on enfonce le clou
root@lab07-db-01:~$ mysql
mysql> UNINSTALL COMPONENT "file://component_percona_telemetry";
Query OK, 0 rows affected (0,02 sec)
# On redémarre mysql
root@lab07-db-01:~$ systemctl restart mysql
La loose on aura fait plus de boulot pour dĂ©sactiver la tĂ©lĂ©mĂ©trie que pour ce qu’on voulait faire initialement. Ils doivent vraiment y tenir chez Percona…
Migration de la base de données
Export aka dump
On va exporter, créer un dump, notre base de données wordpress sur lab07-front-01
et l’envoyer sur lab07-db-01
. On peut faire plus court, plus direct, on peut tirer les fichiers plutĂ´t que de les pousser. Tu feras comme tu veux quand tu feras ton propre labo ou que tu Ă©criras un article !
# mysqldump est installé directement avec MySQL. Ici on dump la base,
root@lab07-front-01:~$ mysqldump wordpress --routines --triggers > /tmp/wordpress.sql
# On pousse le dump vers lab07-db-01 avec scp, en dehors du lab on aurait utilisé rsync
root@lab07-front-01:~$ scp /tmp/wordpress.sql lab07-db-01:/tmp
root@lab07-db-01's password:
wordpress.sql 100% 137KB 20.0MB/s 00:00
Import
On va créer la base de données sur lab07-db-01
, notre utilisateur avec ses droits depuis la CLI MySQL.
root@lab07-front-01:~$ pwgen -sBc 14 1
JH3uYwPE7qhY39
root@lab07-front-01:~$ mysql
mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0,02 sec)
mysql> CREATE USER "wordpress"@"%" IDENTIFIED BY "JH3uYwPE7qhY39";
Query OK, 0 rows affected (0,14 sec)
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"%";
Query OK, 0 rows affected (0,03 sec)
mysql> ^DBye
Maintenant on va faire manger le dump Ă MySQL sur lab07-db-01
. Pour cela, on a deux mĂ©thodes, l’import depuis l’OS ou depuis MySQL.
Depuis l’OS :
root@lab07-db-01:~$ mysql wordpress < /tmp/wordpress.sql
Depuis la CLI MySQL :
mysql> use wordpress;
Database changed
mysql> source /tmp/wordpress.sql
Query OK, 0 rows affected (0,00 sec)
[...]
Query OK, 0 rows affected (0,00 sec)
Statement prepared
Query OK, 1 row affected (0,01 sec)
[...]
Query OK, 142 rows affected (0,09 sec)
Records: 142 Duplicates: 0 Warnings: 0
[...]
Query OK, 2 rows affected (0,01 sec)
Records: 2 Duplicates: 0 Warnings: 0
[...]
Query OK, 5 rows affected (0,01 sec)
Records: 5 Duplicates: 0 Warnings: 0
[...]
Query OK, 18 rows affected (0,01 sec)
Records: 18 Duplicates: 0 Warnings: 0
mysql>
Une bonne partie des manipulations de création de la BDD, de basculer vers cette BDD et tout aurait pu être épargnée avec des options de mysqldump
mieux senties :
root@lab07-front-01:~$ mysqldump -B wordpress --routines --triggers --add-drop-database > /tmp/wordpress.sql
-B
indique que l’on va dump au niveau BDD, on lui indique lesquelles--add-drop-database
indique d’ajouter les mentions de supprimer les BDD avant leur crĂ©ation
C’est cette version lĂ qu’on prĂ©fĂ©rera conserver pour effectuer des dumps ; d’ailleurs tu voudras peut-ĂŞtre pas dump vers /tmp qui se vide Ă chaque redĂ©marrage.
Adaptation de la configuration du front
On va modifier la configuration de WordPress pour se connecter à notre serveur dédié à la BDD.
root@lab07-front-01:~$ vi /var/www/lab07.lab/wp-config.php
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** Database username */
define( 'DB_USER', 'wordpress' );
/** Database password */
define( 'DB_PASSWORD', 'JH3uYwPE7qhY39' );
/** Database hostname */
define( 'DB_HOST', 'lab07-db-01' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
[...]
Si comme moi t’Ă©tais Ă la bourre pour la modification du fichier hosts, il faudra peut-ĂŞtre redĂ©marrer Apache. Pour ĂŞtre certain que tout va bien, pense aussi Ă Ă©teindre MySQL sur lab07-front-01
.
root@lab07-front-01:~$ systemctl stop mysql
MĂ©nage
Si tout fonctionne, on va pouvoir désinstaller MySQL.
# On liste les paquets installés dont le nom intègre le motif "percona"
root@lab07-front-01:~$ dpkg -l | grep percona
ii percona-release 1.0-29.generic all Package to install Percona gpg key and APT repos
ii percona-server-client 8.0.37-29-1.bookworm amd64 Percona Server database client binaries
ii percona-server-common 8.0.37-29-1.bookworm amd64 Percona Server database common files (e.g. /etc/mysql/my.cnf)
ii percona-server-server 8.0.37-29-1.bookworm amd64 Percona Server database server binaries
ii percona-telemetry-agent 1.0.1-1.bookworm amd64 Percona Telemetry Agent gathers information and metrics from Percona products installed on the host.
root@lab07-front-01:~$ apt purge percona-server-server percona-telemetry-agent percona-server-common percona-server-client percona-release
La désinstallation a proposé de supprimer le dossier de données /var/lib/mysql
mais on aurait pu le faire manuellement.
root@lab07-front-01:~$ rm -rf /var/lib/mysql
Fin de la bande
3 rĂ©flexions sur « Laboratoire infra Linux HA #2 – SĂ©paration de la BDD »
“`source /etc/environment“`
La variable ne sera dĂ©fnie que dans le shell courant (pas d’instruction export). Il faudra rouvrir une session pour que le fichier /etc/environment soit pris en compte pour la session.
Par ailleurs, et fort heureusement, on ne peut pas modifier le valeur d’une variable d’environnement pour un processus en cours d’exĂ©cution. Il faut s’assurer que le processus a bien Ă©tĂ© redĂ©marrĂ© avec la nouvelle valeur.
Les variables d’enironnment globales devraient ĂŞtre dĂ©finies dans /etc/security/pam_env.conf et pour un service en particulier son unitĂ© de service systemd.
Merci Jakadi pour les prĂ©cisions et les corrections, c’est sympa. Je vais regarder ça et je corrigerai.
Encore merci pour ton commentaire, ça m’a ouvert pas mal de sujets sur lesquels me documenter (
systemctl edit mysql.service
par exemple). Dans les faits, utiliser /etc/environment Ă©tait plus qu’overkill parce que ça ne dĂ©sactive que la tĂ©lĂ©mĂ©trie d’installation, un simple export aurai fait le boulot (le reste de la tĂ©lĂ©mĂ©trie est dĂ©sactivĂ©e diffĂ©remment).Sachant que la variable d’environnement est crĂ©e avant l’installation de Percona il n’y a pas de processus Ă redĂ©marrer.
Je vais chercher mais actuellement je ne sais comment m’assurer que le processus a pris en compte la variable.