Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Noviembre 21, 2008, 12:59:05
Inicio Ayuda Buscar Ingresar Registrarse
Noticias: Foro de Java, C++ y más.

Empieza una nueva comunidad de programación: Oneble ... es lo que tu quieras que sea

+  Foros Java y C/Linux
|-+  Programación
| |-+  Java J2SE
| | |-+  Restore de base de datos
« anterior próximo »
Páginas: [1] Enviar tema Imprimir
Autor Tema: Restore de base de datos  (Leído 192 veces)
Maria123
Newbie
*
Mensajes: 9


Ver Perfil


« en: Agosto 02, 2008, 04:56:08 »

Hola!
Estoy haciendo una aplicación en la que tengo que dar la opción de realizar un backup de la base de datos y su respectivo restore.
Como gestor de mi base de datos uso mysql.
Realizar el backup no es problema, lo puedo hacer a través de mysqldump, pero al tratar de hacer el restore no puedo.
He buscado en internet y los comandos que se deben utilizar son: mysqldump -uUser -pPass test < backup.sql . El problema es que no se reconoce el simbolo de escape "<" que redirecciona la entrada del archivo.
Alguien puede ayudarme?
Desde ya muchas gracias.

En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1949



Ver Perfil WWW Email
« Respuesta #1 en: Agosto 02, 2008, 06:26:24 »

Hola:

El restore se hace con mylsq, no con mysqldump. Posiblemente también tengas que crear previamente la base de datos, ya que mysqldump no suele hacerlo.

Código:
mysql> create database LA_BASE_DATOS
...
$ mysql -u root -ppassword LA_BASE_DATOS < backup.sql

Se buena.
« Última modificación: Agosto 02, 2008, 06:32:12 por chuidiang » En línea

Maria123
Newbie
*
Mensajes: 9


Ver Perfil
« Respuesta #2 en: Agosto 05, 2008, 05:07:39 »

Hola!
Intenté hacer el restore como tu me dijiste pero no me funcionó.
Mi código es el siguiente:

          String usuario = "root";
          String dbName = "bd";
          String password = "root";
          String file = "backup.sql";
          Runtime rt = Runtime.getRuntime();
          try {           
              String command = "mysql> create database " + dbName;
              rt.exec(command);
              String command2 = "mysql> -u"+usuario + " -p"+password + " " + dbName + " < " + file;
              rt.exec(command2);
          } catch (IOException ex) {
              ex.printStackTrace();
          }

y al ejecutarlo me da el siguiente error: java.io.IOException: Cannot run program "mysql>": CreateProcess error=2, El sistema no puede hallar el archivo especificado.
Probé de crear la base de datos primero para luego hacer el restore pero me da el mismo error.
Si nuevamente puedes ayudarme, desde ya muchas gracias.
Sauldos
En línea
ozono
Newbie
*
Mensajes: 4


Ver Perfil Email
« Respuesta #3 en: Agosto 05, 2008, 09:49:07 »

Código:
              String command = "mysql> create database " + dbName;
              rt.exec(command);
              String command2 = "mysql> -u"+usuario + " -p"+password + " " + dbName + " < " + file;
              rt.exec(command2);

prueba a quitar el > de myql........

Código:
              String command = "mysql create database " + dbName;
              rt.exec(command);
              String command2 = "mysql -u"+usuario + " -p"+password + " " + dbName + " < " + file;
              rt.exec(command2);
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1949



Ver Perfil WWW Email
« Respuesta #4 en: Agosto 05, 2008, 09:51:58 »

Hola:

Lo de "mysql >" es el prompt de la línea de comandos de mysql. No tienes que ponerlo.

Primero crea la base de datos con un create database (desde java o desde fuera, como quieras o te permita tú aplicación).

Luego ejecuta el comando

mysql -u usuario ....

Esto NO lleva mysql>, no es el prompt de la línea de comandos mysql, sino el comando mysql en sí y sí tienes que ponerlo.

Se buena.
En línea

Maria123
Newbie
*
Mensajes: 9


Ver Perfil
« Respuesta #5 en: Agosto 08, 2008, 12:50:02 »

Hola!
Nuevamente gracias por sus respuestas.
He probado a quitar el ">" y crear al base de datos para luego hacer el restore pero sigue sin funcionar.
Ahora no lanza ningún error pero no ejecuta los comandos y no genera el restore.
He averiguado un poco más y sugieren hacer un archivo bat que se encargue de realizar el restore y el back up, esto es conveniente?
Cualquier sugerencia es aceptada.
Muchas gracias y saludos
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1949



Ver Perfil WWW Email
« Respuesta #6 en: Agosto 08, 2008, 09:21:43 »

Hola.

En principio da igual hacer un bat que llamarlo directamente desde java. La ventaja del bat es que es más fácil, ya que en ese .bat pones todos los comandos y suele ser más fácil. La pega es que un .bat sólo vale para windows, así que si lo haces con un .bat, tu aplicación sólo servirá para windows.

Se buena.
En línea

osvaldogh85
Newbie
*
Mensajes: 24


Ver Perfil Email
« Respuesta #7 en: Agosto 28, 2008, 10:41:40 »

para mi practica de graduacion tuve que hacer algo como eso.. si te sirve usalo

Código:
package cr.ac.ucr.threading.dasedatos;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;

import cr.ac.ucr.conexion.Conexion;
import cr.ac.ucr.gui.InterfazRespaldos;
import cr.ac.ucr.util.FiltroArchivo;
import cr.ac.ucr.util.SesionUsuario;
import cr.ac.ucr.util.Tiempo;

/**
 * @author Carlos Vega Gonzalez
 * @author Osvaldo Gonzalez Hernandez
 * @author Keylin Sosa Vargas
 *
 * @version 1.0
 * 2006
 */
public class ThreadRespaldoRecuperacion extends Thread {

private JList jlstRespaldos = null;
private DefaultListModel modeloLista = null;
private InterfazRespaldos interfazRespaldos;
private Tiempo tiempo = new Tiempo();
private PreparedStatement transaccion;
private Conexion conexion;
private Connection db;
private int operacion;
private final String CARPETA_RESPALDOS =
           "C:"+File.separator+"respaldoBaseDatos"+File.separator;
private final String ARCHIVO_RESPALDO = CARPETA_RESPALDOS +
           tiempo.getDate().concat(".sql");
private final String COMANDO_RESPALDO =
           "mysqldump --user=scec --password=scec scec";
private final String COMANDO_RESTAURACION =
            "mysql --user=root --password=root -e \"source ";

private final String CREAR_USUARIO_APLICACION =
           "grant all privileges on scec.* to 'scec' identified by 'scec' with grant option; \n" +
           "set password for 'scec' = password('scec');";

private final String CREAR_BASE_DATOS =
           "DROP DATABASE IF EXISTS `scec`; \n"+
   "CREATE DATABASE `scec`; \n"+
   "USE `scec`; \n";

private final int LOAD_RESPALDOS = 1, GENERAR_RESPALDO = 2,
           RESTAURAR_BASE_DATOS = 3;

/**
* @param modeloLista
* @param operacion
*/
public ThreadRespaldoRecuperacion(DefaultListModel modeloLista,
             int operacion) {
super();
this.modeloLista = modeloLista;
this.operacion = operacion;
}

/**
* @param interfazRespaldos
* @param modeloLista
* @param operacion
* @param jlstRespaldos
*/
public ThreadRespaldoRecuperacion(JList jlstRespaldos,
           DefaultListModel modeloLista,InterfazRespaldos interfazRespaldos,
           int operacion) {
super();
this.modeloLista = modeloLista;
this.interfazRespaldos = interfazRespaldos;
this.operacion = operacion;
this.jlstRespaldos = jlstRespaldos;
}

/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
super.run();
switch(operacion)
{
case LOAD_RESPALDOS:
loadRespaldos();
break;
case GENERAR_RESPALDO:
generarRespaldo();
break;
case RESTAURAR_BASE_DATOS:
restaurarBaseDatos();
break;
}
}

private void generarRespaldo()
{
BufferedInputStream inputStream = null;
BufferedWriter bufferWriter = null;
File nuevoRespaldo = null;
Process process = null;
try{
int caracterLeido;
process = Runtime.getRuntime().exec(COMANDO_RESPALDO);

inputStream = new BufferedInputStream(process.getInputStream());

nuevoRespaldo = new File(ARCHIVO_RESPALDO);
if(!nuevoRespaldo.exists())
nuevoRespaldo.createNewFile();
else{
if(nuevoRespaldo.delete())
nuevoRespaldo.createNewFile();
}
bufferWriter = new BufferedWriter(new FileWriter(nuevoRespaldo.getAbsolutePath()));

bufferWriter.write(CREAR_BASE_DATOS);

while((caracterLeido = inputStream.read()) != -1)
bufferWriter.append((char)caracterLeido);

bufferWriter.write(CREAR_USUARIO_APLICACION);

bufferWriter.flush();

try{

process.waitFor();
}catch(InterruptedException e){
e.printStackTrace();
}

nuevoRespaldo = null;
nuevoRespaldo = new File(ARCHIVO_RESPALDO);

if(nuevoRespaldo.exists() && nuevoRespaldo.length() > 0)
{
modeloLista.clear();
loadRespaldos();
String sentencia ="Insert into tb_bitacora(NOMBRE, DescripcionSuceso, Fecha, " +
"Hora) values (?,?,?,?)";
try{
conexion = new Conexion();
if(conexion.getEstadoConexion())
db = conexion.getConnection();

transaccion = db.prepareStatement(sentencia);
transaccion.setString(1,SesionUsuario.usuario.getNombre());
transaccion.setString(2,
                                            "Se ha realizado un backup de la Base de Datos, nombre del Backup = "
                                             + tiempo.getDate().concat(".sql"));
transaccion.setDate(3,tiempo.getFecha());
transaccion.setTime(4,tiempo.getHour());

transaccion.executeUpdate();
}catch(SQLException e){}
JOptionPane.showInternalMessageDialog(interfazRespaldos,
    "El respaldo se realizo correctamente", interfazRespaldos.getTitle(),   
     JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showInternalMessageDialog(interfazRespaldos,
              "EL respaldo no se realizo adecuadamente",
               interfazRespaldos.getTitle(), JOptionPane.ERROR_MESSAGE);
}catch(IOException e){e.printStackTrace();}
catch(IllegalThreadStateException e){e.printStackTrace();}
finally{
try{
inputStream.close();
bufferWriter.close();
nuevoRespaldo = null;
process.destroy();
}catch(IOException e){e.printStackTrace();}
}
}

private void loadRespaldos()
{
File respaldos = new File(CARPETA_RESPALDOS);
if(!respaldos.exists())
respaldos.mkdir();
File archivos[] = respaldos.listFiles(new FiltroArchivo("sql"));
if(archivos == null)
return;
for(int i=0; i<archivos.length; i++)
modeloLista.addElement(new String(archivos[i].getName()));
}

private void restaurarBaseDatos()
{
File archivoBat;
Process process = null;
boolean isError = false;
String sentencia=null;
ResultSet consulta = null;
if(jlstRespaldos.getSelectedIndex() == -1)
{
JOptionPane.showInternalMessageDialog(interfazRespaldos,
                             "Debe elejir un archivo para respaldar la Base de Datos",
                             interfazRespaldos.getTitle(),
                             JOptionPane.ERROR_MESSAGE);
return;
}
String comando = COMANDO_RESTAURACION +
                         CARPETA_RESPALDOS +
                        (String)jlstRespaldos.getSelectedValue()+
                        "\" scec";

archivoBat =  new File(CARPETA_RESPALDOS+"restaurar.bat");
try{
if(!archivoBat.exists())
archivoBat.createNewFile();
else
if(archivoBat.delete())
archivoBat.createNewFile();

FileWriter escritorArchivo = new FileWriter(archivoBat);
escritorArchivo.write(comando);
escritorArchivo.flush();

process = Runtime.getRuntime().exec(comando);
process.waitFor();

conexion = new Conexion();
if(conexion.getEstadoConexion())
db = conexion.getConnection();

Statement canal = conexion.getStatement();
sentencia="select * from tb_usuario";
consulta = canal.executeQuery(sentencia);
if(consulta.next())
isError = true;

if(isError)
{
sentencia ="Insert into tb_bitacora(NOMBRE,
                                     DescripcionSuceso, Fecha, " +
    "Hora) values (?,?,?,?)";
transaccion = db.prepareStatement(sentencia);
transaccion.setString(1,SesionUsuario.usuario.getNombre());
transaccion.setString(2,
                                    "Se ha realizado una restauracion de la Base de Datos, nombre del Backup elegido = " +
                                     (String)jlstRespaldos.getSelectedValue());
transaccion.setDate(3,tiempo.getFecha());
transaccion.setTime(4,tiempo.getHour());
transaccion.executeUpdate();
JOptionPane.showInternalMessageDialog(interfazRespaldos,
       "La restauracion se realizo correctamente", interfazRespaldos.getTitle(),
        JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showInternalMessageDialog(interfazRespaldos,
        "La restauracion no se realizo adecuadamente", 
         interfazRespaldos.getTitle(), JOptionPane.ERROR_MESSAGE);

}catch(IOException e){ e.printStackTrace(); }
catch(IllegalThreadStateException e){ e.printStackTrace(); }
catch(SQLException e){ e.printStackTrace(); }
catch(InterruptedException  e){ e.printStackTrace(); }
finally{
process.destroy();
}
}

/* (non-Javadoc)
* @see java.lang.Object#finalize()
*/
@Override
protected void finalize() throws Throwable {
super.finalize();
if(db != null)
db.close();
transaccion.close();
if(conexion != null)
conexion.cerrarConexion();
db = null;
conexion = null;
transaccion = null;
tiempo = null;
}
« Última modificación: Agosto 29, 2008, 09:09:53 por chuidiang » En línea
Páginas: [1] Enviar tema Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by MySQL Powered by PHP Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC XHTML 1.0 válido! CSS válido!