Sauvegarder et restaurer vos base de données mysql

Il vous ai jamais arrivé un jour de perdre des données? Combien de temps vous il vous a fallu pour les recréer? ouais ouais c’est difficile, du chagrin et des larmes.. l’être humain n’est pas fiable, bien que le matériel moderne a de plus en plus tendance de l’être. Tous les données ont une valeur, la récréer demande du temps et beaucoup de travail d’où l’importance de la sauvegarde!

Dans ce billet on verra comment sauvegarder et restaurer vos bases de données mysql!

Quels outils?

mysql et mysqldump sont deux commandes disponibles dans mysql qui nous permettront d’effectuer une sauvegarde ou une restauration! on considère que le nom du serveur est 192.168.1.10, l’utilisateur est root et le mot de passe est p455wD

Faire un backup

Pour faire un dump de la base mabase il suffit d’exécuter la commande mysqldump:

mysqldump -h192.168.1.10 -uroot -pp455wd > backupmybase.sql

d’où backupmybase.sql et le fichier qui contiendra le backup et sera crée après exécution de la commande mysqldump

Restaurer une base de données à partir d’un backup

C’est via la commande mysql elle même :

mysql -h192.168.1.10 -uroot -pp455wd < mybackupbase.sql

les signes < et > permettent de rediriger la sortie d’une commande respectivement en lecture et écriture

Sauvegarder toutes les bases de données en une seule commande

mysqldump --user=root --password=p455wd --all-databases | gzip > all_mysql_databases.sql.gz

Créer un script de sauvegarde pour faire un backup de toutes les bases de données

Parfois on a besoin de faire des backups réguliers sans avoir à installer des outils spécialisés sur nos serveurs comme cpanel ou autres, j’ai créé pour vous ce petit script qui permet de faire cela avec la possibilité de supprimer les anciens backup datant de X jours (10 dans notre cas). Créez donc un fichier mysqlbackup.sh contenant le code suivant

# Adresse du serveur
mysql_host="192.168.1.10"
# Nom d'utilisateur mysql
mysql_user="mcherifi"
# Mot de passe mysql
mysql_pwd="p455wd"
# Répertoire de sauvegarde
backup_dir="/home/simo/"
# Nombre de jour pour suppression des anciens backups
delete_after=10

# DEBUT DU SCRIPT
date_debut_sauvegarde="$(date +"%d-%m-%Y")"
current_backupdir=$backup_dir"/"$date_debut_sauvegarde

[ ! -d $backup_dir  ] && mkdir -p $backup_dir  || :
[ ! -d $current_backupdir  ] && mkdir -p $current_backupdir  || :

find ${backup_dir}* -mtime +$delete_after -exec rm -f {} \;
for i in `mysqlshow -h $mysql_host --user=$mysql_user --password=$mysql_pwd | awk -F "^| " '{print $2}' | grep -v '^$'`
do
mysqldump -h $mysql_host --user=$mysql_user --password=$mysql_pwd --add-locks --add-drop-table $i | gzip > $current_backupdir"/"$i.sql.gz | grep '^$'
done;

et voilà le script tout prêt!

Rendre la sauvegarde périodique avec crontab

Crontab est un outil permettant d’exécuter des taches réguliers à un temps précis, on l’utilisera dans notre cas pour effectuer des sauvegarde quotidienne de nos base de données mysql!

Il existe plusieurs répertoires créés par cron permettant d’exécuter des taches régulières:

  • /etc/cron.hourly : les scripts exécutés chaque heure.
  • /etc/cron.daily : les scripts exécutés chaque jour.
  • /etc/cron.weekly : les scripts exécutés chaque semaine.
  • /etc/cron.monthly : les scripts exécutés chaque mois.

Pour exécuter notre script chaque jour, il suffit de le placer dans le répertoire /etc/cron.daily est le tour est joué! toute fois il est possible de préciser le temps exacte d’exécution du script il faut créer un fichier contab avec la commande :

crontab -e

la commande ouvrira l’éditeur de texte standard vi, si vous ne sentez pas à l’aise avec vi, consultez sa documentation officielle

après ajoutez le code suivant à la fin de votre fichier (en mettant le bon chemin du fichier backup.sh) :

0 23 * * *  /home/simo/mysqlbackup.sh

Il ne reste que quittez vi et sauvegarder notre tache avec (Echap:wq)

  • 0 23 * * * Signifie que le script sera exécuté chaque jour à 23h00
  • /home/simo/mysqlbackup.sh est le chemin où se trouve le script de sauvegarde

Cliquez ici pour télécharger le script mysqlbackup.sh, en espérant que ce tutoriel vous sera utile!