Forum Linux.général [Tuto/HowTo] Protéger ses Bases de Données MySQL/MariaDB contre les pannes matérielles - Partie 1

Posté par  . Licence CC By‑SA.
2
27
avr.
2017

Sommaire

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.
  • Il va de soit que vous pouvez remplacer Nextcloud par Owncloud si l'envie vous prend.
  • Note : Ce tutoriel est la première partie et traite de la partie backup. (la deuxième partie traitera du Cluster MySQL et a besoin de ton aide chers Hacktiviste! )
  • Note bis: ce tutoriel a été testé avec 1 serveur Nextcloud (ubuntu) et 2 Raspberry (un serveur exportant sa BDD sur le cloud et un s'occupant de recopier les backup).
  • Ce tuto est adapté depuis celui-ci : [Tuto/HowTo] Protéger ses Bases de Données MySQL/MariaDB contre les pannes matérielles

Introduction

  • Pour protéger nos Bases de Données nous allons utiliser deux systèmes :

    • des backups conservés sur deux machines différentes (un serveur Nextcloud + une machine de sauvegarde)
    • un cluster de Bases de Données (voir Partie 2)
  • 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.

--


--

Mise en place du système de Backup avancé

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é

    • utilisation d'un serveur cloud (nextcloud) + un serveur backup (PiDataSave)
    • export des BDD sur le cloud
    • 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"
    nextcloud profil new application password
    nextcloud new application password

  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é
sudo adduser pisave
  1. 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

  2. Créez le dossier local pour accueillir les backups

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)
  1. Accordez les bons droits sur le dossier de réception.
sudo chown -R pisave:pi /media/fromCloud
  1. Créez le script de copie
sudo nano /opt/scripts/updateBackup.sh
  1. Collez et adaptez le code suivant dans /opt/scripts/updateBackup.sh ouvert au point précédent
#!/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
  1. Donnez les bons droits au script
sudo chown pisave:root /opt/scripts/updateBackup.sh
sudo chmod 550 /opt/scripts/updateBackup.sh
  1. Éditez votre crontab
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.
  1. 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.
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"
    nextcloud profil new application password
    nextcloud new application password

  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 )
    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. 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.**

  6. 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 ).

  7. 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

[sera disponible dans la version original du tuto une fois les tutos traitant de MySQL Cluster terminés]

--


--

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.

Post Scriptum : le temps d'édit étant limité, dépêchez-vous d'apporter votre pierre à l'édifice ! :P

PS2 : Enjoy !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.