Skip to content

21 julio, 2008

36

Respaldos automáticos en MySQL y Windows

Tuve la necesidad de hacer respaldos de forma automática en un servidor web montado en Windows la solución fue hacer un script .bat y éste mandarlo ejecutar con la herramienta de “Tareas programadas”

El script quedó de la siguiente manera:

for /f “tokens=1-4 delims=/ ” %%a in (‘date/t’) do (
set dia=%%a
set mes=%%b
set anio=%%c
)
mysqldump -u user -ppassword database_name > respaldo-%dia%-%mes%-%anio%.sql

Esto generará un archivo .sql con el nombre “respaldo-fecha.sql”.

Este código lo guardas con extensión .bat y lo mandas llamar como decía con las Tareas Programada, esto en Inicio – Programas – Accesorios – Herramientas de Sistema – Tareas programada.

36 Comments Post a comment
  1. Mario Martinez
    feb 4 2009

    creo que soy el primero que pone a prueba tu script:

    C:\Users\Mario Martinez\Documents>mysqldump
    “mysqldump” no se reconoce como un comando interno o externo,
    programa o archivo por lotes ejecutable.

    creo que primero te tienes que logear a mysql y luego hacer el respaldo, saludos

  2. feb 5 2009

    MySql tiene que estar ejecutándose y en la línea de mysqldump le estás pasando el usuario y contraseña.

    Intenta colocar el script donde esté el ejecutable de mysqldump.

    Saludos

  3. Mario Martinez
    feb 5 2009

    andale ahora si!! muchas gracias!

  4. Mario Martinez
    feb 6 2009

    salio otra cosita..

    C:\AppServ\mysql\bin>for /f tokens=1-4 delims=/ %a in (date/t) do (

    C:\AppServ\mysql\bin>respaldo_mysql.bat
    No se esperaba 1-4 en este momento.

    C:\AppServ\mysql\bin>for /f tokens=1-4 delims=/ %a in (date/t) do (set dia=%a s
    et mes=%b set anio=%c)

  5. Carlos González
    feb 23 2009

    El script funciona muy bien.

    Solo es importante tener en el PATH el directorio de MYSQL que en mi caso
    es C:\Program Files\MySQL\MySQL Server 5.0\bin para que el archivo bat
    encuentre el comando de mysqldump

  6. Raul
    feb 26 2009

    Gracias. Va genial!

    Comentar a los que tengan problemas que cojan el texto y usen un editor tipo TextPad o Notepad++ y que guarden el fichero como UTF8. Esto lo comento pq si haceis un copy/paste no os ira bien ya que los caracteres no los lee bien windows.

  7. pedro
    jun 20 2009

    donde puedo buscar este respaldo una vez que se ejecuta el respaldo automatico

  8. jun 20 2009

    Verifica que esté donde pusiste el script, si deseas que se guarde en una carpeta determinada pon la ruta en el mismo script, donde está el nombre del archivo de respaldo.

  9. Wilman
    jul 10 2009

    El scritp corre muy bien.

    Solo hay un problema cuando quiero importar el respaldo desde el appserv no funcion da un error un poco extraño y no importa la bdd nuevamente que debo hacer para que los respaldos sean funcionales.

    Saludos,

  10. jul 10 2009

    En este caso como el respaldo se hizo, tendrías que enfocarte en el error que te aparece ya que el respaldo lo realiza el comando directo de mysql.

  11. Wilman
    jul 10 2009

    yo he hecho lo siguiente.

    Al Principio yo exportaba directamente desde Appserv toda la bdd y al momento de importarla funciona todo normal. Entiendo que el script hace exactamente lo mismo que yo sin embargo hay algunas diferencia entre los archivo que resultan yo estuve revisando internamente el codigo y definitivamente hay diferencias por ejemplo la que se exportan con el script en el encabezado de cada tabla viene lo siguiente

    DROP TABLE IF EXISTS

    EN LA PARTE DONDE INSERTA LOS DATOS
    LOCK TABLE
    INSERT INTO (” REGISTROS”)
    UNLOCK TABLE

    Esto para todas las tablas en el caso de exportarla manualmente esas sentencias no aparecen

    Entoces al momento de importar encuentra esas sentencias y hasta ahi nomas llega ya no continua.

    Te agradeceria mucho me dieras una idea a resolver este problema ya que el script es la solucion mas adecuada para el problema que tenia de los respaldos automaticos.

  12. jul 10 2009

    ¿Importas el respaldo desde consola? porque no es lo mismo que si lo exportas/importas desde phpmyadmin, sería cuestion de que checaras eso.

    Para importar desde consola sería algo así:

    $mysql -h ip-o-host -u nombreDeUsuario -p nombreBaseDeDatos < backup.sql

    Si mal no recuerdo así más o menos va. Si no jala checate en google, debe de haber muchos ejemplos.

    Saludos.

  13. Wilman
    jul 10 2009

    Estoy importando desde phpmyadmin el error tiene que ser voy a probar de consola y si no anda te aviso.

    De antemano agradezco tu ayuda.

    Saludos,

  14. Wilman
    jul 13 2009

    Muy agradecido Tolerantx, ya resolvi el problema, funciona perfecto.

    Saludos,

  15. jul 13 2009

    Que bueno que te haya servido, pero te agradecería que pusieras tu solución por si alguien más tiene el mismo problema. :)

  16. Wilman
    jul 16 2009

    Comando para Importar datos desde consola
    En la primera parte ponemos la ruta para la ejecucion de MySql seguido usuario y contraseña luego el nombre de la base a la cual vamos a importar nuestras tablas y en la segunda parte ubicamos la ruta donde se guardo el respaldo, esta parte puede variar dependiendo donde ubique el script ( importante para poder importar un respaldo.sql, este debio haber sido exportado por el mysqldump si no no funcionara.

    C:\>AppServ\MySql\bin\MySql -uusuario -ppassword nombre_basededatos<C:\AppServe\MySql\Scripts\backup.sql

    Una consulta mas respecto al script, se supone este deberia renombrar el archivo exportado con la fecha de en que se realizo la exportacion sin embargo no lo hace ¿ hay que hacer alguna modificacion en codigo del script?

    Saludos,

  17. jul 16 2009

    Se supone que ésta parte del script es donde se definen los valores de las variables que se insertan en el nombre del archivo
    for /f “tokens=1-4 delims=/ ” %%a in (’date/t’) do (
    set dia=%%a
    set mes=%%b
    set anio=%%c
    )

    El script fue creado en windows xp, no sé si por ahí sea el problema.

    Saludos.

  18. Wilman
    ago 24 2009

    Hola! tolerantx una vez mas tengo una consulta, veras mi situacion es la siguiente he desarrollado una aplicacion la cual funcionara en diferentes zonas pero sin conexion alguna entre si, cada una tendra su base de datos localmente pero habra una central en la cual se tiene que consolidar todas bdd, lo que necesito hacer es importar los registros de cada bdd de las diferentes zonas a la central sin embargo Mysql no me permite hacer eso ya que cuando importo, jala toda la tabla y luego el error de que esa bdd ya existe.

    yo se que se pueden importar solo los registros por que lo hice una vez con un archivo.txt en el cual los campos se encuentra separados por “” y ; y este habia sido exportado desde access, pero en el caso de exportar desde PhpmyAdmin este genera toda la tabla aun si se exporta en archivo de texto.

    Saludos,

  19. ago 24 2009

    Primero que nada en phpmyadmin hay una opción por default que es importar también la estructura de la tabla, desactiva ésta opción y se exportarán solamente tus registros.

    Ahora si ya solo te exporta los registros sin la tabla necesitas tener cuidado con los ids de los registros con sus relaciones ya que si los tienes relacionados puedes tener serios problemas.

  20. Wilman
    ago 24 2009

    Si, tienes razon ahora recuerdo haber e haber visto esa opcion no recuerdo si probe a desactivarla seguramente no, por que no me funciono je je!! voy a probar, por cierto que la tabla que necesito exportar tiene dos llaves foraneas aparte del ID principal del registro espero que eso no vaya a causarme problemas. Bueno pero vamos intentar asi y luego te cuento.

    Saludos,

    Gracias de nuevo.

  21. Wilman
    ago 25 2009

    Buen dia,

    Solo para comentarte que probe exportar los registros como explicastes anteriormente y hasta el momento ha funcionado sin problemas. Deshabilite la opcion de estructura y en la seccion de los datos solo habilite la opcion “Usar Hexadecimales para campos binarios” y cambie el tipo de exportacion a “REPLACE” asi al momento de importarlos en bdd central jala sin ningun problema bueno solo probe con pocos registros.

    Agradezco tu rapida respuesta,

  22. ago 25 2009

    Excelente :) que bueno que hayas resuelto el problema

    Saludos :)

  23. Giovanni Croce
    nov 13 2009

    Buenas Dia hermano, my bueno tu blog y gracias en vdd me ha servido mucho., solamente tengo una duda, yo estoy utilizando procedimientos almacenados; el detalle es que el respaldo solo se hizo a las tablas, es necesario configurar otra cosa para que el respaldo tbm incluya a los stored procedures?

  24. nov 14 2009

    Que tal Giovanni, sobre tu duda igual te puede servir ésto Dumping MySQL Stored Procedures Functions and Triggers

  25. Giovanni Croce
    nov 23 2009

    hola buen dia, disculpa muy bueno tu aporte… me sirvio de mucho pero tengo una prengunta adicional….en un sistema que diseñe utilice stored procedures quisiera saber si se tiene que modificar algo mas al administrador de mysql para que en elrespaldo incluya los procedimientos ya que actualmente solo me hace respaldo de las tablas…..
    saludos y gracias

  26. Giovanni Croce
    nov 23 2009

    disculpa jejej no habia visto la respuesta arriba …gracias

  27. robertortilla
    ene 22 2010

    eres un ñoño

  28. Pedro Luis
    oct 5 2010

    Hola Tolerantx, esta muy bueno el script, tengo una duda y espero me puedas ayudar, quiero hacer algo parecido pero con archivos de respaldo .BKF de server 2003, crees q este mismo script me podria serivir y que modificaciones debo hacerle? gracias

  29. oct 5 2010

    La verdad no tengo idea del funcionamiento sobre dichos respaldos, deberías echarle una leída a la documentación del windows server para saber qué ejecutable o proceso se hace cargo de realizar dichos archivos de respaldo y así tú poder crear la tarea automatizada.

  30. dennis Acereto
    oct 27 2010

    amm me funciona correcto, pero deseo agregarle al nombre del archivo la hora en que se está creando. es decir la fecha en que se creo mas la hora, por si es que en un mismo dia hago respaldos de mis base de datos, saber en que hora los realize y tener el mas actual..

    de antemano muchas gracias 😀

  31. oct 27 2010

    Que tal Dennis,

    No sé si funcione, pero intenta hacer algo como esto:

    for /f “tokens=1-4 delims=/ ” %%a in (‘date/t’) do (
    set dia=%%a
    set mes=%%b
    set anio=%%c
    set hora=%Now:~0,2%
    set minuto=%Now:~3,2%
    )
    mysqldump -u user -ppassword database_name > respaldo-%dia%-%mes%-%anio%_%hora%-%minuto%.sql

    Si no funciona dale una leída al siguiente enlace
    http://www.robvanderwoude.com/datetime.php

  32. dennis Acereto
    feb 17 2011

    waw.. gracias 😀 .. no habia visto tu respuesta.. muchas gracias.. sime funciono :D.. t sigo en twitter :D.. gracias de nuevo..

  33. jesus edgardo
    dic 12 2012

    Hola que tal oye disculpa amigo tengo un problema al generar el backup no me sale con los datos de la fecha en que se genera sale algo asi Respaldo-%a-%b-%c sabes a que se debe? ya le estuve mueve y mueve al script e investigado en otros sitios web pero nada que me sale con la fecha del dia. Y abusando de ti, como le agrego la hora en que se genero el backup al nombre del archivo?? gracias

  34. dic 12 2012

    Éstas usandolo como respaldo-%dia%-%mes%-%anio%.sql ?

    Más arriba alguien más necesitó también la hora intenta lo siguiente:

    for /f “tokens=1-4 delims=/ ” %%a in (‘date/t’) do (
    set dia=%%a
    set mes=%%b
    set anio=%%c
    set hora=%Now:~0,2%
    set minuto=%Now:~3,2%
    )
    mysqldump -u user -ppassword database_name > respaldo-%dia%-%mes%-%anio%_%hora%-%minuto%.sql

  35. rositta
    may 17 2013

    por mas que nuevo no puedo lograr el respaldo..
    me podrian dar un ejemplo de los parametro que lleva esto:
    for /f “tokens=1-4 delims=/ ” %%a in (‘date/t’) do (
    set dia=%%a
    set mes=%%b
    set anio=%%c
    set hora=%Now:~0,2%
    set minuto=%Now:~3,2%
    )
    mysqldump -u user -ppassword database_name > respaldo-%dia%-%mes%-%anio%_%hora%-%minuto%.sql

  36. may 17 2013

    Los parámetros que deberias modificar son los de la línea de

    mysqldump -u user -ppassword database_name > respaldo-%dia%-%mes%-%anio%_%hora%-%minuto%.sql

    Los parámetros son:
    “user”, el usuario de mysql
    “password”, aquí reemplazarías password por la contraseña de tu base de datos
    “database_name”, nombre de la base de datos a respaldar

Share your thoughts, post a comment.

(required)
(required)

Note: HTML is allowed. Your email address will never be published.

Subscribe to comments