[Tuto/HowTo] Protéger ses Bases de Données MySQL/MariaDB contre les pannes matérielles

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

[Tuto/HowTo] Protéger ses Bases de Données MySQL/MariaDB contre les pannes matérielles

Message par voxdemonix » sam. avr. 01, 2017 2:21 pm

musique d'ambiance : Best Songs for Playing LOL #28 | 1H Gaming Music
Note : ce tutoriel a été testé avec 1 serveur Nextcloud et 2 Raspberry (un serveur exportant sa BDD sur le cloud et un s'occupant de recopier les backup).


[_coffee2_] Préambule
  • Sur certains sites (LinuxFR par ex) on reproche souvent aux auto-hébergés d'avoir une faible résistance aux pannes et d'être incapable de créer une infrastructure capable de tenir à travers le temps ni de monter en charge. Ce tuto fais partie d'une série de tutos visant à résoudre cette problématique en apportant des systèmes et méthodologies compréhensible et applicable par des noobs.
    Au moins 80% de la procédure est applicable via copier-coller.

[_precheurori_] Introduction
  • Pour protéger nos Bases de Données nous allons utiliser deux systèmes :
    1. des backups conservés sur deux machines différentes (un serveur Nextcloud + une machine de sauvegarde)
    2. un cluster de Bases de Données
    Le Cluster servira déjà de tampon mais s'il tombe en panne ou que des Bases de données sont trop corrompues, le système de backup permettra de ré-injecter une restauration précédente.
    L'utilisation du système de backup peut se faire sans Cluster MySQL.
    L'utilisation d'une machine dédié permet, tant qu'à y aller, de sauvegarder aussi la base de données du cloud afin de se protéger d'une perte de données en cas de panne.

[_precheurori_] Farm Link
Modifié en dernier par voxdemonix le jeu. avr. 27, 2017 3:10 pm, modifié 7 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: Protéger ses Bases de Données MySQL/MariaDB

Message par voxdemonix » mer. avr. 12, 2017 6:40 pm

Mise en place du système de Backup avancé (PiSave)
Note : il n'y a pas besoin d'une machine très puissante pour ce job, il faut juste qu'elle consomme le moins d'énergie possible. Vous pouvez recycler vos vieux RPI type 1.
Résumé
  1. utilisation d'un serveur cloud (nextcloud) + un serveur backup (PiDataSave)
  2. export des BDD sur le cloud
  3. serveur Backup récupère sur le cloud les BDD et les conserve (rsync)
Sur le serveur Cloud
  1. Si vous souhaitez passer par un tunnel SSH, suivez ce tutoriel : [Tuto/HowTo] [GNU/Linux] Sécuriser utilisateur dédié pour Proxy/Tunneling SSH
  2. Rendez-vous sur la WEBUI de Nextcloud et connectez-vous en tant qu'administrateur pour ensuite y créer un utilisateur, par exemple userSaveDataBase.
  3. Reconnectez-vous avec l'utilisateur créé précédemment. Rendez-vous ensuite dans le profil de l'utilisateur (Personnel) et générez "un mot de passe d'application"


  4. Notez le mot de passe quelque part le temps de suivre le tuto (osef pour plus tard, vous pouvez en générer autant que vous le souhaitez).
  5. Vous pouvez décocher tout se qui concerne les flux ( économise de BDD de votre serveur cloud ).
  6. Dans l'onglet Fichiers de Nextcloud, créez un dossier intitulé backup puis dedans créez un dossier intitulé BDD. Ce dossier servira aussi aux scripts afin de vérifier que le montage fonctionne avant de tenter d'écrire dans le dossier.




Sur le serveur backup
  1. Créez un utilisateur dédié
  2. Effectuez un montage Webdav/DAVFS2 normal en suivant ce tuto ou à travers un tunnel SSH en suivant ce tuto. Comme point de montage choisissez /media/cloud
  3. Créez le dossier local pour accueillir les backups
    • Code : Tout sélectionner

      sudo mkdir -p /media/fromCloud/backup/BDD
      • Note : vous pouvez monter un disque dédié sur /media/fromCloud, veillez juste à rajouter dedans les dossiers backup puis dedans BDD. (à titre personnel je vous conseil d'acheter deux clés USB de bonnes factures et de faire un petit raid1 (non striped), vous économiserez ainsi la mémoire système)
  4. Accordez les bons droits sur le dossier de réception.
  5. Créez le script de copie
  6. Collez et adaptez le code suivant dans /opt/scripts/updateBackup.sh ouvert au point précédent
    • Code : Tout sélectionner

      #!/bin/bash
      # use me for copy all files/folders from source to another dest
      #       Version : 1.0 ; Licence WTFPL ; Code by VoxDemonix
      #infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=79&t=561&p=1212#p1212
      
      userToUse="pisave"
      montageLocal="/media/cloud" # Le point de montage locale pour le serveur cloud
      dossierDistant="/backup/" # Le dossier de rangement (sa présence sert aussi à vérifier que le montage fonctionne). Ne terminez pas par /
      dossierLocal="/media/fromCloud/backup/" # Le dossier local qui va recevoir les fichiers/dossiers
      
      
              # montage
      su $userToUse -c "mount $montageLocal"
      
              #VERIFICATION DU MONTAGE
      startTime=`date +%s`
      if [ -d "$montageLocal$dossierDistant" ];then
         endTime=`date +%s`
         runTime=$((endTime-startTime))
         if [ "$runTime" -lt "600" ];then
      
              #ACTION
              su $userToUse -c "rsync --delete-after -r --exclude=".Trash" --exclude=".csync_journal.db" $montageLocal$dossierDistant $dossierLocal"
              su $userToUse -c "umount /media/cloud"
              exit
         else
         echo "$montageLocal => not responding (408) / delais d'attente depasse"
         fi
      else
      echo "$montageLocal$dossierDistant => not exist"
      fi
      
  7. Donnez les bons droits au script
    • Code : Tout sélectionner

      sudo chown pisave:root /opt/scripts/updateBackup.sh
      sudo chmod 550 /opt/scripts/updateBackup.sh
  8. Éditez votre crontab
    • Code : Tout sélectionner

      sudo crontab -e
      • Note : comme on définit l'utilisateur dans le script, on est obligé de passer par le cron d'un utilisateur privilégié (root). Si vous souhaitez lancer le script sans root supprimez les su $userToUse -c " devant les commandes et les " en fin des mêmes commandes.
  9. Ajoutez le cron (tâche planifiée) suivant
    Attention : le cron ne doit pas entrer en conflit avec l'export des bases de données de vos clients, veillez à ne pas choir la même plage horaire.
    • Code : Tout sélectionner

      1  15  *  *  *		/opt/scripts/updateBackup.sh
      • 1 15 * * * => Ici on choisi 15h01 (se qui évite les heures de trafic intense et normalement tout conflit avec une autre synchro). Si vous préférez lancer toutes les 6 heures, remplacez par 1 */6 * * *
        /opt/scripts/updateBackup.sh => le chemin vers le scripts créé précédemment


Sur les clients (serveur hébergeant les bases de données)
  • Depuis une simple installation de MySQL/MariaDB
    1. Rendez-vous sur la WEBUI de Nextcloud et connectez-vous en tant qu'administrateur pour ensuite y créer un utilisateur, par exemple (userSaveDataBase).
      • Note : par sécurité il est conseillé, mais pas obligatoire, d'utiliser un utilisateur dédié par client (ainsi un client compromis n'aura pas accès aux BDD des autres).
    2. Reconnectez-vous avec l'utilisateur créé précédemment. Rendez-vous ensuite dans le profil de l'utilisateur (Personnel) et générez "un mot de passe d'application"


    3. Ensuite dans l'onglet Fichiers de Nextcloud créez un dossier intitulé "nomDeMonServer_BDD" pour recevoir les copies des Bases de données
    4. Partagez le dossier nomDeMonServer_BDD avec l'utilisateur de votre serveur Backup ( pisave )
    5. Notez le mot de passe quelque part le temps de suivre le tuto (osef pour plus tard, vous pouvez en générer autant que vous le souhaitez).
    6. Suivez ce tuto si vous passez par SSH ou celui-ci pour passer sans SSH, afin d'effectuer un montage distant webdav/davfs2 en utilisant l'utilisateur créé précédemment et le "mot de passe de l'application" généré juste après. Comme point de montage choisissez /media/cloud.
    7. Mettez en place le système de sauvegarde des bases de données avec automysqlbackup en suivant ce tutoriel, le dossier de destination ( BACKUPDIR ) étant celui créé au point 4 ( /media/cloud/nomDeMonServer_BDD ).
    8. Lancez automysqlbackup afin de tester son bon fonctionnement. Si vous voyez bien une copie de votre base dans le dossier /media/cloud/nomDeMonServer_BDD/latest alors c'est terminé.


    Depuis MySQL Cluster
    Note : d'abord terminer le tuto sur l'installation de MySQL Cluster sur ubuntu/debian ainsi que sur raspbian (raspberry pi)
Modifié en dernier par voxdemonix le ven. mai 12, 2017 2:23 pm, modifié 9 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: Protéger ses Bases de Données MySQL/MariaDB

Message par voxdemonix » jeu. avr. 13, 2017 12:21 am

Modifié en dernier par voxdemonix le mar. sept. 26, 2017 8:26 pm, modifié 1 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: Protéger ses Bases de Données MySQL/MariaDB

Message par voxdemonix » jeu. avr. 13, 2017 12:58 am

Astuces
  • Comment gérer les backups/restaurations facilement sur le Serveur Backup ?
    • Réponse : Sur votre serveur cloud vous pouvez monter votre serveur backup via sftp. Vous pouvez aussi effectuer directement un montage sftp ou sshfs dans votre système de fichiers.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité