FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Backup y mysql
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Backup y mysql
Posted: Tue Sep 14, 2021 01:28 PM

Amigos, estoy queriendo guardar un backup en un servidor remoto mysql. Todo funciona salvo cuando quiero recuperar el backup, el registro me devuelve 310 bytes menos que el original, por supuesto cuando quiero restaurar me dice que el backup está corrupto. E intentado con un campo longblob y longtext sin ningún resultado. Alguna pista donde mirar? Muchas gracias!.

Saludos

Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Backup y mysql
Posted: Tue Sep 14, 2021 05:28 PM

Hola Horacio.
Cómo estás haciendo el Backup?
Y cómo estás haciendo el Restore?

Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Backup y mysql
Posted: Tue Sep 14, 2021 08:09 PM
Horacio

Lo hago así:
Backup
Code (fw): Select all Collapse
C:\Archivos de programas\MySqlMaDB\bin\MySqlDump -h localhost -u root -pclave base>D:\Sistemas\rrhh\data\bkrrhh.sql


Restore
Code (fw): Select all Collapse
C:\Archivos de programas\MySqlMaDB\bin\mysql -u root -pclave base<D:\Sistemas\rrhh\data\bkrrhh.sql
Saludos,



Adhemar C.
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Backup y mysql
Posted: Tue Sep 14, 2021 11:53 PM
Estoy usando FwMariaDb para conectarme con Mysql, pongo código, se va a entender mejor lo que quiero hacer

Code (fw): Select all Collapse
cBackup := Memoread( "C:\backup\backup.sql" )
cUpdate := "Update empresa set backup '" + cBackup + "' where codigo = 1"
oCon : Execute( cUpdate )

Quiero guardar el backup en un campo de una base de datos. Cuando hago la lectura de ese campo no me devuelve la longitud correcta, faltan 310 bytes.
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Backup y mysql
Posted: Wed Sep 15, 2021 02:14 AM
Horario,
En principio en el update te falta el signo "="

Code (fw): Select all Collapse
cUpdate := "Update empresa set backup = '" + cBackup + "' where codigo = 1"


De todos modos, no tiene por qué tener la misma cantidad de bytes el archivo que la cadena que se ve en el memoread.
Por otro lado, debes entender que en el query estarias grabando en el campo blob el contenido del archivo de texto .sql, (Ahora en el .sql puede haber un backup o un texto cualquiera)
No me parece que sea el mejor método para hacer un backup poner el backup en el campo de una tabla.

De todos modos, una forma más apropiada de insertar el archivo en el campo BLOB sería la siguiente.

Code (fw): Select all Collapse
cFile   :="C:/backup/backup.sql"
cUpdate :="UPDATE empresa SET backup=LOAD_FILE('"+cFile+"') WHERE codigo=1"

En este ejemplo estaría insertando en el campo directamente el archivo, no el contenido del archivo.

Espero te sirvan los comentarios.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Backup y mysql
Posted: Thu Sep 16, 2021 12:48 PM

Hola Eduardo, gracias por tu respuesta, me olvide de poner el igual. Probaré tu solución. Con respecto al tamaño recuperado yo creo que si debería ser igual al backup original, de hecho es solo texto.

Saludos

Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Re: Backup y mysql
Posted: Fri Sep 17, 2021 12:29 AM
Hummm meter un respaldo en un campo ? Salvo que la DB tenga muuuuy poca info !

La opcion de Ademar funciona muy bien, solo que tarda una eternidad la restauracion si la DB es mediana a grande !

En mi caso, uso lo siguiente :

- Verifico y detengo el servicio
Code (fw): Select all Collapse
static function VrfMySrvSts()
local oLoc, oWmi, oServiceList, oService, aSrvDts2Ret := {.f.,""}

oLoc:= CreateObject( "wbemScripting.SwbemLocator" )
oWmi:= oLoc:ConnectServer()

if oWmi == nil
    msginfo( "NO SE PUDO OBTENER INFO DEL MOTOR DE DATOS PARA GENERAR EL RESPALDO.","AVISO" )
    return aSrvDts2Ret
endif


oServiceList := oWmi:ExecQuery( "select * from Win32_Service where Name='MySQL'" )
for each oService in oServiceList
    if oService:State == "Stopped"
    aSrvDts2Ret[1] := .t.
    endif
    if oService:State == "Running"
            oService:StopService()
            aSrvDts2Ret[1] := .t.
            aSrvDts2Ret[2] := "MySQL"
        endif
    next

return aSrvDts2Ret



- Ejecuto este programita similar al winzip o winrar desde linea de comandos
Code (fw): Select all Collapse
aBckUpDatDts[2] := "c:\Repaldos"
aBckUpDatDts[3] := "c:\CarpetaDeMySql"
cBckPFix := "NombreDeTuRespaldo" + " "         // Ojo en el espacio final sirve para separar los parametros !!!

aSrvMyDts := VrfMySrvSts()

if aSrvMyDts[1]
    WaitRun( "7za.exe a " + aBckUpDatDts[2] + "\rsbck_" + cBckPFix + aBckUpDatDts[1] + "\DATA -pTuPassword", 0 )     // -p Para comprimir con password
endif
 

- Arranco el servicio otra vez
WaitRun( "sc start " + aSrvMyDts[2], 0 )

if vrfSqlEngOn()
// Aqui nomalmente lo que hago es cerrar el programa y que vuelvan a entrar...
endif

endif


Code (fw): Select all Collapse
static function vrfSqlEngOn()
local oLoc, oWmi, oServiceList, oService, lVal2Ret := .f.

oLoc:= CreateObject( "wbemScripting.SwbemLocator" )
oWmi:= oLoc:ConnectServer

if oWmi == nil
    DckMBox( 1, "NO FUE POSIBLE ARRANCAR EL MOTOR DE DATOS DESPUES DEL RESPALDO.",,,, )
    return lVal2Ret
endif

oServiceList := oWmi:ExecQuery( "select * from Win32_Service where Name='MySQL'" )

for each oService in oServiceList
    if oService:State == "Running"
        lVal2Ret   := .t.
    endif
next

return lVal2Ret


El 7za.exe lo puedes encontrar sin problemas en google
Dependiendo de la pc, es posible que tengas que ejecutar como administrador.

Esto lo estoy usando desde hace años en DBs medianas ( 40 a 70 millones de registros ) sin ningun problemas hasta la fecha.

Espero les sirva.

Saludos
FWH 10.6 + xHarbour + Borland 582
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Backup y mysql
Posted: Tue Sep 21, 2021 02:43 PM

Amigos, finalmente desistí de guardar un backup en un campo de mysql. Opte por subir el backup directamente al servidor con pscp una utilidad de putty sumamente rápida y sencilla. Muchas gracias por sus respuestas.

Saludos

Continue the discussion