Accueil Blog A propos Contact Connexion
Retour à la liste des articles Sauvegardes journalières et accès à distance sur votre serveur MySQL

Sauvegardes journalières et accès à distance sur votre serveur MySQL

Olivier Prieur | il y a 7 ans | il y a 7 jours Gnu/Linux | 0 | 3005

Mysqldump : c'est quoi ?

Sources : https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

L'utilitaire client mysqldump effectue des sauvegardes logiques, produisant un ensemble d'instructions SQL qui peuvent être exécutées pour reproduire les définitions d'objets et les données de table d'origine de la base de données.

Il peut "sauvegarder" une ou plusieurs bases de données MySQL et les "transférer" vers un autre serveur SQL.

La commande mysqldump peut également générer des résultats dans CSV, d'autres textes délimités ou au format XML.

En gros, en utilisant la commande mysqldump avec certains arguments, on peut se connecter directement sur le serveur distant et rapatrier les bases voulues.

ETAPE 1 : PREPARATION

On va préparer le terrain sur le serveur distant où nous allons créer un utilisateur "spécial", chargé exclusivement des sauvegardes (pour ce cas précis).

Postulats de départ :


  • MySQL est installé et fonctionne sur vos deux serveurs

  • phpmyadmin est installé et focntionnel sur votre serveur distant



On travaillera donc avec phpMyadmin plutôt qu'en ligne de commande.

Création d'un "remote-user" :


  • Se connecter sur phpMyadmin

  • Aller sur Utilisateurs puis Ajouter utilisateur

  • Création d'un utilisateur : choisissez un nom (Exemple : remote-user)

  • Client : choisissez "tout client" ou symbole %

  • Entrez un mot de passe (solide si possible !)

  • Privilèges globaux : cochez la case "tout cocher"

  • Validez



Vous aurez ainsi un utilisateur qui s'appellera "remote-user" avec des privilèges sur tout le serveur / toutes les bases.

ETAPE 2 : CONFIGURATION

On va configurer MySQL pour écouter sur l'adresse IP publique :


  • Ouvrez /etc/mysql/my.cf

  • Commentez la ligne bind-address 127.0.0.1 (en ajoutant un # devant, soit : #bind-address 127.0.0.1)

  • Ajoutez juste en-dessous : bind-address xx.xx.xx.xx (xx.xx.xx.xx étant l'adresse IP publique de votre serveur)

  • Sauvegardez

  • Relancez MySQL : /etc/init.d/mysql restart



Désormais vous pourrez vous connecter "à distance" sur le serveur MySQL.

/!\ : Si vous avez un firewall, pensez à ouvrir le port 3306 sur le serveur distant !

ETAPE 3 : SYNTAXE

Pour faire une sauvegarde journalière des bases MySQL du serveur distant avec la date et l'heure de sauvegarde (soyons fous !), nous allons utiliser mysqldump avec certaines options :

- h : hote distant (ou adresse IP)

- u : utilisateur distant ("remote-user" dans notre exemple)

- p : mot de passe de l'utilisateur distant créé à l'étape 1

Ce qui donne la commande complète suivante :

 /usr/bin/mysqldump -h mon.serveur-distant.com -u remote-user -p'MonMotDePasse' ma-base-mysql > /home/moi/backup/mabase-`date +%Y%m%d`-`date +%H%M`.sql

/!\ : Il n'y a pas d'espace entre -p et le mot de passe qui se trouve entre les guillemets simples : c'est normal !

 Evitez donc d'utiliser un mot de passe qui possède des guillemets simples. Perso, j'ai galéré à en devenir chèvre à cause de ce... détail.

ETAPE 4 : AUTOMATISER LA TACHE AVEC CRON

On va utiliser Cron pour une sauvegarde journalière "automatique" :

 Tapez crontab -e

On va y mettre la ligne suivante (bas de fichier) : @daily /usr/bin/mysqldump -h mon.serveur-distant.com -u remote-user -p'MonMotDePasseQuilEstBeau' ma-base-mysql > /home/moi/backup/mabase-`date +%Y%m%d`-`date +%H%M`.sql (c'est en gros la même commande que précisée plus haut avec l'option @daily qui précise à Cron de se déclencher chaque jour... à 00:00 en l'occurrence).

 Sauvegardez.

ETAPE 5 (facultatif) : SUPPRIMER LES SAUVEGARDES VIEILLES DE 7 JOURS

Effacer automatiquement les sauvegardes vieilles de 7 jours (ou 15 jours, ou 4 jours, ... si vous voulez !) : ça permet de faire un peu de ménage dans les sauvegardes... et de s'y retrouver.

Vous pouvez aussi choisir de ne pas supprimer vos sauvegardes (là, il vaut mieux avoir suffisamment d'espace de stockage), de garder une seule sauvegarde journalière, une sauvegarde par semaine, une sauvegarde mensuelle, etc. Tout dépend de vos besoins.

crontab -e

On va ajouter la ligne suivante : @daily find /mon/repertoire/desauvegarde -type f -mtime +6 -delete (ce qui aura pour effet de supprimer tout fichier dans le répertoire vieux de 7 jours au moins).

Et voila votre/vos base(s) sauvegardée(s) !

Olivier Prieur

Olivier Prieur

Geek quinqua nivernais fan d'ovalie, de musique, de linuxeries et de Net.
Portfolio : https://www.olivierprieur.fr

Commentaires

En soumettant ce formulaire, j’accepte que ce site conserve mes données personnelles via ce formulaire. Aucune exploitation commerciale ne sera faite des données conservées.

Il n'y a actuellement aucun commentaire pour cet article

A la une

Utiliser TailwindCSS dans un projet Symfony 7

Lire l'article

Symfony 7 avec Docker

Lire l'article

Customiser Easyadmin (2) : avec AssetMapper

Lire l'article

Je recherche un nouveau job !

Lire l'article

Les plus lus

Symfony : barre de recherche dans la sidebar 19397

Lire l'article

Débuter avec Symfony 5 : le fichier .env 11933

Lire l'article

VSCode : 10 raccourcis clavier indispensables (Linux) 11599

Lire l'article

GIT / GITHUB : aide-mémoire pour "les nuls" 10192

Lire l'article