Recuperar un backup mysqldump desde java

From ChuWiki
Jump to navigation Jump to search

He metido todos los artículos de esta wiki y de http://chuidiang.org relativos a Java y JDBC en un pdf Libro JDBC Java. A través del enlace puedes comprarlo si tienes interés.

Recuperar un backup mysqldump desde java[edit]

Supongamos que con mysqldump hemos hecho un backup de nuestra base de datos hibernate (usuario hibernate y password hibernate) en un fichero e:/backup.sql

mysqldump -u hibernate -phibernate hibernate > e:\backup.sql

Vamos ahora a ver cómo recuperar ese backup en nuestra base de datos desde código java. Tienes el ejemplo completo en RecuperarBackup.java. Lo primero, suponemos que ya tenemos la base de datos hibernate creada y que no tiene ninguna tabla ni dato.

mysql> create database hibernate;

El código java[edit]

Lo primero es arrancar desde java el cliente de mysql, pasando usuario, password y base de datos, con Runtime.getRuntime().exec(). La línea puede ser como la siguiente

Process p = Runtime.getRuntime().exec(
   "c:/aplicaciones/wamp/mysql/bin/mysql -u hibernate -phibernate hibernate");

en este caso hemos puesto la ruta completa del comando mysql. La opción -u hibernate es el usuario, -phibernate es la password (sólo hibernate, el -p es la opción) e hibernate es la base de datos. Curiosamente el -u va separado del usuario hibernate, pero el -p va junto con la password hibernate.


Salida de errores[edit]

Como precaución durante el proceso y para tener idea de si algo va mal, obtendremos la salida de errores del comando y la sacaremos por pantalla. Para no dejar todo bloqueado en este proceso, lo haremos con un hilo separado.

InputStream es = p.getErrorStream();
Thread hiloError = new Thread() {
   public void run() {
      try {
         byte[] buffer = new byte[1024];
         int leido = es.read(buffer);
         while (leido > 0) {
            System.out.println(new String(buffer, 0, leido));
            leido = es.read(buffer);
         }
         es.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
};
hiloError.start();


La redirección del fichero de backup[edit]

Ahora sólo nos queda un bucle que lea el fichero de backup y lo meta en la entrada estándar del comando mysql. Al terminar, cerraremos la entrada estándar para hacer que el comando mysql termine.

OutputStream os = p.getOutputStream();
FileInputStream fis = new FileInputStream("e:/backup.sql");

byte buffer[] = new byte[1024];
int leido = fis.read(buffer);
while (leido > 0) {
   System.out.println(leido);
   os.write(buffer, 0, leido);
   leido = fis.read(buffer);
}
os.close();
fis.close();

Y con esto está debería estar todo listo.