Ç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 :
- Pour chaque nom de database mysql,
- faire un mysqldump
- gzipper (compresser) le output de mysqldump
- 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, - 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