MySQLdump est un outil permettant d’effectuer des backups de vos bases de données, nous allons le combiner avec cron avec d’automatiser vos sauvegardes.

Pré-requis

Avant de préparer nos sauvegardes, vous devez connaître le login (ex: root) et mot de passe d’accès à MySQL.
En cas d’oubli de ce mot de passe, vous pouvez le réinitialiser par la commande suivante :

sudo mysqladmin -u root password nouveau_mot_de_passe -p

Nous allons aussi définir un utilisateur sur votre système qui sera dédié pour vos sauvegardes MySQL.

sudo useradd -d /home/save_db/ -m save_db
sudo passwd save_db
Password: save_db_password
Retype new password: save_db_password
passwd: password updated successfully

Maintenant, nous allons stocker le login et mot de passe d’accès à votre base de donnée MySQL dans un fichier de configuration et cela pour ne pas faire apparaître ces informations dans notre crontab par la suite :

echo "[mysqldump]" > /home/save_db/.my.cnf
echo "user=login_mysql" >> /home/save_db/.my.cnf
echo "password=password_mysql" >> /home/save_db/.my.cnf

### Droits en lecture/écriture uniquement pour le propriétaire save_db
chmod 600 /home/save_db/.my.cnf
chown save_db:save_db /home/save_db/.my.cnf

Utilisation de MySQLdump

MySQLdump est un outil permettant la sauvegarde et la restauration de données dans une base MySQL.
Il est possible d’agir sur toutes les bases de donnée du système, une seule base, une seule table ou de faire une sélection de table d’une ou plusieurs bases comme le montre les exemples suivants :

### Sauvegarde de toutes les bases de données
mysqldump --user=login_mysql --password=password_mysql --all-databases > dump_bdd.sql
### Sauvegarde d'une seule base de donnée 
mysqldump -u login_mysql -p password_mysql --databases nom_bdd > dump_bdd.sql
### Sauvegarde de plusieurs bases de données
mysqldump -u login_mysql -p password_mysql --databases nom_bdd1 nom_bdd2 > dump_bdd.sql
### Sauvegarde d'une seule table
mysqldump -u login_mysql -p password_mysql -B nom_bdd --tables nom_table > dump_bdd.sql
### Sauvegarde de plusieurs tables
mysqldump -u login_mysql -p password_mysql -B nom_bdd --tables nom_table1 nom_table2 > dump_bdd.sql

Les paramètres de configuration de MySQLdump sont nombreux et le plus courants sont les suivants :

Paramètre pour spécifier l’utilisateur MySQL.

Paramètre pour spécifier le mot de passe de l’utilisateur MySQL.

Paramètre pour spécifier que la sauvegarder concerne toute la base de donnée.

Paramètre pour spécifier la base de donnée à sauvegarder.

Paramètre pour spécifier la table à sauvegarder.

Paramètre pour ajouter un DROP TABLE avant chaque INSERT.

Paramètre pour spécifier le nom des colonnes dans les INSERT.

Ajouter des quotes </strong> <strong> aux noms des tables et colonnes.

La liste est exhaustive et consultable sur la documentation :


Sauvegarde et restauration

Nous allons utiliser une commande pour la mise en place de la sauvegarde pour une seule table en omettant volontairement le user et password que notre système récupèrera automatiquement sur le fichier préalablement configuré /home/save_db/.my.cnf :

mysqldump --add-drop-table --complete-insert --quote-names -B nom_bdd > /home/save_db/dump_nom_bdd_$(date +%Y-%m-%d).sql
nom_bdd

Affichage de la date dans le nom du fichier de sauvegarde SQL.

Il est également possible de compresser le fichier si la volumétrie est assez importante grâce à gzip :

mysqldump --add-drop-table --complete-insert --quote-names -B nom_bdd | gzip > /home/save_db/dump_nom_bdd_$(date +%Y-%m-%d).sql
nom_bdd

Enfin, si vous désirez restaurer une sauvegarde, l’action s’effectue de la manière suivante (login et mot de passe facultatif comme pour la sauvegarde) :

mysql -u login_mysql -p password_mysql nom_bdd < dump_nom_bdd_YYY-MM-DD.sql

Création du cron

Finalement, il nous reste à programme une tâche cron de manière à rendre automatique la sauvegarde :

crontab -u save_db -l
### Sauvegarde de la base de donnée nom_bdd tous les lundis à 10H00
* * * * 1 /usr/bin/ mysqldump --add-drop-table --complete-insert --quote-names -B nom_bdd | gzip > /home/save_db/dump_nom_bdd_$(date +%Y-%m-%d).sql

Texte


Conclusion

Votre sauvegarde automatique est en place est sera localisée à l’emplacement /home/save_db/
Il est également possibleme de suivre les opérations réalisés et donc de voir si la sauvegarde a fonctionné sur /var/log/syslog