Autor |
Mensaje |
desoljor
Aprendiz
Registrado: Junio 2010
Mensajes: 87
Edad: 57 Ubicación:
|
Como Hacer Copias De Seguridad Mysql
pues eso el asunto lo dice todo, como puedo hacer copias de seguridad de tablas mysql desde gambas?
|
#1 Martes, 01 Marzo 2011, 21:15 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Como Hacer Copias De Seguridad Mysql
Prueba con ésto:
Programa de copias de Seguridad de MySQL
Lo hice para mi empresa y es lo que utilizamos desde hace un tiempo.
|
#2 Miercoles, 02 Marzo 2011, 09:09 |
|
|
desoljor
Aprendiz
Registrado: Junio 2010
Mensajes: 87
Edad: 57 Ubicación:
|
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
|
#3 Miercoles, 02 Marzo 2011, 09:59 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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.
# 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
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.
última edición por soplo el Miercoles, 02 Marzo 2011, 19:20; editado 3 veces
|
#4 Miercoles, 02 Marzo 2011, 15:39 |
|
|
desoljor
Aprendiz
Registrado: Junio 2010
Mensajes: 87
Edad: 57 Ubicación:
|
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
última edición por desoljor el Miercoles, 02 Marzo 2011, 17:48; editado 1 vez
|
#5 Miercoles, 02 Marzo 2011, 16:56 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
=================== No podemos regresar
|
#6 Miercoles, 02 Marzo 2011, 17:28 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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
Citar: SHELL "mysqldump -u " & General.$Con.User & " -p " & General.$Con.Password & " Desoljor " & Mantenimiento.Etiqueta & " > " & Archivo
pon así
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.
última edición por soplo el Miercoles, 02 Marzo 2011, 19:22; editado 1 vez
|
#7 Miercoles, 02 Marzo 2011, 19:18 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
=================== No podemos regresar
|
#8 Miercoles, 02 Marzo 2011, 19:59 |
|
|
desoljor
Aprendiz
Registrado: Junio 2010
Mensajes: 87
Edad: 57 Ubicación:
|
Re: Como Hacer Copias De Seguridad Mysql
Hola Soplo, lo siento per no me funciona me dice NULL OBJECT
no consigo que funcione
|
#9 Miercoles, 02 Marzo 2011, 21:15 |
|
|
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
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.
|
#10 Miercoles, 02 Marzo 2011, 22:01 |
|
|
|