Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
|
cynod:config_avancee:restaurationdonnees [2024/04/21 22:58] yannick.bribaud créée |
cynod:config_avancee:restaurationdonnees [2024/08/13 11:52] (Version actuelle) sokhnamariama.sene |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Procédure de restauration des données à partir d'une ou plusieurs Sauvegarde ====== | + | ====== 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. | 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 | + | * **Prérequis** |
| - | - Avoir accès aux bases de données du labs. | + | - Disposer en <color #ed1c24>**local**</color> 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). |
| - | - Disposer d'un outil d'administration de bases de données. Exemple: DBeaver ou Workbench. | + | - Se servir d'un outil d'administration de base données déjà installé. Exemple: Workbench ou dbeaver. |
| - | - Avoir accès à JENKINS | + | |
| - | - Disposer d'une sauvegarde de données sur une période données. | + | |
| + | ==== 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. <WRAP left round box 70%> 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; | ||
| + | </WRAP> | ||
| + | |||
| + | * Restaurer les données de la sauvegarde dans la base de données <color #ed1c24>cynod_nom_client_periode_sauvegarde</color><WRAP left round box 60%> | ||
| + | === Procédure de restauration de données de la sauvegarde. === | ||
| + | * **USE** <color #ed1c24>cynod_nom_client_periode_sauvegarde</color>; | ||
| + | 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 | ||
| + | </WRAP> | ||
| + | |||
| + | * Restaurer les données de la production dans la base de données <color #ed1c24>cynod_nom_client_prod</color><WRAP left round box 60%> | ||
| + | === Procédure de restauration de données de la production. === | ||
| + | * **USE** <color #ed1c24>cynod_nom_client_prod</color>; | ||
| + | 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 | ||
| + | </WRAP> | ||
| + | |||
| + | * Effectuer une requête croisée entre la base de données de **sauvegarde** et la base de données de **production** <WRAP left round box 60%> | ||
| + | **SELECT** * **FROM** cynod_nom_client_periode_sauvegarde.nom_table nt **WHERE** nt.champ **not in** ( **SELECT** champ **FROM** cynod_nom_client_prod.nom_table); | ||
| + | </WRAP> | ||
| + | |||
| + | * Créer une table temporaire pour stocker le résultat de la requête **si résultat il y a**. <WRAP left round box 70%> | ||
| + | **CREATE TABLE** temp_nom_table_periode **like** nom_table; | ||
| + | </WRAP> | ||
| + | |||
| + | * Insérer les données manquantes dans la **table temporaire** <WRAP left round box 75%> | ||
| + | **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); | ||
| + | </WRAP> | ||
| + | |||
| + | * Faire un **dump** de la table temporaire <WRAP left round box 85%> | ||
| + | **mysqldump -u** nom_user_db **-p** nom_base_données nom_table_temporaire_a_dumper **>** chemin_dossier_stockage_du_dump/nom_du_dump.sql | ||
| + | </WRAP> | ||
| + | |||
| + | * 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.<WRAP left round box 100%> | ||
| + | * 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; | ||
| + | </WRAP> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| - | - Etapes : | ||
| - | * Restaurer la sauvegarde avec Jenkins. | ||
| - | * Tapez la requête de sélection sur la période où les données ont été perdues. ''Select * from nom_table nt where nt.date>=debut_date_perte and nt.date<=fin_date_perte; '' | ||
| - | * Exportez les résultats sous un format de script **sql**. | ||
| - | * Créez une table temporaire. ''CREATE TABLE temp_nom_table_periode like table_cible;'' | ||
| - | * Modifiez le script avec le nom de la table temporaire. | ||
| - | * exécutez le script afin d'insérer les données dans la table temporaire. | ||
| - | * Si l'insertion se déroule sans problème dans la table temporaire alors dupliquez le script et modifiez le nom de la table avec la table cible. | ||
| - | * Fournissez le script d'insertion dans la table temporaire et le script d'insertion dans la table cible. | ||