Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732

    [Bash] Script per backup database

    Premessa: Tempo fa persi diversi database di siti che stavo sviluppando, rimanendo con solo dei backup di qualche giorno prima, così qualche giorno fa ho deciso di provare a fare uno script che, all'avvio, mi effettui il backup di tutti questi database mettendoli in una directory sincronizzata con dropbox.
    Lo script funzionava bene ma mi creava un unico file gigante con dentro il backup di tutti i database messi insieme. Tutto bello ma se mi fosse servito uno solo di quei database era un casino ripristinarlo...

    Così ho riscritto lo script, che funziona fin troppo bene... vorrei escludere alcuni database però

    Questo è lo script:

    codice:
    dbs="$(mysql -u root -Bse 'show databases')"
    
    for db in $dbs
    do
    	# ATTENZIONE: aggiusta i dati della connessione
    	mysqldump --user=root $db | bzip2 -c > /tmp/$db.sql.bz2
    
    	# Se non era mai stato fatto un backup di questo database lo sposto senza pensarci troppo
    	if [ ! -f ./mysql/$db.sql.bz2 ]; then
    		mv /tmp/$db.sql.bz2 ./mysql/
    	else
    		# Altrimenti prendo le dimensioni del vecchio file di backup e di quello nuovo
    		FILEOLD=$(stat --printf="%s" ./mysql/$db.sql.bz2)
    		FILENEW=$(stat --printf="%s" /tmp/$db.sql.bz2)
    
    		# Se le dimensioni sono le stesse cancello il nuovo backup e lascio il vecchio, per non far lavorare inutilmente dropbox, altrimenti sovrascrivo quello vecchio
    		if [ $FILENEW = $FILEOLD ]; then
    			rm /tmp/$db.sql.bz2
    		else
    			rm ./mysql/$db.sql.bz2
    			mv /tmp/$db.sql.bz2 ./mysql/
    		fi
    	fi
    done
    I backup li fa correttamente ed è di una comodità inverosimile utilizzato insieme a dropbox, però c'è modo di dire allo script di ignorare i database "di sistema" come information_schema, mysql e phpmyadmin? Non per altro, ma lanciandolo da riga di comando si incazza sempre un po' quando trova information_schema...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    1) SHOW databases WHERE (`database` not LIKE '%informatio%') and (`database` not LIKE '%mysql%') and (`database` not LIKE '%php%');

    2) ti suggerisco di usare pbzip2, anzichè bzip2 (o anche pgzip)

    3) invece della dimensione (sola) confronta gli hash dei file (se vuoi andare sul sicuro)

  3. #3
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    Se riesco a capire come venirne a capo con tutte quelle virgolette ottima dritta, grazie

    pbzip2 in realtà non mi serve, anche se ci mette un po' di più non mi va bene basta che non appesantisca il sistema... e pbzip2 sembra più pesante, anche se più veloce.

    avevo pensato ad usare md5sum, ma sembra che gli hash risultino diversi... questa roba qua
    codice:
    		FILEOLD=($(md5sum ./mysql/$db.sql.bz2))
    		FILENEW=($(md5sum /tmp/$db.sql.bz2))
    		echo $FILEOLD $FILENEW
    mi restituisce, confrontando i bakup nuovo e vecchio, qualcosa tipo
    codice:
    acc447a25007cdf66ef8e6bb3c49c17e b7980d0376c82b2fefda5757dfddef3d



    La cosa ancora più strana è che l'hash di information_schema invece risulta uguale

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da lnessuno
    pbzip2 in realtà non mi serve, anche se ci mette un po' di più non mi va bene basta che non appesantisca il sistema... e pbzip2 sembra più pesante, anche se più veloce.
    ??? usa tutti i core disponibili, scala quasi linearmente
    avevo pensato ad usare md5sum, ma sembra che gli hash risultino diversi... questa roba qua...
    probabilmente cambia la data di esecuzione (che viene loggata nel dump), fai un diff e lo vedi immediatamente

  5. #5
    Utente di HTML.it L'avatar di pilovis
    Registrato dal
    Mar 2001
    Messaggi
    3,273
    Installa webmin, ha una comodissima interfaccia grafica con svariate possibilita' di settare i backup dei databases mysql (tutti o solo alcuni) personalizzando il cron job di esecuzione per ogni singolo database.
    Progettista elettronico, appassionato di informatica dal 1982, sistemista Linux dal 2002, sono consulente tecnico del Giudice per le indagini preliminari, valuto richieste di consulenza, in ambito Voip/Telefonia anche con grado di sicurezza militare.

  6. #6
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    Originariamente inviato da franzauker
    ??? usa tutti i core disponibili, scala quasi linearmente

    probabilmente cambia la data di esecuzione (che viene loggata nel dump), fai un diff e lo vedi immediatamente
    Mi sono spiegato malissimo prima

    Guardando alcuni benchmark sembra che pbzip2 sia sensibilmente più veloce ma un po' più pesante sul sistema, e nel mio caso la velocità di esecuzione non è un problema. Anzi se ci mettesse 30 secondi invece di 3, ma appesantendo meno il processore a me andrebbe ancora meglio (ed in ogni caso dropbox ci mette diversi secondi in più per partire, quindi non mi cambia nulla comprimere più in fretta).

    Per quanto riguarda l'hash probabilmente il problema sta proprio nella data come dici tu. Mi sa che resterò sulla dimensione...

  7. #7
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    Originariamente inviato da pilovis
    Installa webmin, ha una comodissima interfaccia grafica con svariate possibilita' di settare i backup dei databases mysql (tutti o solo alcuni) personalizzando il cron job di esecuzione per ogni singolo database.
    Non ci avevo pensato... se non riuscissi a fare ciò che voglio con un po' di bash mi dirotterò su webmin, grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da lnessuno
    Mi sono spiegato malissimo prima

    Guardando alcuni benchmark sembra che pbzip2 sia sensibilmente più veloce ma un po' più pesante sul sistema, e nel mio caso la velocità di esecuzione non è un problema. Anzi se ci mettesse 30 secondi invece di 3, ma appesantendo meno il processore a me andrebbe ancora meglio
    In tal caso l'immortale gzip è difficilmente battibile.
    Per quanto riguarda l'hash probabilmente il problema sta proprio nella data come dici tu. Mi sa che resterò sulla dimensione...
    non mi è chiarissimo cosa vuoi fare, ma vabbè

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.