https://foro.gambas-es.org/viewtopic.php?f=3&t=1458
-----------------------------------
desoljor
Martes, 01 Marzo 2011, 21:15

Como Hacer Copias De Seguridad Mysql
-----------------------------------
pues eso el asunto lo dice todo, como puedo hacer copias de seguridad de tablas mysql desde gambas?


-----------------------------------
shordi
Miercoles, 02 Marzo 2011, 09:09

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Prueba con ésto:
[url=http://desconcertado.es/archivos/copiaBases.tar.gz]Programa de copias de Seguridad de MySQL

Lo hice para mi empresa y es lo que utilizamos desde hace un tiempo.


-----------------------------------
desoljor
Miercoles, 02 Marzo 2011, 09:59

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Vale lo probare a lo largo de esta mañana y ya te cuento gracias por tu ayuda


-----------------------------------
soplo
Miercoles, 02 Marzo 2011, 15:39

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
¿Y para qué quieres un programa para hacer copias de seguridd cuando mysql ya tiene a mysqldump y a mysqlhotcopy?

El segundo es específico para copias de seguridad y el primero sirve para todo (y también para hacer copias de seguridad)

Con mysqldump tanto puedes hacer copias de seguridad como transferir una base de datos a otro servidor.

mysqldump --opt mibase > copia_seguridad.sql

y para restaurar

mysql mibase < archivo.sql

Yo me hice un script en su día para automatizar eso y así que las copias se hicieran sistemáticamente.


[code linenumbers=false syntax=gambas]# declarar variables
logfich="/var/log/mysqlbackup.log"
backup="/backup"
fecha=`date +%Y%m%d_%H%M`
usuario=$1
clave=$2

# borrar log anterior
rm $logfich

cd $backup

# hacer copia de seguridad de todas las bases de datos a las que el usuario tiene acceso
 for BBDD in $( mysql -u $username --password=$password -h localhost -Bse 'show databases' ); do
 echo "Creando copia de seguridad de $BBDD"
  
# Volcamos la base de datos en un fichero temporal
 mysqldump --user=$usuario --password=$password $BBDD > datos.sql

# comprimirlo
 tar cvjf mysql-$BBDD-$fecha.tar.bz2 *.sql
  
# El nombre del fichero resultante contiene el nombre de la base de datos y la fecha de la copia.
  
 echo "Backup completo en la base de datos: $BBDD (mysql-$BBDD-$fecha.tar.bz2)" >> $logfile
  
# Borramos el fichero temporal
 rm datos.sql
 done
[/code]

Puedes pasar eso con el cron si quieres que te lo haga el sistema o puedes usar una aplicación gambas y usar el timer por ejemplo para que periodicamente haga la copia. solo necesitas pasarle como parámetro el usuario y clave que haga la copia de seguridad. Se hacen copias de todas las bases a las que ese usuario tiene acceso. Las copias quedan en un directorio creado al efecto (en el que el usuario debe tener permiso de escritura), debidamente comprimidas, con la fecha en el nombre y para restaurarlas hay que darle usuario y clave.

En mi caso. la clave esá encriptada en md5 para que no se pueda restaurar la copia sino es a traves de la aplicación que tengo al efecto a fin de evitar equivocaciones y accidentes. Tengo pensado hacerle algún cambio para que la copia en vez de quear en el directorio backup quede en otra máquina pero soy un perezoso y está por hacer.


-----------------------------------
desoljor
Miercoles, 02 Marzo 2011, 16:56

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Gracias soplo, vamos a ver yo tengo una aplicación echa en gambas y en el apartado de mantenimiento esta la opción de hacer coppias de seguridad de las diferentes tablas o de toda la BDD, yo lo que quiero es hacer las copias de seguridad de las Tablas no de toda la BDD
Opcion 1

  General.conectar
  General.$Con.Exec("mysqldump -u  " & General.$Con.User & " -p " & General.$Con.Password & " Desoljor " & Mantenimiento.Etiqueta & " > " & Archivo)
  General.$Con.Close
Desoljor = BDD
Mantenimiento.Etiqueta = Nombre de la Tabla
Archivo = Archivo de destino .sql
me da un error de sintaxis
Opcion 2

SHELL "mysqldump -u  " & General.$Con.User & " -p " & General.$Con.Password & " Desoljor " & Mantenimiento.Etiqueta & " > " & Archivo

Error=NULL OBJECT


-----------------------------------
shordi
Miercoles, 02 Marzo 2011, 17:28

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
El problema, Soplo, no son las copias, que eso lo hace el mysqldump muy bien hecho. El problema, al menos para mí son las restauraciones. Cuando utilizas la herramienta de Mysql la salvaguardia de las tablas y demás se hace por orden alfabético de tabla. La restauración lo mismo. Con eso te encuentras con que a la hora de restaurar, si utilizas integridad referencial, no es posible en la mayoría de los casos por cuanto las tablas de referencia no siguen ese orden.
Eso te lleva a tener que procesar la copia tabla a tabla, y muchas veces a eliminar índices y dependencias para restaurar los datos y volver a crearlos, etc. etc.

Con mi programa eso se soluciona. Al menos tal y como yo trato las bases MySQL. 

Pero, como tú siempre dices, para gustos los colores.

Suerte


-----------------------------------
soplo
Miercoles, 02 Marzo 2011, 19:18

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
En eso no había caído shordi. Visto así supongo que tienes razón. Lo que pasa es que con mysqldump también puedes hacer copia de tablas concretas (y voy a mirar si se puede elegir el orden en que las procesa que no me extrañaría con la cantidad de posibilidades que tiene). En todo caso con mysqldump podrías resolver tu problema haciendo en el peor de los casos copias de tablas selectivas (osea una primera copia con tablas A, C y E y otra segunda copia con tablas B, D y F).

desoljor
[quote]SHELL "mysqldump -u " & General.$Con.User & " -p " & General.$Con.Password & " Desoljor " & Mantenimiento.Etiqueta & " > " & Archivo [/quote]
pon así
[code linenumbers=false syntax=gambas]dim s as string, f as file
HELL( "mysqldump -u " & General.$Con.User & " -p " & General.$Con.Password & " Desoljor " & Mantenimiento.Etiqueta) to s
f=open archivo for create
print #F,s
close f[/code]

Y en el exec está mal porque no es un comando del gestor de base de datos sino una utilidad adicional com lo es mysql_admin por ejemplo así que lo ejecutas como una aplicación mas. Puedes hacerlo con un shell o con un exec. y controlar ese proceso como cualquier otro.


-----------------------------------
shordi
Miercoles, 02 Marzo 2011, 19:59

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Las copias selectivas ya lo probé, pero el problema es que si cambias el nombre de una tabla, o creas una nueva dependencia o visata o lo que sea tienes que estar de tejemanejes con los scripts, etc. 
Mi programa vale para cualquier base que contenga tablas, relaciones y vistas hasta cinco niveles de vistas (es decir vistas sobre tablas, vistas sobre esas vistas, vistas sobre las vistas de las vistas, etc.) . Además se puede añadir al cron, que tiene las dos maneras de ejecución, gráfica o ejecutando las opciones por defecto sin gráficos. Creo que tiene algunos bugs que no me molesté en corregir (sobre todo en lo que a restaurar una base de datos sobre otra inexistente, donde en teoría debería crear la base con el nuevo nombre... pero no sé si lo hace bien) por ser ocasiones no habituales.

Saludos


-----------------------------------
desoljor
Miercoles, 02 Marzo 2011, 21:15

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Hola Soplo, lo siento per no me funciona me dice NULL OBJECT
no consigo que funcione


-----------------------------------
pittusa
Miercoles, 02 Marzo 2011, 22:01

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
SHELL "mysqldump" & " " & "--opt" & " " & "base" & " " & ">" & " " & "ruta" WAIT

A mi esto me funciona muy bien.

Copio toda la base. luego yo restauro lo que quiero.


Eso  a mi me crea un archivo sql con las tablas, para restaurar las tablas que quiero, solo tengo que borrar las que no me interesan.


-----------------------------------
desoljor
Jueves, 03 Marzo 2011, 13:28

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Gracias a todos, yo solo quiero hacer copias de las tablas individualmente pero gracias, de momento me tendre que conformar con esta información.
Si encuentro como solucionarlo ya lo pondré aquí.


-----------------------------------
desoljor
Lunes, 11 Enero 2016, 03:11

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Hola Chi@s ejecuto esta instrucción

Shell("mysqldump -u " & Conecta.Hcon.User & " -p " & Conecta.Hcon.Password & " FacturaDSJ" & Conecta.Hcon.Name & " Articulos> " & Application.Path & "/Backups/Backups.sql")

Pero no me hace la copia de seguridad me podeis echar una mano?
Gracias


-----------------------------------
shordi
Lunes, 11 Enero 2016, 12:04

Re: Como Hacer Copias De Seguridad Mysql
-----------------------------------
Mysqldump no es un comando del sistema operativo, es una utilidad del servidor MySQL, por lo que ha de ser ejecutado en el servidor. Si el servidor es local, perfecto, si no lo es tendrás que ejecutarlo vía ssh o algo así.

Por otra parte prueba a eliminar los espacios y comillas innecesarios, más o menos así:

mysqldump -uelusuario -plapassword la_base_de_datos > ~/elfichero

Pruébalo primero en la consola y luego busca la manera de reproducir esa cadena con gambas.

Saludos.


