====== Procédure de restauration des données à partir d'une ou plusieurs sauvegardes ====== La perte des données observée sur les différentes bases de données des clients nous a conduit à rédiger un ensemble de procédures permettant de restaurer les données à partir d'une sauvegarde mise à disposition. * **Prérequis** - Disposer en **local** de la sauvegarde et de la base de données anonymisées de la production du client en question (Par local nous voulons dire avoir les fichiers SQL des 2 bases de données et être en mesure de les restaurer sur votre serveur local de base de données). - Se servir d'un outil d'administration de base données déjà installé. Exemple: Workbench ou dbeaver. ==== Les étapes ==== * Créer deux (2) bases de données l'une contiendra les données de la sauvegarde et l'autre les données anonymisées de la production. Requêtes à exécuter pour créer les différentes bases de données: * **CREATE DATABASE** cynod_nom_client_periode_sauvegarde; * **CREATE DATABASE** cynod_nom_client_prod; * Restaurer les données de la sauvegarde dans la base de données cynod_nom_client_periode_sauvegarde === Procédure de restauration de données de la sauvegarde. === * **USE** cynod_nom_client_periode_sauvegarde; Modifier la taille du paquet de communication entre le client et le serveur afin d'empêcher MYSQL de générer des erreurs lors de la restauration des données. convertir la taille des données en Megaoctets puis : ''max_taille_paquet = taille_données_à_restaurer_en_Mo × 1024 × 1024 + 500 × 1024 ×1024'' 500Mo pour avoir une marge de sécurité dans le transfert de grosses quantités de données. * **SET GLOBAL max_allowed_packet**=max_taille_paquet; * **SOURCE** chemin_vers_votre_saugarde/sauvegarde.sql * Restaurer les données de la production dans la base de données cynod_nom_client_prod === Procédure de restauration de données de la production. === * **USE** cynod_nom_client_prod; Modifier la taille du paquet de communication entre le client et le serveur afin d'empêcher MYSQL de générer des erreurs lors de la restauration des données. convertir la taille des données en Megaoctets puis : ''max_taille_paquet = taille_données_à_restaurer_en_Mo × 1024 × 1024 + 500 × 1024 ×1024'' 500Mo pour avoir une marge de sécurité dans le transfert de grosses quantités de données. * **SET GLOBAL max_allowed_packet**=max_taille_paquet; * **SOURCE** chemin_vers_votre_bd_prod/prod.sql * Effectuer une requête croisée entre la base de données de **sauvegarde** et la base de données de **production** **SELECT** * **FROM** cynod_nom_client_periode_sauvegarde.nom_table nt **WHERE** nt.champ **not in** ( **SELECT** champ **FROM** cynod_nom_client_prod.nom_table); * Créer une table temporaire pour stocker le résultat de la requête **si résultat il y a**. **CREATE TABLE** temp_nom_table_periode **like** nom_table; * Insérer les données manquantes dans la **table temporaire** **INSERT INTO** temp_nom_table_periode **SELECT** * **FROM** cynod_nom_client_periode_sauvegarde.nom_table nt **WHERE** nt.champ not in ( **SELECT** champ **FROM** cynod_nom_client_prod.nom_table); * Faire un **dump** de la table temporaire **mysqldump -u** nom_user_db **-p** nom_base_données nom_table_temporaire_a_dumper **>** chemin_dossier_stockage_du_dump/nom_du_dump.sql * Fournir le **dump** de la table à l'équipe **INFRA** accompagné de la **requête d'insertion** dans la table où l'on doit restaurer les données extraites de la sauvegarde. * Requête de vérification des données au niveau de la base de données en production pour s'assurer que les données contenues dans la table temporaire n'y sont pas déjà. ***SELECT * FROM** table_a_restaurer nt **WHERE** nt.champ in (**SELECT** champ **FROM** table_temporaire); * Insertion dans la table sans prendre en compte la colonne ID des données. ***INSERT INTO** nom_table (liste_colonnes_sans_la_colone_ID) **SELECT** liste_des_colonnes_sans_la_colone_ID **FROM** nom_table_temporaire;