FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posted: Sat Aug 23, 2014 08:20 PM
Saludos, estoy usando xHarbour, alguien ha hecho respaldo y restauracion de las database mysql con la clase TDolphin.? ...logre hacer el backup, luego probe restaurarlo con navicat y no me trajo las tablas, parece que el .SQL no es compatible, estoy probando restaurar con la misma TDolphin, mis tablas son InnoDb, las ayudas, sugerencias, recomendaciones y opciones son bienvenidas.

Que sugieren mejor usar para respaldo/restaurar tablas InnoDb.?...saludos... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posted: Sat Aug 23, 2014 08:31 PM

Hola...
Yo uso estas sentencias para el backup y el restore,,,,( el detalle esta en que no guarda las estructuras,,, pero es mucho mas r谩pido que mysqldump)...
pero,,, solo backupeas y las restauras desde tu aplicaci贸n,,,,

SELECT * INTO OUTFILE //copias/productos FROM tabprod ORDER BY c贸digo // copia la data de la tabla tabprod a un archivo plano productos

LOAD DATA INFILE //copias/productos INTO TABLE tabprod // llena la tabla tabprod desde el archivo plano productos..

Salu2

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posted: Sat Aug 23, 2014 08:42 PM

Willi, esa opcion la estoy probando, pero como dices, solo guarda la data y no la estructura de la tabla, intente usar mysqldump en un excute() y aun no me funciona bien, creo me falta un parametro, estoy leyendo sobre su uso, lei que algunas funciones de respaldo de MySql solo funcionan en tablas MyISam, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posted: Sun Aug 24, 2014 01:42 AM

Hola,,,
Un detalle, esas funciones que te indique, solo funcionan en el server... no en las estaciones de trabajo,,, esto es valido por un tema de seguridad,,, as铆 que desde cualquier estaci贸n no se puede sacar backups.... ya suena mas seguro..

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posted: Sun Aug 24, 2014 02:06 AM

Ya lo pille Willi, pero el detalles es que solo respalda la data y no la estructura de las tablas, pude hacer respaldo y estauracion con TDolphin, pero tengo una tabla con 700 registros, para respaldarla todo bien, pero cuando intento restaurarla no lo hace en esa tabla, probe borrando todas las tablas y crea la de los 700 registros, pero nunca trae la data, lanza un error de tdolhpin y si no borro la tabla, entonces se queda colgado el sistema y nunca trae data, si quito esa tabla o hago el respaldo con tablas con pocos registros todo trabaja bien, mis tablas son InnoDb y uso xHarbour, espero algun otra sugerencia o experiencia de otros colegas de saber como hacen sus respaldo de database de mysql, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posted: Sun Aug 24, 2014 03:26 AM
Hola...
Hago backups con una 60m tablas y algunas de ellas con 500,000 registros,,, con los comandos que te mencione,,, y adem谩s los zipe con password... asi nadie (o casi nadie) las puede ver... echale un ojo a este c贸digo
Code (fw): Select all Collapse
# include "fivewin.ch"                  // 0x4L |
# include "btnget.ch"
# include "eagle1.ch"
# include "Splitter.ch"
# include "report.ch"
static oWnd, oDlg                   // objeto ventana principal
STATIC oAppW, oTray, oIcon
//---------------------------------------------------------------------------------------------------
Function Main()
local cTitle, lOk, iLogo, _msn_n
local oCursor, oSalir, lSalir, oConec, oEscon
local cHost, cUser, cPass, cDbNa, cDDes
local oHost, oUser, oPass, oDbNa, oDDes
local oMySQL, oDataBase, oTimba
local oDias, aDias, oHora, cHora, oTray, oMenu, oIcon1, lUno, aFile, cFile
local eConec, lYa, oBoton

IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) )    // evita el doble arranque
  RETURN NIL
ENDIF

ServiceProcess(1)

oDias := ARRAY(7)
aDias := ARRAY(7)
aFile := {}
AFill(aDias, .f.)
lSalir := .t.
lYa    := .t.
cHora  := SPACE(5)
cHost := SPACE(40)
cPass := "contrase帽a"       // contrase帽a de la base de datos
cDbNa := SPACE(40)
cDDes := SPACE(75)
cFile := "SVBACKUP.CFG"
If File(cFile)
  aFile := LeerTxt(cFile)
  cHost := aFile[1]
  cUser := aFile[2]
  cDbNa := aFile[3]
  aDias[1] := IF(aFile[4] = "1", .t.,.f.)
  aDias[2] := IF(aFile[5] = "1", .t.,.f.)
  aDias[3] := IF(aFile[6] = "1", .t.,.f.)
  aDias[4] := IF(aFile[7] = "1", .t.,.f.)
  aDias[5] := IF(aFile[8] = "1", .t.,.f.)
  aDias[6] := IF(aFile[9] = "1", .t.,.f.)
  aDias[7] := IF(aFile[10] = "1", .t.,.f.)
  cHora := aFile[11]
EndIF
eConec := {||CConectar(oMySQL, oDataBase, cHost, cUser, cPass, cDbNa, aDias, cHora, oTimBa, oBoton) }

DEFINE ICON oIcon RESOURCE "ABACKUP"
DEFINE ICON oIcon1 RESOURCE "ABACKUP2"
DEFINE CURSOR oCursor HAND
DEFINE DIALOG oAppW RESOURCE "ABACKUP2" ICON oIcon TITLE "SVBACKUP V1-0"
       REDEFINE BTNGET oHost ;
                VAR    cHost ;
                ID 110 OF oAppW
       REDEFINE BTNGET oUser ;
                VAR    cUser ;
                ID 111 OF oAppW
       REDEFINE BTNGET oDbNa ;
                VAR    cDbNa ;
                ID 113 OF oAppW
       REDEFINE BTNGET oDDes ;
                VAR    cDDes ;
                ID 114 OF oAppW
       REDEFINE CHECKBOX oDias[1] ;
                VAR      aDias[1] ;
                ID 101 OF oAppW
       REDEFINE CHECKBOX oDias[2] ;
                VAR      aDias[2] ;
                ID 102 OF oAppW
       REDEFINE CHECKBOX oDias[3] ;
                VAR      aDias[3] ;
                ID 103 OF oAppW
       REDEFINE CHECKBOX oDias[4] ;
                VAR      aDias[4] ;
                ID 104 OF oAppW
       REDEFINE CHECKBOX oDias[5] ;
                VAR      aDias[5] ;
                ID 105 OF oAppW
       REDEFINE CHECKBOX oDias[6] ;
                VAR      aDias[6] ;
                ID 106 OF oAppW
       REDEFINE CHECKBOX oDias[7] ;
                VAR      aDias[7] ;
                ID 107 OF oAppW
       REDEFINE BTNGET oHora ;
                VAR    cHora ;
                VALID OkHora(cHora) ;
                PICTURE "99:99" ;
                ID 115 OF oAppW
       REDEFINE BUTTON oEscon ;
                ACTION oAppW:Hide() ;
                PROMPT "&Esconder" ;
                ID 121 OF oAppW
       REDEFINE BUTTON oConec ;
                ACTION CConectar(oMySQL, oDataBase, cHost, cUser, cPass, cDbNa, aDias, cHora, oTimBa, oBoton) ;
                PROMPT "&Conectar" ;
                ID 122 OF oAppW
       REDEFINE BUTTON oSalir ;
                ACTION (If(MsgNoYes("Cerrar la Aplicaci贸n?","Confirme"),(lSalir := .t.,  oAppW:End()), ) ) ;
                PROMPT "&Salir" ;
                ID 123 OF oAppW

       REDEFINE BITMAP oBoton ;
                RESOURCE "BVERDE" TRANSPARENT ;
                ID 120 OF oAppW



aEval(oAppW:aControls,{|oC|iif(oC:ClassName()="TBUTTON",oC:oCursor:=oCursor,)})
ACTIVATE DIALOG oAppW CENTER ;    //
         ON INIT (oTray := TTrayIcon():New(oAppW,oIcon,"SVBACKUP",{||oAppW:Show()},{|nRow,nCol|MenuTray(nRow,nCol,oTray)}), ;
                  oTimBa:=ATimer(oAppW, oTimBa, eConec) ) ;
         ON PAINT (If(lYa, (oAppW:Hide(), lYa:=.f.), Nil) ) ;
         ON RIGHT CLICK oTray:SetIcon( oIcon1, "Another" ) ;
         VALID (lSalir) // oTray:End() ;
SysRefresh()
Return(Nil)

//------------------------------------------------------------------------------------------------------
Function ATimer(oAppW, oTimBa, eConec)
DEFINE TIMER oTimBA OF oAppW INTERVAL 60000 ACTION EVAL (eConec)
ACTIVATE TIMER oTimBa
oAppW:Hide()
oAppW:Minimize()
Return(oTimBa)

//---------------------------------------------------------------------------------------------------------
FUNCTION MenuTray( nRow, nCol, oTray )
LOCAL oMenu
   MENU oMenu POPUP
      MENUITEM "Mostrar" ACTION oAppW:Show(), oAppW:SetFocus()
//      MENUITEM "Esconder" ACTION oAppW:Hide()
   ENDMENU
   ACTIVATE POPUP oMenu AT nRow, nCol OF oTray:oWnd
RETURN NIL

//----------------------------------------------------------------------------------------------------
Function CConectar(oMySQL, oDataBase, cHost, cUser, cPass, cDbNa, aDias, cHora, oTimBa, oBoton)
local oWndBack, oBack, cBack, fBack, lOk, cTime, cSufijo, cRuta, aTablas, nLen, nCont, cRZip, cLinea, aFiles
local oApp, oMeter1, oMeter2, nPer1, nPer2, lNo
local oAcepta, oCursor, lProcede, oSay, cFilZip, oFont1
local cDiskExe, oHand, cFile, qDia, qHora, qMinu, nSec1, nSec2

oBoton:SETBMP("BVERDE")

If EMPTY(cHost) .OR. EMPTY(cUser) .OR. EMPTY(cDbNa)
  Return(.f.)
EndIF

cFile := "SVBACKUP.CFG"
cLinea := cHost + CHR(13) + CHR(10) + ;
             cUser + CHR(13) + CHR(10) + ;
             cDbNa + CHR(13) + CHR(10) + ;
             If(aDias[1],"1","0") + CHR(13) + CHR(10) + ;
             If(aDias[2],"1","0") + CHR(13) + CHR(10) + ;
             If(aDias[3],"1","0") + CHR(13) + CHR(10) + ;
             If(aDias[4],"1","0") + CHR(13) + CHR(10) + ;
             If(aDias[5],"1","0") + CHR(13) + CHR(10) + ;
             If(aDias[6],"1","0") + CHR(13) + CHR(10) + ;
             If(aDias[7],"1","0") + CHR(13) + CHR(10) + ;
             cHora + CHR(13) + CHR(10)

oHand := FCreate( cFile )
FWRITE(oHand, cLinea)
FCLose(oHand)
lOK   := .f.
qDia  := DOW(DATE())   // se en ordinal de la semana de la fecha del sistema.
qHora := TIME()        // se toma la hora del sistema

If aDias[qDia]
  lOk := .t.
EndIf

If !lOK
  Return(lOk)
EndIf

nSec1 := ( VAL(SUBSTR(qHora,1,2)) * 3600 ) + (VAL(SUBSTR(qHora,4,2)) * 60 )
nSec2 := ( VAL(SUBSTR(cHora,1,2)) * 3600 ) + (VAL(SUBSTR(cHora,4,2)) * 60 )

If nSec1 < nSec2
  Return(.f.)
EndIf

cDiskExe := CURDRIVE() + ":"
cRuta    := cRZip := "BACKUP_SVITE"
lMKDir("\" + cRuta)     // almacena archivos de la tabla
cRuta    := cDiskExe + "/" + cRuta + "/"
cRZip    := cDiskExe + "\" + cRZip + "\"
cFilZip  := cDbNa + cRZip

If FILE(ALLTRIM(cRZip) + ALLTRIM(cDbNa) +  ".ZIP")
  Return(.f.)
EndIF

cHost := ALLTRIM(cHost)
cUser := ALLTRIM(cUser)
cDbNa := ALLTRIm(cDbNa)
WHILE .t.
  oMySql := TMSConnect():New()
  If oMySql:Connect( cHost, cUser, cPass )
     EXIT
    Else
     Return(.f.)
  EndIF
ENDDO
Sonido("reminder.wav")
If !oMySQL:ExistDb( cDbNa )      // si no existe la base de datos,,,
  Return( .f. )
EndIf
//--------creamos el objeto contenedor de la base de datos
USE DATABASE oDataBase NAME cDbNa OF oMySQL
If !oDataBase:Used()        //
 Return( .f. )
Endif
lOK     := .f.
lNo     := .f.
nPer1   := nPer2 := 0
aTablas := oDataBase:ListTables()
nLen := LEN(aTablas)
IF nLen = 0
  Return(lOk)
EndIF
cFilZip := ""

oAppW:Show()
oTimBa:DeActivate()
oBoton:SETBMP("BROJO")
oBoton:Refresh()

lOK := ZipTablas(oMySQL, oDataBase, cRuta, cRZip, aTablas, @cFilZip, cPass, cDbNa)

oTimBa:Activate()
oBoton:SETBMP("BVERDE")
oBoton:Refresh()
oAppW:Hide()

Return(lOk)

//---------------------------------------------------------------------------------------------------
Function ZipTablas(oMySQL, oDataBase, cRuta, cRZip, aTablas, cFilZip, cPass, cDbNa )
local nCont, nLen, aFiles, lOK, cTime, cSufijo, fBack, cBack, nRow
CURSORWAIT()
aFiles  := {}
lOK     := .f.
nRow    := 1
cPass   := ALLTRIM(cPass)
cTime   := TIME()
cSufijo := DTOS(Date()) //+ SUBSTR(cTime,1,2) + SUBSTR(cTime,4,2) + SUBSTR(cTime,7,2)
nLen    := LEN(aTablas)
cFilZip := cRZip + cDbNa + cSufijo + ".ZIP"

If FILE(cFilZip)
  Return(.f.)
EndIf

FOR nCont := 1 TO nLen
   Tone(1000,1)
   fBack   := cSufijo + ALLTRIM(aTablas[nCont])
   cBack := "SELECT * INTO OUTFILE '" + cRuta + fBack + "' FROM " + ALLTRIM(aTablas[nCont])
   lOk := oDatabase:ExecSQL( cBack )
   If !lOK
     EXIT
   ENDIF
   AaDd(aFiles, cRZip + AllTrim( fBack ) )
   Tone(500,1)
NEXT nCont
If !lOk
  Return(lOk)
EndIF
lOk := HB_ZipFile( cFilZip, aFiles, 9,,.T., cPass, .F., .F. )
FOR nCont := 1 TO nLen
  FERASE(aFiles[nCont])
NEXT nCont
Sonido("reminder.wav")
Return(lOk)

//---------------------------------------------------------------------------------------------------
Function Sonido(cWav)
local cWav1
cWav1 := cWav
cWav  := GetWinDir()+ "\Media\" + cWav + ".WAV"
If File(cWav)
  SndPlaySound(cWav)
 Else
  cWav1 := "SND\" + cWav1
  If File(cWav1)
     SndPlaySound(cWav1)
    Else
     Tone(1000,1)
  EndIf
EndIf
Return(Nil)

//---------------------------------------------------------------------------------------------------
Function LeerTxt(cFile,nModo)
local oFile,cLinea := "", aLinea := {}
DEFAULT cFile := ""
DEFAULT nModo := 0
If Empty(cFile) .OR. !File(cFile)
  Return({})
EndIf
oFile := TTxtFile():New( cFile )
Do while !oFile:lEof()
  AaDd(aLinea,oFile:cLine)
  oFile:Skip()
EndDo
oFile:End()
Return(aLinea)

//--------------------------------------------------------------------------------------------------
Function OkHora(cHora)
local lOK
lOk := .f.
If VAL(SUBSTR(cHora,1,2)) >= 0 .AND. VAL(SUBSTR(cHora,1,2)) <=23
  lOk := .t.
Endif
If VAL(SUBSTR(cHora,3,2)) >= 0 .AND. VAL(SUBSTR(cHora,3,2)) <=59
  lOk := .t.
 Else
  lOk := .f.
EndIf
Return(lOk)

//---------------------------------------------------------------------------------------------------
Function ServiceProcess( mode )
//------------------------------
Local nProcessId := 0
Default mode := 0
nProcessId := GCP( )
If Abs( nProcessId ) > 0
    RSProcess( nProcessId, mode )
Endif
RETURN Nil

//----------------------------------------------------
DLL32 FUNCTION RSProcess(npID  AS LONG ,;
                         nMode AS LONG ) AS LONG ;
      FROM "RegisterServiceProcess" LIB "kernel32.DLL"
//----------------------------------------------------
DLL32 FUNCTION GCP() AS LONG;
      FROM "GetCurrentProcessId" LIB "kernel32.dll"
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: BACKUP/RESTORE DATABASE MYSQL CON TDOLPHIN
Posted: Mon Aug 25, 2014 09:41 PM

Jose Luis,

yo hago el mysqldump por medio de un .bat

cFile := "backup.bat"
lEsc := .f.

FErase( cFile )

if ! FILE( cFile )

  nHand := FCreate( cFile )
  FWrite(nHand, cComando )
  FClose(nHand)

  //  Respaldo Antes de la Auditoria, Nombre del DUMP
  cFileBackup := 'respaldo_' + DTOS(Date()) + '_' + Time() + '.sql'

  cComando := &quot;&quot;
  cComando += 'mysqldump -h' + oApp:cConexion + ' -u' + oApp:cUser + ' -p' + oApp:cPassword + ' ' + oApp:cDatabase + ' &gt; .\backup\'
  cComando += cFileBackup + CRLF

  hCambios := FOpen( cFile, FO_READWRITE + FO_SHARED )
  FSeek( hCambios, 0, FS_END)
  FWrite( hCambios, cComando )
  FClose(nHand)

endif

*------------- Proceso de Generacion del DUMP de la base de datos
lEsc := .F.

cText := ""

DEFINE BRUSH oBrush FILE oApp:cDirBmps + "grad.jpg"

DEFINE DIALOG oDls RESOURCE "DLG_AVISO2" TITLE "Mi Respaldo ..." FONT ::oFont[2] BRUSH oBrush TRANSPARENT

  REDEFINE SAY oSay PROMPT cText ID 100 OF oDls ;
           COLORS CLR_WHITE

  oDls:bStart := { || WaitRun( cFile, 0 ),;
                      lEsc := .T.,;
                      oDls:End() }

ACTIVATE DIALOG oDls CENTERED ;
VALID lEsc

oBrush:End()

Espero te sirva a mi me va bien y si puedo recuperar el .sql

Saludos

____________________

Paco

Continue the discussion