Backup automatico dei database MySql in Windows

Di recente, mi sono imbattuto per lavoro in un problema alquanto ostico: dovere effettuare quotidianamente il backup dei database MySql installati sulla mia macchina Windows in locale, su un disco di rete condiviso dagli altri PC dell’ufficio.

Dopo qualche ricerca in rete, mi sono arreso al fatto che nessuna delle soluzioni proposte fosse congeniale al mio scopo: molte di esse effettuavano il backup intero di tutti i DB, senza frazionarli uno ad uno. In questo modo, immaginando di dovere ripristinare un database corrotto, avrei dovuto cancellare tutti quelli presenti in locale per poi ricaricarli in massa, cosa che potrebbe andare bene se il numero di database locali fosse esiguo, soluzione impraticabile (nonché pericolosa) nel caso di decine o centinaia di DB.

Così, mi sono armato di pazienza e, prendendo spunto da alcune delle soluzioni esaminate precedentemente, ho sviluppato il mio script batch, che automatizza l’operazione di backup, restituendo una cartella contrassegnata da data e ora, contenente un file per ogni database.

Lo script segue questa logica:

  • Crea una directory, all’interno della cartella designata per contenere tutti i backup nominata come data_ora_dump.
  • Crea un file temporaneo con i nomi di tutti i database presenti nell’installazione locale di MySql.
  • Elimina dal file temporaneo le tabelle di default di MySql e phpMyAdmin.
  • Tramite il comando mysqldump crea un file sql per ogni nome scritto nel file temporaneo.

Il codice dello script spiegato passo per passo

@echo off  :: Il nome di ogni Database che si desidera escludere ('Database' non si riferisce ad una tabella presente, ma all'intestazione del dump) set DBTOEXCLUDE=cdcol Database information_schema mysql performance_schema phpmyadmin test webauth  :: I nomi dei file temporanei creati dallo script set TEMP=db_bak.tmp tempdb_bak.tmp  set txtInit="Backing up MySql..."  set txtEnd="Done!"  echo %txtInit%  :: Cartella di MySql (così come dall'installazione di Xampp) set mysqlDir="C:\xampp\mysql\bin"  :: Cartella dei backup di MySql (in questo caso il backup viene eseguito sul desktop, il percorso può essere personalizzato a piacere) set backupDir="%HOMEPATH%\Desktop"  :: Se esistono cancella i file temporanei precedentemente creati for %%t in (%TEMP%) do (  if exist %backupDir%\%%t del %backupDir%\%%t ) :: Definizione delle variabili che comporranno il nome della cartella di backup :: Ore set hour=%time:~0,2% if "%hour:~0,1%" == " " set hour=0%hour:~1,1%  :: Minuti set min=%time:~3,2% if "%min:~0,1%" == " " set min=0%min:~1,1%  :: Secondi set secs=%time:~6,2% if "%secs:~0,1%" == " " set secs=0%secs:~1,1%  :: Anno set year=%date:~-4%  :: Mese set month=%date:~3,2% if "%month:~0,1%" == " " set month=0%month:~1,1%  :: Giorno set day=%date:~0,2% if "%day:~0,1%" == " " set day=0%day:~1,1%  :: Imposto data e ora correnti set datetimef=%year%%month%%day%_%hour%%min%%secs%  :: Imposto il nome della nuova cartella di backup con data e ora davanti set newDir=%backupDir%/%datetimef%_dump  :: Creo la nuova cartella di backup nella cartella remota md %newDir%  :: Mi sposto nella cartella di esecuzione di MySql cd %mysqlDir%  :: Tramite l'applicazione mysql crea un file con il nome di tutti i database mysql presenti mysql -u root -e "show databases" > db_bak.tmp  :: Richiamo la subroutine che elimina i database da escludere dal file che contiene tutti i nomi call :exclude DBTOEXCLUDE  :: Per ogni database elencato in DBLIST eseguo lo script per il backup for /f %%f in (db_bak.tmp) do (  echo "Starting backup of %%f"  mysqldump -u root %%f > %newDir%/%%f.sql  echo "Backup of %%f, done!" ) echo %txtEnd%  :: Subroutine di esclusione database di default :exclude :: Elimina ogni database scritto nella variabile DBTOEXCLUDE for %%d in (%DBTOEXCLUDE%) do (  type db_bak.tmp | findstr /v %%d >tempdb_bak.tmp  if exist db_bak.tmp del db_bak.tmp  ren tempdb_bak.tmp db_bak.tmp ) GOTO :eof

 

Copiando ed incollando il codice soprastante in un qualsiasi editor testuale e salvando il file come nome_file.bat avremo il nostro script batch pronto per l’uso, basterà fare doppio click sul file per ottenere un backup istantaneo della nostra installazione di MySql.

Per semplificare ulteriormente le cose, fornisco il file scaricabile in formato testuale, basterà modificarne i parametri di configurazione secondo le proprie esigenze e l’estensione da txt in bat per avere lo script batch funzionante. Ogni feedback, in seguito al download e all’uso dello script, sarà gradito.

MySql backup

 

Ora non resta che pianificare il backup con la frequenza desiderata.

 

Automatizzare il backup di MySql con Utilità di pianificazione di Windows

Da Pannello di controllo selezionare Strumenti di amministrazione e successivamente Utilità di pianificazione. Dalla finestra che si apre cliccare Azione e Crea attività di base… Seguire la procedura guidata per la pianificazione.

Utilità di pianificazione Windows

 

Ricordo che MySql deve essere avviato prima di procedere con le operazioni di backup.

 

Se hai trovato interessante l’articolo e hai scaricato il file, regala due minuti del tuo tempo all’ideatore del blog leggendo questa pagina. Grazie!

Baty’s Base


Stai cercando prodotti per l’hacking, la sicurezza informatica e il penetration testing? Hai bisogno di bonificare il tuo smartphone, il tuo pc o il tuo sito da virus e malware? Devi rintracciare una persona o recuperare delle informazioni urgenti? Devi riprendere possesso di un account, una mail o di una password che ti hanno sottratto? Vuoi acquistare device già configurati per sperimentare tutte le tecniche di hacking in modo facile e veloce? Hai esigenze particolari in ambito software o hardware? Possiamo aiutarti!

Contattaci subito per avere un aiuto immediato : dettagliaci tramite mail o Whatsapp che tipo di supporto ti occorre e ti invieremo un riscontro immediato!

Compila e invia il modulo qui sotto per inviarci subito una richiesta di supporto

Scrivi il tuo indirizzo email qui

Scrivi qui come possiamo aiutarti - ti supportiamo immediatamente per ogni tua esigenza!

chevron_left
chevron_right