TolerantX's Blog

Y sin embargo se mueve

Respaldos automáticos en MySQL y Windows

Posted on | Julio 21, 2008 | 27 Comments

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.

Comments

27 Responses to “Respaldos automáticos en MySQL y Windows”

  1. Mario Martinez
    Febrero 4th, 2009 @ 7:23 pm

    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. tolerantx
    Febrero 5th, 2009 @ 10:35 am

    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
    Febrero 5th, 2009 @ 4:51 pm

    andale ahora si!! muchas gracias!

  4. Mario Martinez
    Febrero 6th, 2009 @ 1:06 pm

    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
    Febrero 23rd, 2009 @ 12:12 pm

    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
    Febrero 26th, 2009 @ 5:45 am

    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
    Junio 20th, 2009 @ 8:22 am

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

  8. tolerantx
    Junio 20th, 2009 @ 2:04 pm

    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
    Julio 10th, 2009 @ 9:48 am

    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. tolerantx
    Julio 10th, 2009 @ 9:59 am

    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
    Julio 10th, 2009 @ 12:24 pm

    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. tolerantx
    Julio 10th, 2009 @ 12:50 pm

    ¿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
    Julio 10th, 2009 @ 1:50 pm

    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
    Julio 13th, 2009 @ 5:15 pm

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

    Saludos,

  15. tolerantx
    Julio 13th, 2009 @ 8:52 pm

    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
    Julio 16th, 2009 @ 10:45 am

    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. tolerantx
    Julio 16th, 2009 @ 10:57 am

    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
    Agosto 24th, 2009 @ 10:52 am

    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. tolerantx
    Agosto 24th, 2009 @ 11:39 am

    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
    Agosto 24th, 2009 @ 12:11 pm

    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
    Agosto 25th, 2009 @ 9:50 am

    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. tolerantx
    Agosto 25th, 2009 @ 10:04 am

    Excelente :) que bueno que hayas resuelto el problema

    Saludos :)

  23. Giovanni Croce
    Noviembre 13th, 2009 @ 5:31 pm

    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. tolerantx
    Noviembre 14th, 2009 @ 1:19 pm

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

  25. Giovanni Croce
    Noviembre 23rd, 2009 @ 11:17 am

    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
    Noviembre 23rd, 2009 @ 11:18 am

    disculpa jejej no habia visto la respuesta arriba …gracias

  27. robertortilla
    Enero 22nd, 2010 @ 2:27 pm

    eres un ñoño

Leave a Reply





  • Mi Twitter

    tolerantx
  • Delicious

    • No bookmarks avaliable.