Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Diciembre 02, 2008, 12:00:52
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
| | |-+  Ayuda con backup de mysql
« anterior próximo »
Páginas: [1] 2 Enviar tema Imprimir
Autor Tema: Ayuda con backup de mysql  (Leído 1074 veces)
Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email


« en: Noviembre 08, 2007, 04:12:37 »

Buenas, estoy tratando de hacer el backup de la base de datos que tengo en mysql cuando cierra el programa. Lo que tengo hasta ahora es lo siguiente:
Código:
public void SQL_Backup()
{
try{
Runtime.getRuntime().exec("mysqldump -uroot -proot nombreDatabase > c:/Backup.sql");
}
catch(Exception e)
{
e.printStackTrace();
}
}
Pero no hace nada. La linea
Código:
mysqldump -uroot -proot nombreDatabase > c:/Backup.sql
funciona si la ejecuto desde consola y me crea el archivo backup, pero no logro hacerlo desde el java.
Gracias!!!
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #1 en: Noviembre 08, 2007, 05:12:55 »

Hola:

No sé si va por ahí los tiros, pero cuando ejecutas un programa desde java, en este caso mysqldump, la salida estándar de java se redirige al ejecutable de java y no por la pantalla. Es posible que toda esa salida vaya a tu programa java -y no la estás leyendo- en vez de al fichero al que la rediriges con >

Prueba a pedirle al Process que obtienes con Runtime.getRuntime().exec() el getInputStream() y leer de ahí. Quizás la estés recibiendo por ahí. Echa un ojo en leer salida de un programa externo con java para er más detalles.

Se bueno.
En línea

Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #2 en: Noviembre 08, 2007, 05:35:29 »

Ok ahora tengo esto:
Código:
public void SQL_Backup()
{
InputStream i;
BufferedReader br;
try{
i = (Runtime.getRuntime().exec("mysqldump -uroot -proot database > C:/SQLbackup.sql").getInputStream());
br = new BufferedReader (new InputStreamReader (i));
String aux = br.readLine();
while (aux!=null)
            {
                System.out.println (aux);
                 aux = br.readLine();
            }
}
catch(Exception e)
{
e.printStackTrace();
}
}

Y me tira lo siguiente:
Código:
-- MySQL dump 10.10
--
-- Host: localhost    Database: prj-futbol-dev-v01
-- ------------------------------------------------------
-- Server version 5.0.22-community-nt

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

Que no es la salida que creo tiene que ser, y como puede poner eso en un archivo??
Gracias!!!
En línea
Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #3 en: Noviembre 08, 2007, 05:52:44 »

Logre meter la salida en un archivo asi:
Código:
public void SQL_Backup()
{
InputStream i;
BufferedReader br;
try{
i = (Runtime.getRuntime().exec("mysqldump -uroot -proot database > C:\\Backup.sql").getInputStream());
br = new BufferedReader (new InputStreamReader (i));
String aux = br.readLine();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:/Backup.sql"));
while (aux!=null)
            {
oos.writeObject(aux);
aux = br.readLine();
            }
oos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}

Pero hay 2 cosas, primero que no es la salida que espero y segundo que escribe algunos caracteres distinto a como me muestra el print.
Gracias!!!
En línea
Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #4 en: Noviembre 08, 2007, 07:24:37 »

Ahora estoy probando de otra forma. Cree un backup.bat con la linea : mysqldump -uroot -proot database > backup.sql

Y lo quiero ejecutar desde java pero no me da bola
El codigo:
Código:
public void SQL_Backup()
{
             Runtime rt = Runtime.getRuntime();

try{
rt.exec ("C:\\Backup.bat");
}
}
        catch(Exception e){System.out.println(e);}
}
Porque no corre?Huh Probe de varias formas pero no lo logro.
El backup.bat anda perfecto si lo ejecuto solo.
Gracias!!
En línea
Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #5 en: Noviembre 08, 2007, 07:39:43 »

Bueno de nuevo (estoy pesado como empanada de bulones  Sonreir ).
Lo logre pero hay un tema que me falta. El codigo:
Código:
public void SQL_Backup()
{
try{
String auxiliar;
Process p = Runtime.getRuntime().exec ("C:\\Backup.bat");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader (new InputStreamReader(is));
while ((auxiliar=br.readLine())!=null)
JOptionPane.showMessageDialog(Principal.oInicio,auxiliar,"Recuperar DB Futbol 1.0",JOptionPane.ERROR_MESSAGE);
}
catch (Exception e)
{
e.printStackTrace();
}
}

Ahora el problema es que me guarda el archivo Backup en el classpath . Es decir, si lo ejecuto desde el eclipse, el archivo lo guarda en la carpeta del proyecto, y si ejecuto el jar me lo guarda en la carpeta donde tengo el jar.
Como hago para que lo guarde en la carpeta Backup que esta dentro de la carpeta donde tengo el jar??
Yo pense en hacerla facil y trasladar el archivo desde java una vez que lo cree, pero si hay otra forma mejor.
GRACIAS
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #6 en: Noviembre 08, 2007, 08:42:47 »

Hola:

En la parte en que tú escribias el fichero desde java, en vez de usar un ObjectOutputStream, usa un PrintWriter y el método println(). El ObjectOutputStream escribe clases String, no textos,  y mete por tanto la "guarrería" de la clase. PrintWriter.println() escribe líneas de texto igual que por la pantalla.

Si sigues optando por el .bat, en la redirección del fichero que supongo que tienes dentro, ponle el path completo donde lo quieres. Otra opción es parsar al .bat un parámetro que indique el path donde debe dejar el fichero y en el Runtime.exec() pasar ese parámetro.

Se bueno.
En línea

Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #7 en: Noviembre 09, 2007, 05:46:05 »

Si lo escribo desde java me tendria que quedar asi??

Código:
public void SQL_Backup()
{
InputStream i;
BufferedReader br;
try{
i = (Runtime.getRuntime().exec("mysqldump -uroot -proot database > C:\\Backup.sql").getInputStream());
br = new BufferedReader (new InputStreamReader (i));
String aux = br.readLine();
PrintWriter p = new PrintWriter(new FileWriter("C:/Backup.sql"));
while (aux!=null)
            {
p.println(aux);
aux = br.readLine();
            }
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

Porque no me hace nada eso, me crea un archivo vacio. Porque será que no puedo ejecutar el comando desde el java?? Que estoy haciendo mal??
GRACIAS!!
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #8 en: Noviembre 09, 2007, 05:48:21 »

Hola:

Quita el "> c:\Backup.sql" del exec(), ya que ese fichero lo estás escribiendo tú. Es posible que entre la redirección y tu escritura con PrintWriter os esteis "machando" el uno al otro.

Se bueno.
En línea

Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #9 en: Noviembre 09, 2007, 06:44:32 »

Tenes razon como siempre. Ahora el problema es que no me escribe el archivo entero, le faltan un par de tablas, sera algun problema de tamaño del BuffederReader o algo de eso??? GRACIAS!!!!
En línea
Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #10 en: Noviembre 09, 2007, 06:52:54 »

Mostre por consola la salida a medida que la iba agregando al PrintWriter y es bien pero en el archivo no escribe todo lo que sale por consola, le falta una buena parte. Gracias
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #11 en: Noviembre 09, 2007, 09:09:21 »

Hola:

Si lo que le falta es del final, prueba a poner los close() de PrintWriter.

Se bueno.
En línea

Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #12 en: Noviembre 10, 2007, 12:19:19 »

Gracias capo!!
Ahora voy a tener que ver como recuperar la DB con ese backup porque no me toma la linea en la parte que le pongo el archivo que tiene que usar para hacer el backup:
Código:
mysql -u user -proot database < c:/Carpeta/Backup.sql
Me dice que no se encuentra la tabla Carpeta ejecutandolo en la consola.
Gracias
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #13 en: Noviembre 10, 2007, 07:31:16 »

Hola:

Tiene pinta de ser por el nombre del fichero. Prueba con las barras en el sentido de windows c:\Carpeta\Backup.sql.

Se bueno.
En línea

Polaco
Jr. Member
**
Mensajes: 63


Ver Perfil Email
« Respuesta #14 en: Noviembre 12, 2007, 04:32:31 »

Si es por el nombre del fichero, pero el problema está en el directorio.
Si pongo:
Código:
mysqldump -uroot -proot nombreDatabase < c:\Carpeta\Backup.sql
Funciona bien, ahora si pongo la carpeta que tengo que es la que tengo que usar me tira error:
Código:
mysqldump -uroot -proot nombreDatabase > c:\DB Futbol 1.0\Backup\Backup.sql
Me dice que no encuentra la tabla Futbol. Tendré que poner alguna opcion para que me tome bien la direccion???
En línea
Páginas: [1] 2 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!