Backup-Restore MariaDB

HMG en Español

Moderator: Rathinagiri

Post Reply
jorge.posadas
Posts: 62
Joined: Mon May 19, 2014 7:43 pm
DBs Used: DBF, SQLite, MS-SQL, ACCESS, MariaDB (en proceso)
Location: Tizayuca, Hgo. México
Been thanked: 3 times
Contact:

Backup-Restore MariaDB

Post by jorge.posadas » Tue May 01, 2018 7:19 pm

Grupo

Actualmente estoy haciendo una apliacación sencilla, para un cliente usando HMG + MariaDB, y me surgen varias dudas:
1. Cuando creo una base de datos ¿en que directorio se crea físicamente esa base de datos?
2. Lleno algunas tablas con datos iniciales,para el funcionamiento de dicha aplicación, y ahora deseo "llevarme" esa base de datos a instalara con el cliente, ¿existe la posibilidad de hacer un COPY-PASTE? (por ejemplo con SQLite, puedo copiar una base de datos y simplemente "pegarla" en la PC de mi cliente sin problema alguno?
3. En el equipo de mi cliente, ¿es necesario instalar un administrador de base de datos, como HEADISQL o Navicat?
4. ¿Es posible que sin instalar algun administrador (vease inciso 3) se pueda correr mi aplicación en la pc de mi cliente?


Mucho agradeceré me auxilien con esas respuestas, de antemano agradezco la ayuda.
Cordialmente

Jorge Posadas Ch
Tizayuca, Hgo.
M é x i c o .
SKYPE: jorge.posadasch
Email: jorge.posadas@live.com.mx

martingz
Posts: 216
Joined: Wed Nov 18, 2009 11:14 pm
Location: Mexico
Has thanked: 12 times
Been thanked: 6 times

Post by martingz » Wed May 02, 2018 2:14 am

Jorge en Mariadb
1.- C:\Program Files (x86)\MariaDB 10.1\data o C:\Program Files\MariaDB 10.1\data

2.- En maria db y Mysql ,si usas el navicat puedes hacer un Dump sql file y ahi le dices que la estructura o la estructura y los datos, te genera un archivo .sql el cual posteriormente puedes ejecutar en el mismo navicat en la base de datos que quieras.

3.- te recomiendo instalar algun administrador, solo si puedes conectarte por fuera por medio del navicat para dar soporte no lo instales en el equipo local

4.- Si es posible, pero debes de tener las bases de datos y los usuarios dados de alta ( puedes hacerlo por fuera )

cualquier duda con todo gusto te ayudo

saludos

User avatar
edufloriv
Posts: 131
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB
Location: PERU
Has thanked: 1 time
Been thanked: 4 times

Post by edufloriv » Wed May 16, 2018 11:49 pm

Saludos amigos,

Vi su post y me interesó porque estoy realizando un primer proyecto con HMG + MariaDb. Me pregunto si podrían compartir una rutina de actualización de stock de un producto, tengo duda como se realiza el LOCK() de un registro, lei por alli que debo usar un campo auxiliar en la base de productos para poder realizar un UPDATE de forma segura.

Algo así como esto:

Code: Select all

PROC UpdateItemProd( cQueCode )

IF ProductoLibre( cQueCode )

   IF ProductoLock( 1 )

     ActualizarStock()
     ActualizarKardex()
     ...  // <- mas operaciones

     ProductoLock( 0 )

   ENDIF

ENDIF


FUNC ProductoLock( nSwitch )

   qSave := "UPDATE MAESARTI SET MA_LOCK VALUES ("+VALSTR(nSwitch)+") WHERE COD_ARTI = '"+cQueCode+"' "
   oSave := oServer:Query( qSave )
   IF oSave:NetErr()												
      MsgStop ( oSave:Error() )
      RETURN(.F.)
   ENDIF
   oSave:Destroy()

RETURN( .T. )


FUNC ProductoLibre( cQueCode )

LOCAL lLibre := .F.

   qRead := "SELECT MA_LOCK FROM MAESARTI WHERE COD_ARTI = '"+cQueCode+"'"
   oRead := oServer:Query( qSave )
   IF oRead:NetErr()
      MsgStop ( oRead:Error() )
      RETURN(lLibre)
   ENDIF
   oRow := oRead:GetRow(1)
   IF oRow:fieldGet("ma_lock") = 0
      lLibre := .T.
   ENDIF
   oRead:Destroy()

RETURN( lLibre )
¿ Es este enfoque correcto ?. Agradeceré sus indicaciones al respecto.


Saludos cordiales,

Eduardo Flores Rivas


LIMA - PERU

User avatar
dragancesu
Posts: 535
Joined: Mon Jun 24, 2013 11:53 am
DBs Used: DBF, MySQL, Oracle
Location: Subotica, Serbia
Has thanked: 11 times
Been thanked: 95 times

Post by dragancesu » Thu May 17, 2018 5:47 am

Just UPDATE like

Code: Select all

UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
Lock table is not necessary

jorge.posadas
Posts: 62
Joined: Mon May 19, 2014 7:43 pm
DBs Used: DBF, SQLite, MS-SQL, ACCESS, MariaDB (en proceso)
Location: Tizayuca, Hgo. México
Been thanked: 3 times
Contact:

Post by jorge.posadas » Thu May 17, 2018 4:21 pm

Eduardo,

Yo apenas estoy haciendo mi primer proyecto con HMG+MariaDB, he trabajo con MS-SQL (de microsoft) y en cuanto a hacer un LOCK a un registro el que sabe mucho de eso es martingz, él puede ayudarte mucho en eso, sin embargo yo estoy pensando hacer una función que "simule" un lock, aun no lo tengo bien desarrollado pero es mi intención hacerlo para este proyecto que estoy haciendo.
Cordialmente

Jorge Posadas Ch
Tizayuca, Hgo.
M é x i c o .
SKYPE: jorge.posadasch
Email: jorge.posadas@live.com.mx

martingz
Posts: 216
Joined: Wed Nov 18, 2009 11:14 pm
Location: Mexico
Has thanked: 12 times
Been thanked: 6 times

Post by martingz » Thu May 17, 2018 11:44 pm

edufloriv , primero que nada debes usar el engine Innodb que es el mejor para bloqueos
y en tus prg, este ejemplo recore un grid de factura de compra, selecciona el articulo y lo bloquea, hasta que hacemos el update del registro


sQuery:=oServer:Query( "Start Transaction" ) inicia transacciones
If sQuery:NetErr()
MsgStop(sQuery:Error())
Return .f.
Endif
for y = 1 to altaentradas.Grid_1.ItemCount
aValues:=altaentradas.grid_1.item(y)
varexiste:=0
nQuery:=oServer:Query( "Select nombre,existencia,no_linea From Articulos where clave = '" + alltrim(aValues[1]) + "' for update" )
If nQuery:NetErr()
MsgStop(nQuery:Error())
rQuery:=oServer:Query( "Rollback" ) si hya error hace el rollback
If rQuery:NetErr()
MsgStop(rQuery:Error())
Return Nil
Endif
Return Nil
Endif
nRow:=nQuery:GetRow(1)
varexiste:=nRow:fieldGet("existencia") + val(aValues[3])
oQuery:=oServer:Query( "UPDATE Articulos SET existencia = " + str(varexiste) + " WHERE clave = '" + alltrim(aValues[1]) + "'" )
If oQuery:NetErr()
MsgStop(oQuery:Error())
rQuery:=oServer:Query( "Rollback" )
If rQuery:NetErr()
MsgStop(rQuery:Error())
Return Nil
Endif
rQuery:Destroy()
return nil
endif
oQuery:Destroy()
next
rQuery:=oServer:Query("Commit")

User avatar
Rathinagiri
Posts: 5210
Joined: Tue Jul 29, 2008 6:30 pm
DBs Used: MariaDB, SQLite, SQLCipher and MySQL
Location: Sivakasi, India
Has thanked: 155 times
Been thanked: 144 times
Contact:

Post by Rathinagiri » Fri May 18, 2018 3:19 am

If you want to backup your database inside the program, you can use the following code, which creates a dump/big sql file. It also assumes that oDB is a public variable with a valid MySQL/MariaDB connection. It also uses the HMGMySQL Bridge library.

Code: Select all

#include <hmg.ch>


function backup_db( cFname )
   local aTable := {}
   local aTables := {}
   local tables := {}
   local structarr := {}
   local aData := {}
   local aRow := {}
   default cFName := 'backup.sql'
   tables := sql( oDB,"show tables")
   for i := 1 to len(tables)
      aadd(aTables,alltrim(tables[i,1]))
   next i
   i := 0
   tottables := len(aTables)
   set alter to &cFName
   set alter on

   for i := 1 to tottables
      WAIT WINDOW "Processing Table - " + aTables[ i ] + '( ' + alltrim( str( i ) ) + '/' + alltrim( str( tottables ) ) + ' )'   NOWAIT
      aTable := sql( oDB, 'show create table ' + aTables[ i ] )
      cCreateCommand := aTable[ 1, 2 ]
      ? alltrim( cCreateCommand ) + ';'
      aTable := sql( oDB, "show columns from " + aTables[ i ] )
      asize(structarr,0)
      for j := 1 to len(aTable)
         aadd( structarr, alltrim( aTable[ j, 1 ] ) )
      next j
      adata := {}
      adata := sql( oDB, "select * from " + alltrim( atables[i] ) )
      totrecords := len(aData)
      for j := 1 to totrecords
         cQStr := ''
         WAIT WINDOW "Now backing up Table - " + aTables[ i ] + '( ' + alltrim( str( i ) ) + '/' + alltrim( str( tottables ) ) + ' )' + ' Record ' + alltrim( str( j ) ) + ' of ' + alltrim( str( totrecords ) ) NOWAIT
         cQstr := cQstr + "insert into "+alltrim(aTables[i])+" ("
         for k := 1 to len(structarr)
            cQstr := cQstr + alltrim( structarr[ k ] )
            if k < len(structarr)
               cQstr := cQstr + ","
            endif
         next k
         cQstr := cQstr + ") values "
         aRow := aData[ j ]
         cQstr := cQstr + "("
         for k := 1 to len(aRow)
            cQstr := cQstr + c2sql(aRow[k])
            if k < len(aRow)
               cQstr := cQstr + ","
            endif
         next k
         cQstr := cQstr + ");"
         ? cQStr
      next j
      ?
   next i
   wait clear
   set alter to
return nil
East or West HMG is the Best.
South or North HMG is worth.
...the possibilities are endless.

ASESORMIX
Posts: 72
Joined: Thu Oct 25, 2012 8:08 pm
Location: Bqto, Venezuela
Been thanked: 6 times
Birthday

Post by ASESORMIX » Fri May 18, 2018 12:50 pm

Estos ejemplos me caen del Cielo.
Gracias amigos por compartir sus conocimientos.

Post Reply