Respaldos automáticos en MySQL y Windows
- julio 21st, 2008
- Publicado en Informática . MySQL . Windows
- Publicar un comentario
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.
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
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
andale ahora si!! muchas gracias!
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)
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
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.
donde puedo buscar este respaldo una vez que se ejecuta el respaldo automatico
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.
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,
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.
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.
¿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.
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,
Muy agradecido Tolerantx, ya resolvi el problema, funciona perfecto.
Saludos,
Que bueno que te haya servido, pero te agradecería que pusieras tu solución por si alguien más tiene el mismo problema. 🙂
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,
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.
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,
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.
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.
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,
Excelente 🙂 que bueno que hayas resuelto el problema
Saludos 🙂
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?
Que tal Giovanni, sobre tu duda igual te puede servir ésto Dumping MySQL Stored Procedures Functions and Triggers
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
disculpa jejej no habia visto la respuesta arriba …gracias
eres un ñoño
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
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.
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 😀
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
waw.. gracias 😀 .. no habia visto tu respuesta.. muchas gracias.. sime funciono :D.. t sigo en twitter :D.. gracias de nuevo..
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
É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
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
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