Backups por FTP con Bash Shell
Para evitar disgustos como le sucedió a ma.gnolia.com (que perdió todos los datos de sus servidores y no pudo recuperarlos), es buena idea tener un sistema de backups al día que te permita recuperarte de cualquier catástrofe. Como decía aquel doctor en la tele, es mejor prevenir que lamentar. Dejo por aquí un pequeño script que puede ayudar a la tarea. Realmente simple pero efectivo.
Los archivos: back_daily.ftp , back_monthly.ftp
Algunos comentarios de las partes que tienen (comentaré el daily):
- Tomamos la variable DAY con la fecha del sistema
- Volcado de todas las bases de datos del sistema
- Zip con archivos y base de datos
- Subimos todo por FTP
- Creamos un cronjob que ejecute el script (en este caso dos, uno diario y otro menusal) redirigiendo la salida a un log.
DAY=`date +%d`
echo Backup for Day: $DAY
mysqldump -uUSER -pPASSWORD –all-databases > mysql_backups/mysql-latest.sql
zip -r file_backups/files_back_$DAY.zip public_html/*
zip -r file_backups/files_back_$DAY.zip hostx/*
zip -r file_backups/files_back_$DAY.zip hosty/*
zip -r file_backups/files_back_$DAY.zip hostz/*
zip -r file_backups/mysql_back_$DAY.zip mysql_backups/mysql-latest.sql
ftp -n HOST-DEL-SERVIDOR.com <
user USERNAME PASSWORD
binary
cd target_directory
lcd file_backups
put files_back_$DAY.zip
put mysql_back_$DAY.zip
quit
EOF
05 03 * * * /home/acilia/file_backups/back_daily.ftp >> /home/acilia/file_backups/log/back_daily.ftp.log
05 03 01 * * /home/acilia/file_backups/back_monthly.ftp >> /home/acilia/file_backups/log/back_monthly.ftp.log
Y con esto sería suficiente para tener un respaldo contra catástrofes. Mediante este sistema, guardaríamos las copias diarias durante 1 mes y las copias mensuales durante 12 meses, aunque siempre sería modificable para que no se sobre-escriban los ficheros. En caso de utilizar estos mismos scripts, habría que tener cuidado con los directorios. En este caso se asume que existen (y tienen permiso de escritura) los directorios mysql_backups y file_backups en la raíz del usuario que ejecutará los scripts.
El script es básico y muy mejorable, no estaría de más echarle un ojo al bash y darle algún retoque… cuando tenga un rato ;-)