0
0 Panier (vide)

Nouveautés

Toutes les nouveautés

Meilleures ventes

Toutes les meilleures ventes

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.

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

MariaDB [(none)]> create user 'backup-user'@'localhost' identified by 'password';

Nous allons ensuite ajuster les droits de cet utilisateur.

MariaDB [(none)]> grant select, show view, lock tables, reload, replication client on *.* TO 'backup-user'@'localhost';

On applique nos modifications dans MariaDB.

MariaDB [(none)]> flush privileges;

Et on quitte MariaDB. Il nous reste maintenant à tester une sauvegarde avec notre utilisateur.

mysqldump -u backup-user -p database_name > data-dump.sql
  • 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.

sudo mariadb
MariaDB [(none)]> create new_database;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> exit

Notre nouvelle base de données est maintenant prête pour recevoir les données.

mysql -u backup-user -p new_database < data-dump.sql

Pour vérifier que toutes les données ont bien été restaurées, reconnectez-vous à MariaDB

MariaDB [(none)]> use new_database;
MariaDB [(none)]> show tables;

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 :

sudo apt install gzip

Modifier les droits du fichier pour le rendre exécutable.

chmod 755 doSqlBackup.sh

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

sudo crontab -e

Ajouter une ligne pour programmer la date / heure du déclenchement de la sauvegarde.

0 1 * * * /chemin/vers/doSqlBackup.sh

Ici, on effectue une sauvegarde tous les jours à 01:00

Leave a comment