Laboratoire infra Linux HA #2 – SĂ©paration de la BDD

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.

ShellSession
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

ShellSession
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.

ShellSession
# 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 !

ShellSession
# 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.

ShellSession
root@lab07-front-01:~$ pwgen -sBc 14 1
JH3uYwPE7qhY39
root@lab07-front-01:~$ mysql
SQL
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 :

ShellSession
root@lab07-db-01:~$ mysql wordpress < /tmp/wordpress.sql

Depuis la CLI MySQL :

SQL
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 :

ShellSession
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.

ShellSession
root@lab07-front-01:~$ vi /var/www/lab07.lab/wp-config.php
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.

ShellSession
root@lab07-front-01:~$ systemctl stop mysql

MĂ©nage

Si tout fonctionne, on va pouvoir désinstaller MySQL.

ShellSession
# 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.

ShellSession
root@lab07-front-01:~$ rm -rf /var/lib/mysql
fin de la cassette

Fin de la bande

3 rĂ©flexions sur « Laboratoire infra Linux HA #2 – SĂ©paration de la BDD »

  1. “`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.

    1. 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.

      le processus a bien été redémarré avec la nouvelle valeur

      Je vais chercher mais actuellement je ne sais comment m’assurer que le processus a pris en compte la variable.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *