Mysql : sauvegarde quasi ON LINE
Mysql : sauvegarde quasi ON LINE jppL'ensemble de scripts présentés ci dessous permet de sauvegarder une base Mysql/MariaDB sans pratiquement interrompre son fonctionnement.
Pour que ces scripts soient utilisables il faut pouvoir effectuer un "snapshot" LVM du disque contenant la base, votre répertoire /var/lib/mysql est bien sur une partition LVM ?
Ici la base est installée confortablement dans un volume LVM "posé" sur un Raid 10 de SSD ce qui permet entre autres vitesse et sécurité.
Le principe général est le suivant :
- Effectuer un "flush" sur la base principale, dans le style "WITH WRITE LOCK"
- Prendre un "snaphot" de la partition LVM de la base principale
- Noter la position du binlog ou le GTID, ça peut servir à resynchroniser un esclave restauré/créé à partir de ce dump
- Monter ce snapshot dans le système de fichiers
- Libérer la base principale (UNLOCK TABLES)
- Lancer une instance Mysql/MariaDB "bis" sur le snapshot
- Effectuer tranquillement votre dump sur une base cohérente et qui ne bouge pas !
- Stopper la base "bis"
- Démonter le snapshot
- Détruire le snapshot.
Les scripts présentés effectuent l'ensemble de ces opérations :
La procédure LC_DUMP réalise les opérations suivantes :
1 : FLUSH tables sur base principale
2 : Création et montage d'un snapshot dans le système de fichiers
3 : Lancement nouvelle instance spécifique de Mysql/MariaDB
4 : Lancement des dumps en parallèle de toutes les bases
5 : Arret de l'instance spécifique
6 : démontage et suppression du snapshot
La procédure LC_DUMP enchaîne l'ensemble des phases.
Cet ensemble lance en parallèle les différents dumps, il faut donc, de préférence, une machine largement multiprocesseurs. Deux ou quatre processeurs par base seront les bienvenus ... et permettrons une performance maximale par utilisation du maximum de processeurs disponibles.
Compter deux processeurs par base + N pour lbzip2. Il est aussi possible d'utiliser plusieurs fichiers paramètres avec une seule base et d'enchaîner les traitements.
Inventaire :
1) Procédures
LC_DUMP
Cette procédure gère l'enchaînement des opérations
DUMPBASES
Réalise le dump des bases en parallèle
GERE_SNAP
Réalise la gestion du snapshot :
1 : nom du fichier paramètres (DUMP_PARAM.param)
2 : action à réaliser
- "CRE" création et montage du snapshot
- "DEL" démontage et destruction du snapshot
GERE_MYSQL
Lance et stoppe l'instance Mysql/MariaDB spéciale dump
1 : nom du fichier paramètres (DUMP_PARAM.param)
2 : action à réaliser
- "start" lance l'instance
- "stop" stoppe l'instance
LC_DUMP.fct
Fonctions communes aux différents modules.
MYSPECIAL
script connexion à la base "spéciale dump", en cas d'ennuis ...
2) Paramètres.
DUMP_PARAM.param
Contient les paramètres principaux
La liste des bases à dumper
Nom des objets répertoires, VG et sockets ...
Nom des fichiers de paramètres pour mysql et mysqldump
Quelques valeurs utilisées à des fins de contrôle de la
taille du snapshot : Taille mini, % devant rester à la
fin des opérations pour détecter une saturation de l'espace.
admin_default.cnf
Contient les paramètres de connexion de mysql à l'instance "dump"
mysqld_default_file.cnf
Contient le paramétrage de l'instance spécifique "dump" (type fichier "my.cnf")
mysqldump_default_file.cnf
Contient le paramétrage de l'utilitaire "mysqldump"
serveur_local_root
Contient le paramétrage de connexion de "root" à l'instance principale
Ces fichiers (.cnf) de configuration contiennent des couples utilisateur/mot de passe et doivent donc être tenus à l'écart des yeux indiscrets ...
Remarques :
-----------
Le montage de disque nécessite les droits "root" --> exécuter les procédures avec "sudo".
Les procédures "GERE_SNAP" et "GERE_MYSQL" peuvent être exécutées "en solo" en utilisant "sudo".
Télécharger les scripts (tar.xz).
Note 2022 : cela fonctionne depuis des années et cela a déjà permis plusieurs restaurations, création d'esclaves pour des bases qui n'étaient pas ainsi sécurisées.
Le "cluster" maître/maître avec "fail over" c'est le pied ultime de la sécurité.