Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1805 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [resolu][java/mysql] restauration de dump

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[resolu][java/mysql] restauration de dump

n°1618664
bastet ene​ada
Posté le 04-10-2007 à 00:29:20  profilanswer
 

Bonjour je voudrais savoir si quelqu'un a une idée concernant une restauration simple (ne pas reinventer la roue) de dump.
 
Voici les parties pour comprendre mon probleme :
Classes/fonctions:
Messages => redirections et modif des sorties standards
getFile() => permet la recupe de l'emplacement du fichier a charger
getDir() => permet la recupe de l'emplacement du dossier dans lequel est enregistre le dump
 
fonction de dump (ca ca marche bien)

Code :
  1. /**  
  2.      * Permet un mysqldump  
  3.      * @return true/false
  4.      */
  5.     public boolean dump(){
  6.         boolean dump = false;
  7.         String tmp = getDir();
  8.         if(tmp != null){
  9.             String connect = new String("mysqldump -u"+user+" -p"+password+" -h"+host+" --compact --default-character-set=utf8 -r "+tmp+" "+dbname);
  10.             message.info(connect);
  11.             try{
  12.                 process = runtime.exec(connect);
  13.                 int exitVal;
  14.                 try {
  15.                     exitVal = process.waitFor();
  16.                     message.info("Process exitValue: " + exitVal);
  17.                     dump = true;
  18.                 } catch (InterruptedException ex) {
  19.                     message.erreur("Impossible d'ecrire le dump"+ex.getMessage(), getClass());
  20.                 }
  21.             }catch(IOException ex){
  22.                 message.erreur("impossible d'ecrire le dump "+ex.getMessage(), getClass());
  23.             }
  24.         }
  25.         return dump;
  26.     }


 
fonction de restauration : (la ca marche pas)

Code :
  1. /**
  2.      * Permet une restauration a partir d'un fichier dump
  3.      * @return true/false
  4.      */
  5.     public boolean restore(){
  6.         boolean restore = false;
  7.         String tmp = getFile();
  8.         if(tmp != null){
  9.             String connect = new String("mysql -u"+user+" -p"+password+" -h"+host+" -e \"source "+tmp+"\" " );
  10.             message.info(connect);
  11.             try{
  12.                 process = runtime.exec(connect);
  13.                 int exitVal;
  14.                 try {
  15.                     exitVal = process.waitFor();
  16.                     message.info("Process exitValue: " + exitVal);
  17.                     restore = true;
  18.                 } catch (InterruptedException ex) {
  19.                     message.erreur("Impossible de restaurer le dump"+ex.getMessage(), getClass());
  20.                 }
  21.                
  22.             }catch(IOException ex){
  23.                 message.erreur("Impossible de restaurer le dump"+ex.getMessage(), getClass());
  24.                 return false;
  25.             }
  26.         }
  27.         return restore;
  28.     }


Voici ma sortie :  

Citation :

Information: mysql -uXXXX -pXXXXXXXX -h127.0.0.1 -e "source /home/alain/programmation/MonGestionnaire/CLEAN/data.sql"  
Information: Process exitValue: 1


Aucun message d'erreur.  
Si je copie/colle la sortie de la premiere information dans ma console le dump est restauré.
J'ai tente en passant par un Statement (genre newStatement.executeQuery("source  dir/vers/dump.sql" ); ) ca ne marche pas, il me sort une "error in ur sql syntax"
Merci d'avance.

Message cité 1 fois
Message édité par bastet eneada le 06-10-2007 à 19:26:21

---------------
----
mood
Publicité
Posté le 04-10-2007 à 00:29:20  profilanswer
 

n°1619195
riastudio
Posté le 04-10-2007 à 18:28:38  profilanswer
 

bastet eneada a écrit :


fonction de restauration : (la ca marche pas)

Code :
  1. String connect = new String("mysql -u"+user+" -p"+password+" -h"+host+" -e \"source "+tmp+"\" " );




 
Deux choses me paraissent suspectes dans la commande que tu exécutes :

  • l'absence du nom de la base de données dans la commande. Avec celle que tu utilises pour créer le dump, MySQL devrait retourner une erreur "ERROR 1046 (3D000): Aucune base n'a été sélectionnée".
  • l'option '-e "source dump.sql"'. La commande source est utilisée pour évaluer un script shell, pas un script SQL. Pour ma part, j'utilises une redirection (< dump.sql)


n°1619219
bastet ene​ada
Posté le 04-10-2007 à 18:56:04  profilanswer
 

riastudio a écrit :


 
Deux choses me paraissent suspectes dans la commande que tu exécutes :

  • l'absence du nom de la base de données dans la commande. Avec celle que tu utilises pour créer le dump, MySQL devrait retourner une erreur "ERROR 1046 (3D000): Aucune base n'a été sélectionnée".
  • l'option '-e "source dump.sql"'. La commande source est utilisée pour évaluer un script shell, pas un script SQL. Pour ma part, j'utilises une redirection (< dump.sql)




 
Le nom de la DB est ecrite dans le dump, extrait du dump:

Code :
  1. use gestionnaire;
  2. -- Drop des tables (ordre de cle)
  3. DROP TABLE IF EXISTS `client`;
  4. -- --------------------------------------------------------
  5. --
  6. -- Structure de la table `client`
  7. --
  8. CREATE TABLE `client` (
  9.   `identifiant` int(11) NOT NULL auto_increment,


 
Une redirection '<' ne peut pas etre utilisee avec un Runtime.
PS: commande mysql source, c'est pratique quand on est deja entré :  
http://dev.mysql.com/doc/refman/5. [...] mands.html

Message cité 1 fois
Message édité par bastet eneada le 04-10-2007 à 20:18:17
n°1619325
riastudio
Posté le 04-10-2007 à 21:58:58  profilanswer
 

bastet eneada a écrit :


 
Le nom de la DB est ecrite dans le dump, extrait du dump:

Code :
  1. use gestionnaire;




 
Sur mon installation, le 'use db' ne fait pas partie du dump avec la commande que tu utilises.  

Code :
  1. # mysqldump --version
  2. mysqldump  Ver 10.11 Distrib 5.0.44, for pc-linux-gnu (i686)


 

bastet eneada a écrit :


PS: commande mysql source, c'est pratique quand on est deja entré :  
http://dev.mysql.com/doc/refman/5. [...] mands.html


 
Joker, jamais eu besoin. :sarcastic:  
 
Si l'appli ne fait que sauvegarder/restaurer des bases MySQL, pourquoi ne pas envisager de la remplacer par un ETL (http://www.manageability.org/blog/stuff/open-source-etl/view) ? Tu gagnerais en compatibilité et en portabilité.


---------------
riaStudio - Ecommerce et Applications Internet - Niort
n°1620051
riastudio
Posté le 06-10-2007 à 12:44:48  profilanswer
 

Après quelques essais, voici le résultat :
 


Le tout donne un résultat qui fonctionne mais n'est pas vraiment satisfaisant. Il faudra déployer un client mysql avec l'application pour profiter de la sauvegarde / restauration.


---------------
riaStudio - Ecommerce et Applications Internet - Niort
n°1620085
bastet ene​ada
Posté le 06-10-2007 à 16:11:56  profilanswer
 

Merci, je vais voir tout ça.

n°1620093
bastet ene​ada
Posté le 06-10-2007 à 17:29:23  profilanswer
 

Tada, ça marche :p merci.
 

Code :
  1. /**
  2.      * Permet une restauration a partir d'un fichier dump
  3.      * @return true/false
  4.      */
  5.     public boolean restore(){
  6.         boolean restore = false;
  7.         String tmp = getFile();
  8.         if(tmp != null){
  9.             String connect = new String("mysql -u"+user+" -p"+password+" -h"+host+" --default-character-set=utf8 -e \"source "+tmp+"\" "+dbname);
  10.             try{
  11.                 // selection de l'OS
  12.                 String OS = System.getProperty("os.name" );
  13.                 String windows = new String("windows" );
  14.                 CharSequence seq = windows.subSequence(0, windows.length()-1) ;
  15.                 if(OS.toLowerCase().contains(seq)){
  16.                     // creation du fichier de lancement de dump pour windows
  17.                     File tmpFile = new File(directionLocale+"/tmp.bat" );
  18.                     FileOutputStream out = new FileOutputStream(tmpFile);
  19.                     out.write(connect.getBytes());
  20.                     out.close();
  21.                     // execution du fichier tmp pour windows
  22.                     process = runtime.exec(directionLocale+"/tmp.bat" );
  23.                     tmpFile.delete();
  24.                 }else{
  25.                     // creation du fichier de lancement de dump pour linux
  26.                     File tmpFile = new File(directionLocale+"/tmp.sql" );
  27.                     FileOutputStream out = new FileOutputStream(tmpFile);
  28.                     out.write(connect.getBytes());
  29.                     out.close();
  30.                     // execution du fichier tmp pour linux
  31.                     process = runtime.exec(new String[]{"/bin/bash", directionLocale+"/tmp.sql"});
  32.                     tmpFile.delete();
  33.                 }
  34.                 int exitVal;
  35.                 try {
  36.                     exitVal = process.waitFor();
  37.                     if(exitVal==0){
  38.                         JOptionPane.showMessageDialog(null, properties.getLabel("ENREGISTREMENT_OK" ), properties.getLabel("MESSAGE_TITRE_INFORMATION" ), JOptionPane.INFORMATION_MESSAGE);
  39.                     }else{
  40.                         message.ecrire(process);
  41.                         JOptionPane.showMessageDialog(null, properties.getLabel("ENREGISTREMENT_PAS_OK" ), properties.getLabel("MESSAGE_TITRE_ERREUR" ), JOptionPane.ERROR_MESSAGE);
  42.                     }
  43.                     message.info("Process exitValue: " + exitVal);
  44.                     restore = true;
  45.                 } catch (InterruptedException ex) {
  46.                     message.erreur("Impossible de restaurer le dump"+ex.getMessage(), getClass());
  47.                 }
  48.             }catch(IOException ex){
  49.                 message.erreur("Impossible de restaurer le dump"+ex.getMessage(), getClass());
  50.                 return false;
  51.             }
  52.         }
  53.         return restore;
  54.     }


J'ai pas encore teste sous windows mais sous linux ça marche.
 

Citation :

Sur mon installation, le 'use db' ne fait pas partie du dump avec la commande que tu utilises.  

Code :
  1. # mysqldump --version
  2. mysqldump  Ver 10.11 Distrib 5.0.44, for pc-linux-gnu (i686)




En fait c'etait un fichier fait main désolé pour la confusion.

Message cité 1 fois
Message édité par bastet eneada le 06-10-2007 à 18:04:32
n°1620118
riastudio
Posté le 06-10-2007 à 20:06:07  profilanswer
 

bastet eneada a écrit :

Tada, ça marche :p merci.


 
Pas de quoi ;)


---------------
riaStudio - Ecommerce et Applications Internet - Niort

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [resolu][java/mysql] restauration de dump

 

Sujets relatifs
[Résolu] Problème de compilation Qt[Java, JSP, Servlet] Problème de session
Fermer applet Java depuis du Javascript ?[ résolu tout seul ] variables GET en un seul parametre
[mysql] filtre: recherche de hausse de prix[Résolu] Creer et afficher des thumbnail dynamiquement
PHP / MySQL Recherche d'images par mots-clés[Résolu] Erreur de collation
PHP / WAMP : version client API MysqlPHP vs JSP
Plus de sujets relatifs à : [resolu][java/mysql] restauration de dump


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR