Configurer une sauvegarde locale MariaDB/MySQL sur Debian 11 « bullseye »

Tout d'abord, si tu veux faire une sauvegarde automatique de MariaDB sur Debian 11, c'est simple !

Et attention les amis, je m'adresse à tout le monde, car avant cela : j'ai une petite info pour vous. Si vous pensez que votre sauvegarde locale est la solution à tous vos problèmes, et bien détrompez-vous ! C'est pas parce que vous avez copié vos données sur votre ordinateur que vous êtes à l'abri de tout pépin.

Non, non, non, je vous vois venir avec vos gros sabots. Faut pas confondre une sauvegarde locale avec une sauvegarde de qualité. Parce que si votre stockage se fait la malle, vous pouvez dire adieu à vos données. Et si vous voulez pas vous retrouver dans la panade, vous avez intérêt à en faire ensuite une copie elle aussi automatique sur un autre support, comme un disque dur externe, un cloud ou même une clé USB.

Donc, pour résumer : une sauvegarde locale, c'est bien beau, mais c'est pas une vraie sauvegarde. Alors, mes amis, faites gaffe à pas vous faire avoir !

Ceci étant dit, lecteur, si veux continuer, tu suis ces étapes-là :

D'abord, tu tapes ça :

sudo apt install mariadb-backup

Après, tu crées un fichier pour la config de la sauvegarde. Par exemple, tu peux faire :

sudo nano /etc/mysql/mariadb.conf.d/mariadb-backup.cnf

Et là, tu mets ça :

[mariabackup]
user = backup
password = TonMotDePasse

Et tu remplaces "TonMotDePasse" par ton propre mot de passe.

Ensuite, tu créés un compte utilisateur pour avoir le droit d'effectuer la sauvegarde. Pour ça, tu tapes :

sudo mysql

Et après, tu tapes :

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'TonMotDePasse';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT, CONNECTION ADMIN ON *.* TO 'backup'@'localhost';

Encore une fois, tu remplaces "TonMotDePasse" par ton propre mot de passe.

Après, tu crées le script de sauvegarde. Pour ça, tu tapes :

sudo nano /usr/local/bin/mariadb-backup.sh

Et là, tu mets ça :
— Pour ma part j'ai configuré le nombre max de backups à 504 (21 jours à raison d'une sauvegarde chaque heure), au lieu de 42—

#!/bin/bash
MAX_BACKUPS=42
BACKUP_DIR=/var/backups/mysql
DATE=$(date +%Y-%m-%d-%H-%M-%S)

# Créer une nouvelle sauvegarde
mariabackup --backup --target-dir=$BACKUP_DIR/$DATE

# Compter le nombre de sauvegardes actuelles
NUM_BACKUPS=$(find $BACKUP_DIR -maxdepth 1 -type f -name "*.xz" | wc -l)

# Si le nombre de sauvegardes est supérieur à MAX_BACKUPS, supprimer la plus ancienne
if [ $NUM_BACKUPS -gt $MAX_BACKUPS ]; then
OLDEST_BACKUP=$(find $BACKUP_DIR -maxdepth 1 -type f -name "*.xz" | sort | head -n 1)
rm -f $OLDEST_BACKUP
fi

# Compresser la sauvegarde en format xz, on est pas pressés donc priorité cpu faible
nice -n 19 tar -cJf $BACKUP_DIR/$DATE.tar.xz $BACKUP_DIR/$DATE

# Supprimer la sauvegarde non compressée
rm -rf $BACKUP_DIR/$DATE

Enregistre et ferme le fichier de script, puis rends-le exécutable en tapant :

sudo chmod +x /usr/local/bin/mariadb-backup.sh

Et enfin, configure une tâche Cron pour que le script de sauvegarde s'exécute automatiquement. Par exemple, si tu veux que ça se fasse tous les jours à minuit, tu tapes :

sudo crontab -e

Et tu ajoutes ça à la fin du fichier de tâches Cron : (une sauvegarde chaque jour)

0 0 * * * /usr/local/bin/mariadb-backup.sh

#Autre possibilité, sauvegarder toutes les 8 heures :

0 */8 * * * /usr/local/bin/mariadb-backup.sh

Avec cela, tu aura donc une "sauvegarde" locale de MariaDB. N'oublie pas ensuite de faire une copie régulière sur un autre support.