Respaldar y Restaurar bases de datos MySQL desde Java 6o5039

Esta es una forma sencilla de respaldar bases de datos MySQL desde Java generado los llamados dumpfiles o archivos de volcado de extensión .sql. 4p1kn
Para ello no tenemos soluciones puras en Java, pero podemos realizar esta operación por medio de herramientas que el mismo MySQL Server nos brinda que se llama mysqldump.
Ubicar las herramientas necesarias 5w4k2y
Si tienes MySQL Server instalado, puedes buscar en el siguiente directorio
C:Program FilesMySQLMySQL Server 8.0bin el ejecutable mysqldump.exe, mysql.exe y sus .dll, copia ambos archivos así como todas las .dll y crear una carpeta /bin/ en tu proyecto, en donde copiaras todos esos archivos.
Ya que tengas las herramientas copiadas en la carpeta de tu proyecto vamos a realizar la codificación.
Respaldar la base de datos u5c4t
De acuerdo a la documentación de mysqldump debemos realizar las operaciones por comandos que ahí mismo especifica, utilizando ese documento como referencia a continuación te dejo la linea que nos permitirá realizar un volcado de nuestra base de datos:
mysqldump --host [su_host] -u [su_] -p[su_contraseña] [nombre_base_datos] -r [ruta] en donde:
- [su_host]: Representa el host donde esta alojada tu base de datos, si tienes el servidor corriendo en tu propia PC puedes utilizar localhost como tal o de lo contrario la dirección o IP de tu host remoto, para ello utilizamos la opción –host.
- [su_]: Es el nombre del de tu base de datos, por ejemplo muchos tenemos root para todo, en caso de que tengas otro aqui puedes ponderlo enseguida de la opcion -u.
- [su_contraseña]: Utilizando la opción -p, definimos la contraseña del de nuestra base de datos, esta opcion se utiliza sin dejar espacios entre -p y su contraseña, por ejemplo, -p1234.
- [nombre_base_datos]: Si solo va a realizar el respaldo de una sola base de datos simplemente coloque el nombre la base de datos sin nada más, si va respaldar más de una debe utilizar la opción –databases.
- [ruta]: -r es la opción result file (archivo resultante), aqui espeficamos el nombre que tendrá el archivo de salida, podemos ponerle un nombre como tal (
dumpfile.sql ) o con el directorio completo donde queremos que se almacene (
C:dumpfile.sql ).
En mi caso tengo una base de datos llamada pruebas, y es la que pienso respaldar entonces mi comando queda de la siguiente manera:
mysqldump --host localhost -u root -p1234 pruebas -r backup.sql Para ejecutar este comando desde código en Java vamos un método llamado respaldo() y su contenido va a ser el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
void respaldar() {
try {
/* - Datos de a nuestra base de datos */
/* Usa localhost si el servidor corre en la misma maquina, de lo
contrario utiliza la IP o dirección del sevidor*/
String dbServer = "localhost";
/* El de tu base de datos*/
String dbName = "pruebas";
/* El de tu base de datos*/
String db = "root";
/* La contraseña de la base de datos (dejarla en texto plano puede
ser un problema)*/
String db = "2362";
/*El nombre o ruta a donde se guardara el archivo de volcado .sql*/
String sqlFile = "backups\respaldo.sql";
/* La linea de comando completa que ejecutara el programa*/
String command = "bin/mysqldump --host " + dbServer + " -u " + db
+ " -p" + db + " " + dbName + " -r " + sqlFile;
/*Se crea un proceso que ejecuta el comando dado*/
Process bck = Runtime.getRuntime().exec(command);
/* Obtiene el flujo de datos del proceso, esto se hace para obtener
el texto del proceso*/
InputStream stdout = bck.getErrorStream();
/* Se obtiene el resultado de finalizacion del proceso*/
int resultado = bck.waitFor();
String line;
/* Se crea un buffer de lectura con el flujo de datos outstd y ese mismo
sera leido e impreso, esto mostrara el texto que muestre el programa
mysqldump, de esta forma sabra cual es el error en su comando*/
BufferedReader brCleanUp
= new BufferedReader(new InputStreamReader(stdout));
while ((line = brCleanUp.readLine()) != null) {
System.out.println(line);
}
brCleanUp.close();
if (resultado == 0) {
System.out.println("Respaldo exitoso");
} else {
System.out.println("Error al respaldar");
}
} catch (IOException | InterruptedException ex) {
System.out.println("Exception: " + ex.getMessage());
}
}
|
Este método nos crea un volcado completo de nuestra base de datos en el directorio
backups y nos va a imprimir un mensaje en consola con los eventos del programa, esto para verificar si hay errores.
Si abrimos el archivo generado veremos que se incluye toda la estructura de nuestra base de datos incluyendo tablas y los registros.
Restauración de la base de datos 4c1x1b
Ahora para restaurar partiendo del archivo de volcado vamos a utilizar el ejecutable mysql.exe en lugar del dumpmysql.exe y de igual forma mediante un comando vamos a restaurar toda nuestra base de datos.
Para ello creamos un método llamado restaurar() con el siguiente código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
void restaurar() {
try {
/* - Datos de a nuestra base de datos */
/* Usa localhost si el servidor corre en la misma maquina, de lo
contrario utiliza la IP o dirección del sevidor*/
String dbServer = "localhost";
/* El nombre de tu base de datos*/
String dbName = "pruebas";
/* El de tu base de datos*/
String db = "root";
/* La contraseña de la base de datos (dejarla en texto plano puede
ser un problema)*/
String db = "2362";
/*Nombre o ruta del archivo de volcado del cual se va a restaurar*/
String sqlFile = "backups\respaldo.sql";
/* Comando a ejecutar, note que se utiliza un array, ya que una sola
linea causaria un bloqueo de búfer*/
String command[] = new String[]{"bin/mysql", dbName, "-u" + db, "-p"
+ db, "-e", " source " + sqlFile};
/*Se crea un proceso que ejecuta el comando dado*/
Process bck = Runtime.getRuntime().exec(command);
/* Obtiene el flujo de datos del proceso, esto se hace para obtener
el texto del proceso*/
InputStream stdout = bck.getErrorStream();
/* Se obtiene el resultado de finalizacion del proceso*/
int resultado = bck.waitFor();
String line;
/* Se crea un buffer de lectura con el flujo de datos outstd y ese mismo
sera leido e impreso, esto mostrara el texto que muestre el programa
mysqldump, de esta forma sabra cual es el error en su comando*/
BufferedReader brCleanUp
= new BufferedReader(new InputStreamReader(stdout));
while ((line = brCleanUp.readLine()) != null) {
System.out.println(line);
}
brCleanUp.close();
if (resultado == 0) {
System.out.println("Restauración exitosa");
} else {
System.out.println("Error al restaurar");
}
} catch (IOException | InterruptedException ex) {
System.out.println("Exception: " + ex.getMessage());
}
}
|
Nuevamente este método imprimirá una salida con los eventos del comando.
Esta es una forma sencilla de respaldar bases de datos MySQL desde Java y también de restaurarlas, esto utilizando herramientas que el propio MySQL Server ya tiene integradas.
Descargas 677224
Puedes bajarte el ejemplo completo hecho en NetBeans para que puedas estudiarte su funcionamiento e implementarlo en tus proyectos.
Descarga el código fuente del proyecto
Referencias, toda la documentación involucrada la puedes encontrar en las siguientes ligas:
- mysqldump — A Database Backup Program
- mysql — The MySQL Command-Line Client
- Tutoriales Java en scrapywar.futbolgratis.org
¿Tienes problemas? Usa los comentarios o como todo buen programador puedes ir a Stack Overflow, publicar tu problema y esperar a recibir respuestas (casi siempre hay solución).