[GUIDA] Backup Database MySQL

Utilizzate questo forum per qualsiasi argomento che non è categorizzato altrove.
Rispondi
Avatar utente
Arianna
Messaggi: 246
Iscritto il: 11 lug 2010, 14:52

[GUIDA] Backup Database MySQL

Messaggio da Arianna »

Salve ragazzi,
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
Infine ho schedulato lo script con crontab affinchè venga eseguito automaticamente.
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
In questo modo il backup verrà eseguito ogni notte alle 4.
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!
Mess with the best
die like the rest

FreePlayClub.org
Avatar utente
luciano
Amministratore
Messaggi: 8707
Iscritto il: 25 apr 2008, 01:45
Località: Roma
Contatta:

Re: [GUIDA] Backup Database MySQL

Messaggio da luciano »

Grazie Arianna! Aggiungerei che per non perdere quanto inserito in crontab si debba poi seguire l'altra guida....
Avatar utente
Arianna
Messaggi: 246
Iscritto il: 11 lug 2010, 14:52

Re: [GUIDA] Backup Database MySQL

Messaggio da Arianna »

perchè l'altra guida?
L'altra riguarda l'autorun.
Il backup non è innescato dall'autorun, ma dal crontab.

O intendi dopo eventuali aggionarmenti?
Oppure volevi dire qualcos'altro e non ho capito :P
Mess with the best
die like the rest

FreePlayClub.org
Avatar utente
luciano
Amministratore
Messaggi: 8707
Iscritto il: 25 apr 2008, 01:45
Località: Roma
Contatta:

Re: [GUIDA] Backup Database MySQL

Messaggio da luciano »

scusa hai ragione, stò fuso, pensavo parlassi di autorun.... per farmi perdonare: http://forum.qnap.com/viewtopic.php?f=94&t=10902 per i meno smanettoni : Chessygrin :
cmq se aveste problemi col crontab (al riavvio si perde le entry customizzate da voi) leggete in fondo qui.
lucascuba
Messaggi: 13
Iscritto il: 30 mag 2014, 20:32

Re: [GUIDA] Backup Database MySQL

Messaggio da lucascuba »

Scusate, ma se il mio backup sarà puntato su un hard disk esterno (eSATA per la precisione) collegato al NAS, quale sarà l'indirizzo esatto da inserire nello script per il dump?
Avatar utente
luciano
Amministratore
Messaggi: 8707
Iscritto il: 25 apr 2008, 01:45
Località: Roma
Contatta:

Re: [GUIDA] Backup Database MySQL

Messaggio da luciano »

Guarda il nome con cui viene montata no? Dovrebbe essere qualcosa tipo "esata1" se ricordo bene...
lucascuba
Messaggi: 13
Iscritto il: 30 mag 2014, 20:32

Re: [GUIDA] Backup Database MySQL

Messaggio da lucascuba »

Ok, grazie mille Luciano.
Secondo te cosa è meglio tra questa procedura ed un database slave su di un altra macchina in rete?
Avatar utente
luciano
Amministratore
Messaggi: 8707
Iscritto il: 25 apr 2008, 01:45
Località: Roma
Contatta:

Re: [GUIDA] Backup Database MySQL

Messaggio da luciano »

dipende dalle tue esigenze, con un db slave sei allineato praticamente in tempo reale col crontab no.
lucascuba
Messaggi: 13
Iscritto il: 30 mag 2014, 20:32

Re: [GUIDA] Backup Database MySQL

Messaggio da lucascuba »

Grazie mille Luciano!
Ho caricato lo script e schedulato il tutto in crontab, ma nella cartella che ho indicato trovo solo il file log che mi scrive l'inizio della procedura...e nien'altro! Le path le ho ricontrollate diverse volte ma nulla....idee?
Grazie in anticipo
Avatar utente
Arianna
Messaggi: 246
Iscritto il: 11 lug 2010, 14:52

Re: [GUIDA] Backup Database MySQL

Messaggio da Arianna »

e cosa c'è scritto dentro il file di log?
Mess with the best
die like the rest

FreePlayClub.org
lucascuba
Messaggi: 13
Iscritto il: 30 mag 2014, 20:32

Re: [GUIDA] Backup Database MySQL

Messaggio da lucascuba »

a posto risolto Arianna grazie comunque, era un problema di permessi di scrittura. : RedFace :
Avatar utente
Arianna
Messaggi: 246
Iscritto il: 11 lug 2010, 14:52

Re: [GUIDA] Backup Database MySQL

Messaggio da Arianna »

Meglio così allora! :)
Mess with the best
die like the rest

FreePlayClub.org
gipasoft
Messaggi: 58
Iscritto il: 16 feb 2014, 18:59

Re: [GUIDA] Backup Database MySQL

Messaggio da gipasoft »

Grazie mille per l'utilissima guida, nel mio Qnap la cartella di mysql la trovo in:

Codice: Seleziona tutto

/mnt/ext/opt/mariadb/bin
Jfk105
Messaggi: 2
Iscritto il: 08 gen 2019, 16:21

Re: [GUIDA] Backup Database MySQL

Messaggio da Jfk105 »

Grazie per la guida. Una domanda: non ho capito (non sono un programamtore) dove viene definito il nome del database.
Cioè non vedo la variabile Sdatabase tra le variabili settate all'inizio.
Questo perchè così configurato mi si blocca probabilmente perchè ho più database con user e password uguali (è un'eredità di altre persone...) e quindi non mi esegue il backup di tutti. Se potessi definire a mano il nome del database dove dovrei sostituire la variabile con il nome del database nel codice?
Grazie mille, ciao
J
Rispondi