Mysql : sauvegarde quasi ON LINE

L'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 :

  1. Effectuer un "flush" sur la base principale, dans le style "WITH WRITE LOCK"
  2. Prendre un "snaphot" de la partition LVM de la base principale
  3. Noter la position du binlog ou le GTID, ça peut servir à resynchroniser un esclave restauré/créé à partir de ce dump
  4. Monter ce snapshot dans le système de fichiers
  5. Libérer la base principale (UNLOCK TABLES)
  6. Lancer une instance Mysql/MariaDB "bis" sur le snapshot
  7. Effectuer tranquillement votre dump sur une base cohérente et qui ne bouge pas !
  8. Stopper la base "bis"
  9. Démonter le snapshot
  10. 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é.