Sauvegarder et restaurer votre base de donnée MariaDB / MySQL.
Sauvegarder ma base de données.
Comme nous l'avons vu dans cet autre article, il est recommandé de créer un utilisateur avec des droits limités aux usages nécessaires et suffisant.
Il est donc recommandé de créer un utilisateur dédié à la sauvegarde. Concrètement, notre utilisateur dédié à la sauvegarde n'a absolument pas besoin de créer ou modifier des données. Il a simplement besoin de lire les informations pour les sauvegarder.
Connectez-vous à MariaDB.
Nous allons ensuite créer un utilisateur MariaDB/MySQL avec son mot de passe. Note : Les éléments en bleu sont à mettre à jour avec vos propres informations.
Nous allons ensuite ajuster les droits de cet utilisateur.
On applique nos modifications dans MariaDB.
Et on quitte MariaDB. Il nous reste maintenant à tester une sauvegarde avec notre utilisateur.
- database_name désigne le nom de la base de données à sauvegarder.
- data-dump.sql est le nom du fichier de sauvegarde.
Le fichier data-dump.sql contient maintenant toute la structure et les données de notre base de données databasae_name.
Restauration d'une base de données.
Si suite à une incident par exemple vous devez restaurer les données d'une base de données à partir d'une sauvegarde, procédez comme suit.
Ici, nous supposons que la base de données n'existe pas (plus). Avant de restaurer les données, il faut donc créer une base de données avec le même nom.
Connexion à MariaDB.
Query OK, 1 row affected (0.00 sec)
Notre nouvelle base de données est maintenant prête pour recevoir les données.
Pour vérifier que toutes les données ont bien été restaurées, reconnectez-vous à MariaDB
Si tout s'est bien passé, vous deviez voir la liste des tables rattachées à la base de données new_database.
Automatisation
Idéalement, il est très intéressant de pouvoir automatiser la sauvegarde de TOUTES les bases de données. Pour cela, voici un exemple de script Linux/Bash qui vous aidera à réaliser cette tache. N'hésitez-pas à l'adapter à vos besoins.
#!/bin/bash
# Création d'un datestamp au format YYYYMMDD DATE=$(date +"%Y%m%d") # Dossier où placer les sauvegardes. Il doit exister. BACKUP_DIR="/mysql.backup" # Identifiants MySQL/MariaDB. # A mettre à jour avec l'utilisateur dédié à la sauvegarde. MYSQL_USER="backup-user" MYSQL_PASSWORD="password" # Liste de bases de données à ignorer / ne pas sauvegarder. SKIPDATABASES="Database|information_schema|performance_schema|mysql" # Nombre de jours de conservation des fichiers de sauvegarde (seront effacés après X jours) RETENTION=14 # Création du dossier où sera placé la sauvegarde. Nom du dossier = date de la sauvegarde. mkdir -p $BACKUP_DIR/$DATE # On récupère la liste de toutes les bases de données existantes. databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"` # Chaque base va être sauvegardée dans un fichier séparé. for db in $databases; do echo $db $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz" done # Nettoyage des fichiers plus vieux que X jours. find $BACKUP_DIR/* -mtime +$RETENTION -delete
Pour créer un script, copier / coller le contenu ci-dessus dans un fichier doSqlBackup.sh
Note : Ce script nécessite que gzip - un utilitaire de compression - soit installé sur votre serveur. Si ça n'est pas le cas :
Modifier les droits du fichier pour le rendre exécutable.
Tester le script : ./doSqlBackup.sh
Si tout fonctionne, il devrait y avoir un ou plusieurs fichiers de sauvegarde dans /mysql.backup/date de la sauvegarde
Il ne reste plus qu'à programmer la sauvegarde à l'aide de crontab
Ajouter une ligne pour programmer la date / heure du déclenchement de la sauvegarde.
Ici, on effectue une sauvegarde tous les jours à 01:00