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)
[Java] Fare il backup di un db
- daemon_nio
- Entusiasta Emergente

- Messaggi: 1012
- Iscrizione: lunedì 15 gennaio 2007, 14:18
- Sesso: Maschile
- Località: London
- Contatti:
Re: [Java] Fare il backup di un db
Io ho fatto una cosa del genere in ufficio.
Ho risolto usando mysql in questo modo:
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
Ho risolto usando mysql in questo modo:
Codice: Seleziona tutto
sudo mysql -u root -pPASSWORD NomeDB > NomeDb.sqlFunziona 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
- Berghem
- Entusiasta Emergente

- Messaggi: 2265
- Iscrizione: giovedì 14 aprile 2005, 22:28
- Località: Dalmen
Re: [Java] Fare il backup di un db
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
E' una cosa manuale ma va bene csi
grazie 1000
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti