Script bash: Backup remoto por FTP.
Hoy vemos un sencillo script que nos ayudara a realizar un backup remoto por FTP de manera simple. Lo puedes usar en cualquier servidor Linux que necesite copias de seguridad, ya sea de los archivos, las carpetas del sistema, y de todas sus bases de datos MySQL o MariaDB.
El script utiliza NcFTP como cliente de FTP, debemos tenerlo instalado. Algunas de sus características más importantes: elimina las copias de seguridad anteriores los días que definamos, también envía un correo electrónico al sysadmin indicándole si el proceso fue un éxito, o si por el contrario se produjo algún error.
Backup remoto por FTP
Antes de comenzar, revisa atentamente las indicaciones:
- Guarda el script en /bin/ftpbackup.sh y lo haces ejecutable.
chmod +x /bin/ftpbackup.sh
- Recuerda que necesitas tener NCFTP instalado, por ejemplo:
sudo apt-get install ncftp
- Por defecto el lunes se hace la copia de seguridad completa, puedes modificar estos valores en el script (de lo contrario se realizan copias de seguridad incrementales).
- Por defecto se borran los backups con más de 30 días, puedes modificar la configuración según tus necesidades.
Creamos el Script bash.
nano /bin/ftpbackup.sh
Copia y pega lo siguiente, pero OJO!!!, inserta tus datos reales, tal vez incluso debas modificar las rutas.
#!/bin/bash # File System Backups via FTP with MySQL Databases ## # Guardar en /bin/ftpbackup.sh y hacer ejecutable # chmod +x /bin/ftpbackup.sh ## Your System Settings ## DIRS="/bin /etc /home /var/local /usr/local/bin /usr/lib /var/www" BACKUP=/tmp/backup.$$ NOW=$(date +"%Y-%m-%d") INCFILE="/root/tar-inc-backup.dat" DAY=$(date +"%a") FULLBACKUP="Mon" ## Your MySQL Settings ## MUSER="root" MPASS="tupassword" MHOST="localhost" MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" GZIP="$(which gzip)" ## Your FTP server Settings ## FTPD="//backup-directory-on-ftp-server" FTPU="ftp-usuario" FTPP="ftp-password" FTPS="ftp.server.address" NCFTP="$(which ncftpput)" ## Your Email Address ## EMAILID="tuemail@tudominio.com" ## Backup our DPKG Software List ## dpkg --get-selections > /etc/installed-software-dpkg.log ## Start the Backup for the file system ## [ ! -d $BACKUP ] && mkdir -p $BACKUP || : ## Check if we want to make a full or incremental backup ## if [ "$DAY" == "$FULLBACKUP" ]; then FTPD="//full-backups" FILE="MyServer-fs-full-$NOW.tar.gz" tar -zcvf $BACKUP/$FILE $DIRS else i=$(date +"%Hh%Mm%Ss") FILE="MyServer-fs-incremental-$NOW-$i.tar.gz" tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS fi ## Start the MySQL Database Backups ## ## Get all the MySQL databases names ## DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')" for db in $DBS do FILE=$BACKUP/mysql-$db.gz $MYSQLDUMP --single-transaction -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE done ## Check the Date for Old Files on FTP to Delete ## REMDATE=$(date --date="30 days ago" +%Y-%m-%d) ## Start the FTP backup using ncftp ## ncftp -u"$FTPU" -p"$FTPP" $FTPS<<EOF cd $FTPD cd $REMDATE rm -rf *.* cd .. rmdir $REMDATE mkdir $FTPD mkdir $FTPD/$NOW cd $FTPD/$NOW lcd $BACKUP mput * quit EOF ## Find out if ftp backup failed or not ## if [ "$?" == "0" ]; then rm -f $BACKUP/* mail -s "MYSERVER - BACKUP SUCCESSFUL" "$EMAILID" else T=/tmp/backup.fail echo "Date: $(date)">$T echo "Hostname: $(hostname)" >>$T echo "Backup failed" >>$T mail -s "MYSERVER - BACKUP FAILED" "$EMAILID" <$T rm -f $T fi
Guardas el archivo, y cierras el editor.
Lo puedes ejecutar con:
./ftpbackup.sh o bash ftpbackup.sh
Espero que este articulo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales. Tor vs VPN.