Mostrando entradas con la etiqueta mysqldump. Mostrar todas las entradas
Mostrando entradas con la etiqueta mysqldump. Mostrar todas las entradas

sábado, 29 de marzo de 2014

Generación de Backup en Java

Hola, quiero compartir un ejemplo que permite generar Backup ó copias de respaldo de una BD y que me ha sido de gran ayuda al usarlo en aplicaciones que he desarrollado. Bueno Comencemos:

En el ejemplo muestro un ComboBox donde se listan todas las BD que tiene el motor de base de datos, en este ejemplo estamos trabajando con MySQL.

   private void ListaBD(){
      Connection con;
      PreparedStatement ps;
      ResultSet rs;
      try{
          //Preparamos la coneccion a la BD
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection("jdbc:mysql://localhost:3306","root","");
         //Preparamos consulta
         ps = con.prepareStatement("SHOW DATABASES");
         rs = ps.executeQuery();
         while(rs.next()){
             //Llenamos la lista 
            comboLista.addItem(rs.getObject(1));   
         }
      }
      catch(Exception e){
         JOptionPane.showMessageDialog(null, e.getMessage());
      }        
   }

Luego se crea el método para evento del boton "Backup", estamos usando un JFileChooser para especificar la ruta donde deseamos guardar nuestro backup.

   private void GenerarBackup(String bd){    
      //Creamos la ruta para guadar el backup
      int resp = FileChooser.showSaveDialog(this);   
      if(resp==JFileChooser.APPROVE_OPTION){
         //le añadimos la extencion *.sql
         dir=String.valueOf(FileChooser.getSelectedFile().toString())+".sql";      
         try{
            Runtime runtime = Runtime.getRuntime();
            File fichero = new File(dir);
            FileWriter fw = new FileWriter(fichero); 
            Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password= --user=root --databases "+bd+" -R");
         
            //Process es el que ejecuta el comando para buscar el mysqldump.exe
            InputStreamReader irs = new InputStreamReader(child.getInputStream());
            BufferedReader br = new BufferedReader(irs);

             //Aquí espesamos a sobrescribir el archivo *.sql
            String line;
            while( (line=br.readLine()) != null){
               fw.write(line + "\n");
               System.out.println(""+ line);
            }
            msg.setText("Se ha creador un archivo *sql en la ruta: \n"+dir);
            fw.close();
            irs.close();
            br.close();
            JOptionPane.showMessageDialog(null, "Backup generado correctamente", "Operacion completada",JOptionPane.INFORMATION_MESSAGE);
         }
         catch(Exception e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error no se genero el backup por el siguiente motivo: " + e.getMessage(), "Verificar",JOptionPane.ERROR_MESSAGE);
         }
      }      

   }  

Nota: 
 Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password= --user=root --databases "+bd+" -R");
Es el que crea el proceso para ejecutar la consulta con el mysqldump, mi MySQL no tiene password pero si tuviera hay que ponerlo así: 

 Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password=tu_pass --user=user_bd --databases "+tu_bd+" -R");

Eso es todo y espero les ayude este post, aqui les dejo el ejemplo completo.