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