Per prima cosa è bene creare un account predisposto al solo backup in modo da poterlo inserire nel file .my.cnf
GRANT USAGE ON *.* TO backup@localhost IDENTIFIED BY 'UnaB3LlaPasswordSicura'; GRANT SELECT,LOCK TABLES ON *.* to backup@localhost; FLUSH PRIVILEGES;
Questo account avrà quindi solo i diritti di lettura su tutti gli oggetti di MySql.
A questo punto creiamo anche il file .my.cnf che andrà inserito all’interno della stessa cartella in cui viene eseguito lo script di backup contenente il comando mysqldump.
cat > ~/.my.cnf << EOF [mysqldump] user=backup password=UnaB3LlaPasswordSicura [client] user=backup password=UnaB3LlaPasswordSicura EOF chmod 600 .my.cnf
A questo punto uno script molto basilare (potete migliorarlo in molti modi) è il seguente
#!/bin/bash BACKUP_DIR=~/backup COMMAND_DIR=~/cron FILENAME="fulldump$(date +%F-%H%M%S)" FILEPATH="$BACKUP_DIR/$FILENAME" SQLFILE="$FILEPATH".sql TARFILE="$FILEPATH".tar.gz N=1 LOGFILE="$COMMAND_DIR/dump.log" echo "$(date +%F-%H:%M:%S)" > "$LOGFILE" echo "tar file: $TARFILE" >> "$LOGFILE" echo "sql file: $SQLFILE" >> "$LOGFILE" mysqldump --all-databases --routines --flush-privileges -ubackup > $SQLFILE && tar czf $TARFILE $SQLFILE && rm $SQLFILE # Rimuovere il commento nella riga seguente dopo aver eseguito lo script 'N' volte che sono il numero di backup file che si vuole tenere. #find $BACKUP_DIR/ -name "fulldump*.tar.gz" | sort -r | tail -$N | xargs rm -f ls -al $BACKUP_DIR/fulldump*.tar.gz | wc -l >> "$LOGFILE"
E’ tutto. Ora basta dare i diritti di escuzione allo script e inserirlo nella crontab secondo le vostre preferenze.