Backup con .bat

Mi nombre es diego y te comento que estoy realizando un script en .bat para hacer un backup de la bd en mysql de un sistema que estoy desarrollando...
REM [at] echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root sao > E:\Backup\backup.sql
El script funciona bien pero tiene unos detalles que me gustaría solucionar...
Probé el script y me realiza el dump de la BD pero me gustaría concatenarle la fecha al nombre del archivo...
Si prestas atención en la ruta donde apunta el archivo final, se nota que se guarda dentro de la carpeta backup, la cuestión es que si la carpeta no se crea previamente, el dump no funciona...:(
Y otra es que si se puede, me gustaría comprimir el archivo...
Espero que me puedas ayudar ya que no tengo idea de DOS, y justo me toco hacer esto y no entiendo mucho el lenguaje...
Saludos y perdona mi ignorancia
Un abrazo
Diego

1 Respuesta

Respuesta
1
Un par de cosillas o tres:
1. ¿Cuál es el idioma de tu versión del sistema operativo? Es que los resultados del BAT en cuanto a la captura de la fecha y la hora pueden ser diferentes según el idioma de trabajo
2. ¿Cuál sería el formato en el que querrías que te saliera la fecha y el nombre del archivo de Backup? Por ejemplo Backup_ddmmaaaa.sql
3. ¿Qué compresor querrías utilizar para hacer el comprimido? (RAR, ZIP, etc.)
Si el sistema operativo está configurado en español y, como parece, solo te interesa la fecha y no la hora, podrías simplificarlo así:
REM @echo off
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root sao > E:\Backup\backup_%fecha%.sql
Luego habría que añadirle el comando de compresión, para lo que tienes que saber el path del compresor y las opciones de compresión.
¿Hola experto como andas?
Te paso a comentar los items que me pedís...
El sistema lo estoy desarrollando bajo windows 7 x64 bits...(Español)
Con respecto al comentario que me hiciste sobre la fecha arriba, te digo que probé hacerlo de la forma que me decís y cuando ejecuto el bat me crea un archivo en la ruta así:backup_09062011...
Pero el problema es que no le pone extensión(.txt).le pongo la extensión y cuando lo abro es como que si me creara el archivo por la mitad, es decir me pone las cabeceras del dump pero no hace más nada. Digamos que queda corrupto...
Estaría bueno comprimir el archivo en .rar
Espero haberte sido útil, cualquier cosa me chiflas ...:)
Saludos
Diego
Vamos a ver. Yo no sé cuál es el formato que genera el programa mysqldump porque lo desconozco totalmente. Pero si el archivo que genera es correcto con el nombre que le asignabas antes no habría mayor problema. Se podría renombrar después. Prueba primero con algo así:
REM @echo off
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root sao > E:\Backup\backup.sql
Si el backup.sql generado es correcto añádele al final el comando
ren E:\Backup\backup.sql E:\Backup\backup_%fecha%.sql
Si tienes el Winrar en la carpeta "Archivos de programa (x86)" (si es una versión de 32 bits) para comprimirlo, en lugar del comando anterior tendrías que poner como última línea:
"C:\Program Files (x86)\Winrar\rar" a -ep1 E:\Backup\backup_%fecha% E:\Backup\backup.sql
Te creará el archivo E:\Backup\backup_09062011.rar
Si tienes un Winrar de 64 bits (no sé si lo hay) estaría en la carpeta "Program Files" (o "Archivos de programa" si la ves desde las ventanas del propio Explorador de Windows) en lugar de en "Program Files (x86)".
A ver que tal te va con esto.
Saludos,
GGG
Hola experto,
Haciendo pruebas y pruebas lo que logre hacer es que me haga el backup a la carpeta Backup pero no me deja ponerle el .sql al archivo.
Es decir que si lo dejo así:
REM @echo off
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root sao > E:\Backup\%fecha%
Me hace el archivo y yo editandolo y poniéndole el .sql me lo abre correctamente con todo el contenido dentro del mismo.
Pero probé poniéndole el comando PAUSE para leer lo que hacia y me decía que no reconocía el ."sql" pero no encuentro de que manera concatenarcelo.
Espero tu respuesta
Saludos
Diego
Insisto en lo que te decía. Si consigues que el programa mysqldump genere un archivo cualquiera, con o sin extensión sql (digamos el archivo "pepito") solo tendrás que incluir en el BAT un comando de renombrar tipo:
ren E:\Backup\pepito E:\Backup\backup_%fecha%.sql
El comando ren (rename) te va a reconocer cualquier extensión.
Si, además, quieres aprovechar para guardarlo comprimido en lugar de lo anterior deberías poner la línea
"C:\Program Files (x86)\Winrar\rar" a -ep1 E:\Backup\backup_%fecha% E:\Backup\pepito
De todas formas no acabo de entender que una redirección de la salida (que es lo que hace el ">" de la ejecución del mysqldump) tenga problemas para poner cualquier nombre con cualquier extensión.
Cópiame aquí el BAT tal como lo estás probando (con copiar y pegar para que no se escape nada).
Saludos,
GGG
Hola experto,
Disculpa pero lo he probado y no se porque no funciona...
El script es este:
REM @echo off
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root -proot sao > ren E:\Backup\backup.sql E:\Backup\backup_%fecha%.sql
Así no funciona el backup...
Todavía no me termina de cerrar algo. ¿Supuestamente ahí le estoy diciendo que me renombre el archivo backup.sql por el otro con la fecha no?. ¿Pero cómo lo puede hacer si todavía no se creo?... es como que esta queriendo renombrar un archivo que todavía no existe...
Capaz que estoy errado..
Con esl tema de la compresión vos me decís que cambie la linea:
ren E:\Backup\backup.sql E:\Backup\backup_%fecha%.sql por....
"C:\Program Files (x86)\Winrar\rar" a -ep1 E:\Backup\backup_%fecha% E:\Backup\pepito
¿Estoy en lo correcto?
Espero tu respuesta
Saludos
Diego
Voy a intentar ser más preciso:
Script inicial de comprobación de funcionamiento
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root -proot sao > E:\Backup\backup.sql
Si este script funciona y el archivo generado (backup.sql) es correcto pasaríamos a modificar el script de la forma siguiente:
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root -proot sao > E:\Backup\backup.sql
ren E:\Backup\backup.sql E:\Backup\backup_%fecha%.sql
Le he añadido una cuarta fila. Tal como indicabas no tenía sentido renombrar algo que todavía no existía.
Si este segundo script funciona correctamente el definitivo quedaría:
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root -proot sao > E:\Backup\backup.sql
"C:\Program Files (x86)\Winrar\rar" a -ep1 E:\Backup\backup_%fecha% E:\Backup\backup.sql
He cambiado la última fila para que en lugar de renombrar el archivo lo comprima y la fecha se incluya en el nombre del archivo comprimido. También debe tener 4 filas, la última la ha cortado en dos el editor de esta página, pero si copias y pegas creo que saldrá bien. En todo caso comprueba que son cuatro filas y no cinco.
Cuéntame como te va con estos tres scripts. Si alguno no funciona correctamente dime exactamente que error saca o que mensaje muestra. Y no te preocupes que acabará saliendo.
Saludos,
GGG
He visto que no ha cortado la última fila del último script al presentarlo de verdad. Me la estaba cortando, aparentemente, mientras lo escribía. De modo que ignora ese último comentario.
GGG
¿Hola experto como andas?
Te comento que lo he podido solucionar gracias a vos y dándole unos retoques...
for /f "tokens=1" %%i in ('date /t') do set DATE=%%i
set fecha=%DATE:/=%
C:\\xampp\\mysql\\bin\\mysqldump --opt --user=root -proot sao > E:\Backup\backup.sql
ren E:\Backup\backup.sql E:\Backup\backup_%fecha%.sql
C:\rar a -ep1 E:\Backup\backup_%fecha% E:\Backup\backup.sql
Vos sabes que si yo pongo C:\Archivos de programa... me dice que no se reconoce como un comando interno...
Entonces probé sacando el rar.exe a la raíz del disco y funciono... Una buena!:)
La otra es que me genera dos archivos, los cuales funcionan perfecto.
Uno llamado backup.sql y el otro se llama backup_13062011.rar
Me llama la atención que no me deje poner la ruta absoluta del ejecutable que se encarga de comprimir el archivo..
Saludos
Diego
Veo que me has hecho caso pero solo en parte.
La carpeta "Archivos de programa" en Windows 7 es una especie de "sinónimo" interno del propio Windows de la carpeta real "Program Files", a diferencia de Windows XP, en que la carpeta "Archivos de programa" es una carpeta real (que depende del idioma de instalación). Si en Windows 7 abres una ventana de comando (CMD), te sitúas en el directorio raíz (C:) y pides un directorio con el comando DIR obtienes algo como lo siguiente:
C:\>dir
El volumen de la unidad C es AAAAAA
El número de serie del volumen es: NNNN-NNNN
Directorio de C:\
31/05/2011 19:27 <DIR> Program Files
31/05/2011 19:27 <DIR> Program Files (x86)
30/05/2011 21:24 <DIR> Users
23/05/2011 17:59 <DIR> Windows
3 archivos 2.907 bytes
6 dirs 85.306.916.864 bytes libres
(He borrado alguna información que no tiene mayor interés). Como ves no existe ninguna carpeta llamada "Archivos de programa" aunque desde el propio Windows sí que la veas.
En cambio en XP obtendrías algo como:
C:\>dir
El volumen de la unidad C es BBBBBBB
El número de serie del volumen es: nnnn-nnnn
Directorio de C:\
15/05/2011 09:57 <DIR> Archivos de programa
28/01/2010 17:32 <DIR> Documents and Settings
21/05/2011 17:39 <DIR> Program Files
30/05/2011 21:06 <DIR> WINDOWS
9 archivos 38.189 bytes
15 dirs 34.717.777.920 bytes libres
Aquí pueden existir las dos carpetas "Archivos de programa" y "Program Files" pero lo más normal es que solo exista la primera.
De modo que lo que desde Windows 7 ves en "Archivos de programa" en realidad está en "Program Files" y lo que ves en "Archivos de programa (x86)" en realidad está en "Program Files (x86)". Por eso no te encuentra el rar.exe en el camino (path) que le indicas. Y por eso te escribí la línea de esta manera:
"C:\Program Files (x86)\Winrar\rar" a -ep1 E:\Backup\backup_%fecha% E:\Backup\backup.sql
(Las comillas también deben mantenerse como están).
Esto en primer lugar.
En segundo lugar si utilizas el comando "ren" (de "rename", renombrar) no utilices el "rar" y al revés. La línea del ren te cambia de nombre al archivo generado y el rar ya no lo encontraría. Pero si dices que al final obtienes dos archivos, uno de nombre backup.sql y otro de nombre backup_13062011.rar es que no estás usando el "ren". Si quieres que se mantenga solo el archivo backup_13062011.rar solo tienes que añadir, como última línea:
del backup.sql
Que borrará el archivo intermedio, backup.sql.
Pero básicamente creo que tienes resuelto el problema.
Cualquier duda que tengas sobre el propio BAT (o sobre cualquier otra cosa en la que pueda ayudarte) me la puedes plantear aquí. Si ya no tienes más, de momento, cierra la pregunta.
Saludos,
GGG
¿Hola experto como andas?
La verdad te agradezco mucho no solo por la respuesta, sino también con la rapidez y el profesionalismo que lo haces...
Gracias nuevamente y nos estaremos viendo en la próxima...
Un abrazo
Diego

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas