Ça fait longtemps que je cherche un truc simple qui puisse me permettre de faire un backup à chaque jours de mes bases de données pour mes projets en développements, et ce, sur un serveur distant*. En cas de problème au moins je ne perdrais pas le schéma et les données initiales qui seraient dans les tables de ces DB.

Donc sans plus attendre :

#!/bin/bash
MYSQLUSER=root;
MYSQLPASS=root;
SSH=user@backup.server.com;
for I in $(mysql -e 'show databases' -u $MYSQLUSER --password=$MYSQLPASS -s --skip-column-names);
    do mysqldump -u $MYSQLUSER --password=$MYSQLPASS $I | gzip -c | ssh $SSH "cat > /home/user/mysqlbackups/$I-`date +%Y_%W`.sql.gz";
done

Voici un résumé de ce que ça fait :

  1. Pour chaque nom de database mysql,
  2. faire un mysqldump
  3. gzipper (compresser) le output de mysqldump
  4. Envoyer par SSH le output de gzip dans un fichier nommé selon le format “dbname-2010_52.sql.gz” (où 2010 est l’année et 52 est la semaine (00-52)) vers le serveur distant,
  5. dans le répertoire spécifié (/home/user/mysqlbackups/)

Je met ce code dans un fichier mysqlbackup.sh auquel je permet l’exécution (chmod a+x mysqlbackup.sh). Ensuite, j’ajoute une entrée à mon crontab pour que ce script soit exécuté à tous les jours à 14h00 :

0 14 * * *                 /Users/juliend2/scripts/mysqlbackup/mysqlbackup.sh