[Java] Fare il backup di un db

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Berghem
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2265
Iscrizione: giovedì 14 aprile 2005, 22:28
Località: Dalmen

[Java] Fare il backup di un db

Messaggio da Berghem »

Vorrei aggiungere ad una mia applicazione la possibilità di fare il backup del database (Mysql).
Ma non ho idea di come iniziare....

lo faccio manualmente da shell

sudo mysql -u root -p NomeDB > NomeDb.sql

Ma poi mi chiede la password....

Come potrei fare da applicazione Java? anche cablandoci all'interno la psw? (tanto è un gestionale che usa mia moglie nel suo studio, non mi interessa la sicurezza)
Avatar utente
daemon_nio
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1012
Iscrizione: lunedì 15 gennaio 2007, 14:18
Sesso: Maschile
Località: London
Contatti:

Re: [Java] Fare il backup di un db

Messaggio da daemon_nio »

Io ho fatto una cosa del genere in ufficio.

Ho risolto usando mysql in questo modo:

Codice: Seleziona tutto

sudo mysql -u root -pPASSWORD NomeDB > NomeDb.sql
In pratica la password puoi buttarla dopo il parametro -p ma soltanto se non lasci spazi.
Funziona sia su windows che su linux, quindi puoi gestire un po' come vuoi tu.

Ti posto anche parte del codice che ho scritto io per facilitarti il lavoro, lo lancio con un'operazione pianificata di windows ogni tot giorni, tu su linux puoi utilizzare cron per decidere quando lanciarlo (so che esiste anche kcron che è grafico e dovrebbe essere molto simile alle operazioni pianificate di win).

Qualcosina devi modificarlo sicuramente... ma la sostanza è questa ;)

Codice: Seleziona tutto

class Backup
      {// path su cui salvare i file di backup
        public static final String PATH = "/mio/path/dove/salvare/i/backup";
	
	// eseguibile del database, username per connettersi, password per connettersi, schema da copiare
	public static final String MYSQLDUMP = "\"C:\\Program Files\\MySql\\bin\\mysqldump\""; //utile se non sei su linux, altrimenti una stringa vuota dovrebbe andare bene.
        // N.B. Attenzione ai caratteri di escape

	public static final String USERNAME = "username";
	public static final String PASSWORD = "passoword";
	public static final String DATABASE = "database";
	
	/** I mesi dell'anno in italiano*/
	public static final String MESI[] = {"Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"};
	
	/**
	  * Questa funzione trasforma un intero ad una cifra in un intero a due cifre, anche se la prima cifra è zero viene comunque restituita nella stringa
	  * per ottenere una stampa corretta su due caratteri.
	  */
	public static String int2Str(int n)
	  {if (n>=10)
	      return ""+n;
	   else
	      return "0"+n;
	   }
	
	/**
	  * Questa funzione restituisce il mese a cui corrisponde l'intero passato come argomento, non come stringa completa ma soltanto i primi tre caratteri
	  * del nome del mese.
	  */
	public static String Month2Mon(int m)
	  {String month = MESI[m];
	   return month.substring(0,3);
	   }
    
	/**
	  * main dell'applicazione. E' quella che viene lanciata uso script.
	  */
	public static void main(String args[])
               {System.out.println("Inizio Backup!");
	        GregorianCalendar gc = new GregorianCalendar();
		String nomeBackup = int2Str(gc.get(GregorianCalendar.DAY_OF_MONTH))+Month2Mon(gc.get(GregorianCalendar.MONTH))+int2Str(gc.get(GregorianCalendar.YEAR)%2000);
		System.out.println(nomeBackup);
		
		// metto il backup all'interno della cartella dove viene eseguito lo script
		String command = MYSQLDUMP+" -u "+USERNAME+" -p"+PASSWORD+" "+DATABASE+" > "+nomeBackup;
		esegui(command);
		
		// codice per zippare il dump che occupa un bel po di spazio
                // non posso postarti il mio anche perché non funzionerebbe ho usato pkzip un eseguibile per windows per zippare files
                // cancellazione del file non zippato
                ...

		System.out.println("\n\tDump eseguito con successo!");
	    }
		
	/**
	* Esegue un comando di riga di comando
	*/
	public static void esegui(String command)
	   {try
               {System.out.println("eseguo: "+command);
	         Process pr = Runtime.getRuntime().exec(command);
		 pr.waitFor();
	         }
	     catch(Exception e)
		{e.printStackTrace();
                 }
            } 
Ultima modifica di daemon_nio il lunedì 1 settembre 2008, 21:44, modificato 1 volta in totale.
Sempre costruendo qualcosa di nuovo: Matag: The Game
Avatar utente
Berghem
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2265
Iscrizione: giovedì 14 aprile 2005, 22:28
Località: Dalmen

Re: [Java] Fare il backup di un db

Messaggio da Berghem »

grazie, io pensavo di mettere una opzione nel menu per fare il backup, senza usare cron o altro.
E' una cosa manuale ma va bene csi  ;)

grazie 1000
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti