casualmente ho trovato alcuni post, anche se vecchi, di utenti che chiedono come effettuare il backup dei DB di MySQL. Alcuni anche senza risposta (es. http://www.qnapclub.it/viewtopic.php?f= ... 74&p=16928)
Per questo motivo ho pensato di fare una semplice guida.
Lo script, tramite la funzione pulizia(), cancella i file della cartella di Backup più vecchi di 14 giorni.
Ovviamente potete cambiare il 14 oppure non richiamare proprio la funzione pulizia se non volete che vengano mai cancellati.
Per fare i backup (compressi), che per mia comodità faccio separatamente per ogni DB, ho creato uno script in /share/MD0_DATA/Maintenance/ chiamato backupdb.sh.
Il log dell'esecuzione del backup viene scritto in /share/MD0_DATA/Maintenance/dblog.txt
I backup vengono salvati in /share/MD0_DATA/Backup.
Ovviamente le variabili che contengono questi due dati, rispettivamente LOG e BCKPATH, potete modificarle a vostro piacere.
Così come DBUSER e DBPASSWD che contendono user e pass del db.
Contenuto dello script /MD0_DATA/Maintenance/backupdb.sh:
Codice: Seleziona tutto
#!/bin/sh
LOG="/share/MD0_DATA/Maintenance/dblog.txt"
DATA=`date +"%d-%m-%Y"`
DBUSER="root"
DBPASSWD="PasswordDiRootDiMysql"
DUMP="/mnt/ext/opt/mysql/bin/mysqldump"
DUMPOPTS="--add-drop-table"
BCKPATH="/share/MD0_DATA/Backup"
BCKDIR=$BCKPATH/$DATA
echo INIZIO BACKUP DATABASE >$LOG
date >>$LOG
echo >>$LOG
mkdir $BCKDIR
db_backup() {
for database in $(/mnt/ext/opt/mysql/bin/mysql --user=$DBUSER --password=$DBPASSWD -e 'show databases' -s --skip-column-names);
do
echo Creo $database-$DATA.sql >>$LOG
$DUMP --user=$DBUSER --password=$DBPASSWD $DUMPOPTS $database > "$BCKDIR/$database-$DATA.sql";
done
}
comprimi() {
echo >>$LOG
echo Creo DB_backup_$DATA.tar.gz >>$LOG
tar -czf $BCKPATH/DB_backup_$DATA.tar.gz $BCKDIR
}
cancella () {
echo >>$LOG
echo Cancello $BCKDIR >>$LOG
rm -r $BCKDIR
}
pulizia () {
files=`find $BCKPATH -type f -mtime +14`
echo >>$LOG
echo Elimino backup vecchi >>$LOG
for file in $files
do
echo ... Elimino $file >>$LOG
rm $file
done
}
db_backup && comprimi && cancella && pulizia
#log fine
echo >>$LOG
date >>$LOG
echo FINE BACKUP DATABASE >>$LOG
Per farlo dovete modificare il file /etc/config/crontab con qualsiasi editor ed aggiungere la riga:
Codice: Seleziona tutto
0 4 * * * sh /share/MD0_DATA/Maintenance/backupdb.sh > /dev/null 2>&1
poi bisogna eseguire da shell il comando "crontab /etc/config/crontab" per rendere i cambiamenti effettivi e riavviare crontab con "/etc/init.d/crond.sh restart"
A proposito di mysql, ribadisco una cosa.
Molti provano ad usarlo da linea di comando digitando: mysql -u root -p
ma ottengono: mysql : command not found
per usare mysql bisogna indicare il percorso completo:
/mnt/ext/opt/mysql/bin/mysql -u root -p
Per qualsiasi dubbio/chiarimento, chiedete pure!