Voici un petit script bash que vous placerez dans un cron pour sauvegarder vos bases de données. Pour une exécution toutes les heures, ce script :
- Garde un historique des modifications heure par heure pour les deux dernières semaines avec rdiff-backup
- Créer un fichier dump .sql par tables par bases de données
- Garde un backup journalier compressé avec gzip
Prérequis
Le seul prérequis est rdiff-backup.
Configuration
Il nécessite toutefois un brin de configuration.
- IGNOREDB : Les bases de données à ignorer séparées par un espace
- DIR : Le répertoire où sauvegarder les données avec le / final
- USER : L'utilisateur MySQL
- PWD : Son mot de passe (peut être vide si aucun)
- HOST : Le serveur MySQL
Script de sauvegarde MySQL
Certain apprécierons (dont moi-même) moyennement le mot de passe en clair dans le script, mais libre à vous de trouver une autre solution et surtout de créer un utilisateur avec des permissions limitées.
Voici la bête :
#!/bin/bash # Databases to ignore, separated by a space or pipe IGNOREDB="mysql information_schema innodb" DIR='/backup/databases/' # With trailing slash USER='backup' PWD='' HOST='' if [[ -z "$PWD" ]] then DATABASES=`mysql -h "$HOST" -u$USER -e "SHOW DATABASES;" | tail -n+2` else DATABASES=`mysql -h "$HOST" -u$USER --password=$PWD -e "SHOW DATABASES;" | tail -n+2` fi IGNOREDB=`echo "$IGNOREDB" | tr ' ' '|'` DATABASES=`echo "$DATABASES" | grep -v -E "^$IGNOREDB$"` for DB in $DATABASES; do DBDIR="$DIR$DB" mkdir -p "$DBDIR" if [[ -z "$PWD" ]] then TABLES=`mysql -h $HOST -u$USER -e "SHOW TABLES FROM $DB;" | tail -n+2` else TABLES=`mysql -h $HOST -u$USER -p$PWD -e "SHOW TABLES FROM $DB;" | tail -n+2` fi TBLDATE=`date +%Y-%m-%d` DUMPDIR="$DBDIR/last" mkdir -p "$DUMPDIR" for TBL in $TABLES; do TBLFILE="$DUMPDIR/$TBL.sql" if [[ -z "$PWD" ]] then mysqldump -h "$HOST" -u$USER "$DB" "$TBL" > "$TBLFILE" else mysqldump -h "$HOST" -u$USER -p$PWD "$DB" "$TBL" > "$TBLFILE" fi done RDIFFDIR="$DBDIR/rdiff" mkdir -p "$RDIFFDIR" rdiff-backup "$DUMPDIR" "$RDIFFDIR" rdiff-backup -v0 --force --remove-older-than 2W "$RDIFFDIR" INCRDIR="$DBDIR/increments/$TBLDATE" mkdir -p "$INCRDIR" cp "$DUMPDIR/"* "$INCRDIR" gzip -fq "$INCRDIR/"* done



Mon précieux !

