Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   restaurar B.D. con mysql (https://www.clubdelphi.com/foros/showthread.php?t=91541)

emeritos 01-03-2017 09:38:24

restaurar B.D. con mysql
 
Hola dilferos.

He realizado con esta sentencia una copia de seguridad de mi dase de datos:
Código Delphi [-]
   operacion:='open';
   nombre:='mysqldump.exe';
   parametro:='--skip-opt --compact --user=xxx --password=xxx bd --result-file="C:\xxx\respaldo.sql"';
   path:='C:\xxx\';
   shellexecute(handle,pchar(operacion),pchar(nombre),pchar(parametro),pchar(path),sw_shownormal);

y me sale bien (supongo) por que a la hora de restaurarla con mysql administrator me dice que errorm porque no ha sido creada con ella.

Pero la cuestion es que al restaurarla con esta sentencia:
Código Delphi [-]
   operacion:='open';
   nombre:='mysql.exe';
   parametro:='--user=xxx --password=xxx bd < c:\xxx\respaldo.sql';
   path:='C:\xxx\';
   shellexecute(handle,pchar(operacion),pchar(nombre),pchar(parametro),pchar(path),sw_shownormal);

no sale nada y si lo realizo a traves del cmd.exe me dice que ya existe la tabla en cuestion (que es la primera que esta en la bd), es decir, que no la copia porque ya existe.

¿Existe algunos parametros en mysql para que no diga esto y lo copie?

emeritos 01-03-2017 13:16:26

ejecutar mysql para restaurar
 
Hola dilferos:
He realizado una copia de seguridad de mi db con mysqldump (delphi7)

Código Delphi [-]
    operacion:='open';
    nombre:='mysqldump.exe';
    parametro:='--opt --add-drop-table --user=beni --password=penco --databases beni --result-file="C:\beni\respaldoBOP.sql"';
    path:='C:\beni\';
    shellexecute(handle,pchar(operacion),pchar(nombre),pchar(parametro),pchar(path),sw_shownormal);

Ha salido todo bien de momento.Per a la hora de restaurarla con mysql

Código Delphi [-]
    operacion:='open';
    nombre:='mysql.exe';
    parametro:='--user="beni" --password="penco" beni < "C:\beni\respaldo.sql"';
    path:='C:\beni\';
    shellexecute(handle,pchar(operacion),pchar(nombre),pchar(parametro),pchar(path),sw_shownormal);

Y lo unico que hace es sacarme por pantalla las opciones de mysql, incluso son las ".

A traves del teclado con cmd la misma sentencia lo realiza bien.

¿Por que y como solucionarlo ?

Gracias.

ecfisa 01-03-2017 15:31:32

Hola emeritos.

Por favor no publiques temas con el mismo contenido bajo distintos títulos, eso multiplica los temas y los resultados en las búsquedas.
Combiné ambos temas bajo el primer título.

Saludos y gracias por tu colaboración :)

roman 01-03-2017 16:34:45

Normalmente, mysqldump genera estas sentencias para cada tabla de la base de datos:

Código SQL [-]
DROP TABLE IF EXISTS `tabla`;
CREATE TABLE `tabla` (...);
INSERT INTO `tabla` VALUES (...),(...),...

Al poner la opción --skip-opt, mysqldump omite la sentencia DROP y por tanto, al restaurar falla al intentar crear una tabla ya existente. Desafortunadamente, aunque mysql cuenta con la sentencia

Código SQL [-]
CREATE TABLE IF NOT EXISTS `tabla` ...

mysqldump no la incluye. Así que, si vas a restaurar sobre una base ya existente, no coloques --skip-opt



Ahora, en MSDOS (y otros sistemas), en una línea como:

Código:

mysql.exe -uusuario -ppassword bd < respaldo.sql
respaldo.sql no es un parámetro del comando (como sí lo son -uusuario y -ppassword) sino una redirección de la entrada estándar; en lugar del teclado, la entrada se proporciona por un archivo de texto. Esto lo digo para indicarte que no puedes usar redirecciones así en ShellExecute, como lo estás intentando.

En este mensaje puedes ver una manera de usar ShellExecute y mysql.exe para restaurar un respaldo creado con mysqldump.

LineComment Saludos

emeritos 01-03-2017 18:04:43

muchas gracias.
Pero hay una cosa que no entiendo si pongo para restaurarla como ma indicado:

Código Delphi [-]
    operacion:='open';
    nombre:='mysql.exe';
    parametro:='-e "source \beni\respaldo.sql" bd
    path:='C:\beni\';
    shellexecute(handle,pchar(operacion),pchar(nombre),pchar(parametro),pchar(path),sw_shownormal);

asi deberia de funcionar supongo, pero donde se pone el usuario y el password de la b.d.


saludos.

roman 01-03-2017 18:29:08

Simplemente se lo añades a la variable parametro:

Código Delphi [-]
parametro := '-uusuario -ppassword -e "source \ruta\al\respaldo.sql" bd';

LineComment Saludos

emeritos 02-03-2017 08:27:17

Muchas gracias. Me ha servido para mucho, Me ha solucionado el problema.


La franja horaria es GMT +2. Ahora son las 17:05:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi