2010-06-11 6 views
4

Je développe une application Java avec MySql comme base de données. Je dois vider la base de données MySql de mon application périodiquement (disons tous les jours à 10 heures) et j'ai écrit un fichier batch (.bat) pour le dumping de la base de données. Le fichier batch fonctionne correctement, mais le problème est qu'il demande un mot de passe à chaque fois lors de son exécution.Prise de sauvegarde MySql depuis mon application Java

Existe-t-il un moyen de vider la base de données MySql sans demander de mot de passe et de l'obtenir à partir de l'application Java périodiquement?

Répondre

0

Vous ne dites pas comment vous abandonnes en fait la base de données, mais je suppose que vous utilisez mysqldump.

Vous pouvez spécifier le mot de passe de la base de données sur la ligne de commande à l'aide du commutateur --password=.... Ou si vous voulez être plus sûr, utilisez un mot de passe dans un option file. Voir man mysqldump pour plus d'informations.

+0

oui je suis en utilisant mysqldump seulement. – dhiraj

1

Vous pouvez certainement mettre le mot de passe sur la ligne de commande, comme d'autres l'ont souligné. En ce qui concerne l'exécution de Java (bien que les puristes puissent s'y opposer), vous pouvez utiliser Runtime.exec() pour appeler votre commande mysql: http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html.

Si vous le faites depuis votre application java, vous pouvez également envisager de ne pas le faire périodiquement. Selon l'utilisation de votre base de données (par exemple, des lectures fréquentes, mais des écritures peu fréquentes), vous pouvez constater que vous ne pouvez effectuer un vidage que lorsque vous savez que la base de données a été modifiée ou quelque chose du genre.

Si vous voulez vraiment simplement vider la base de données périodiquement, il vaudrait peut-être mieux simplement configurer un travail cron. Voici un post précédent sur SO concernant l'approche Windows de cron: What is the Windows version of cron?.

+0

Merci beaucoup pour votre réponse. La partie mysqldump fonctionne bien. Je dois rechercher la partie de vidage périodique maintenant. Oui, j'ai utilisé Runtime.exec() uniquement à cette fin. – dhiraj

0

sauvegarde:

/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 

/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 
executeCmd = “mysqldump -u “+dbUser+” -p”+dbPass+” “+dbName+” -r backup.sql”; 
} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 

out.println(“Backup taken successfully”); 

} else { 

out.println(“Could not take mysql backup”); 

} 

Restaurez:

/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 

/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 

executeCmd = new String[]{“/bin/sh”, “-c”, “mysql -u” + dbUser+ ” -p”+dbPass+” ” + dbName+ ” < backup.sql” }; 

} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 

out.println(“success”); 

} else { 

out.println(“restore failure”); 

} 
Questions connexes