Si buscamos realizar un respaldo o backup de nuestra BBDD ya sea MySQL como MariaDB, podemos usar un script parecido al siguiente:
#!/bin/bash
DATA=$(date +%d%m%Y%H%M)
mkdir -p /backups
DB_USER='root'
DB_PASS='123456'
DB_HOST=`echo $HOSTNAME`
DB_IP=`echo $(hostname -I) | awk '{print $1}'`
BACKUP_DAYS='7'
/usr/bin/mysqlcheck --all-databases -u root -p${DB_PASS}
/usr/bin/mysqlcheck --all-databases -o -u root -p${DB_PASS}
/usr/bin/mysqlcheck --all-databases --auto-repair -u root -p${DB_PASS}
/usr/bin/mysqlcheck --all-databases --analyze -u root -p${DB_PASS}
mysql -s -u ${DB_USER} -p${DB_PASS} -e 'show databases' -s --skip-column-names | egrep -v 'information_schema|performance_schema|mysql' --silent
if [ "$?" -eq "0" ]; then
for DB in $(mysql -u ${DB_USER} -p${DB_PASS} -e 'show databases' -s --skip-column-names | egrep -v 'information_schema|performance_schema|mysql'); do
echo "[ OK ] [ ${DB} ] Backup init"
NAME="${DATA}-${DB_HOST}-${DB}"
/usr/bin/mysqldump -u ${DB_USER} -p${DB_PASS} --databases ${DB} --add-drop-database | gzip -9 > "/backups/${NAME}.sql.gz"
# CHECK BACKUP
zgrep -q 'Dump completed on' /backups/${NAME}.sql.gz
if [ "$?" -ne "0" ]; then
echo "[ KO ] [ ${DB} ] Backup not Dump complete"
else
echo "[ OK ] [ ${DB} ] Backup Dump complete"
if [ -f "/backups/${NAME}.sql.gz" ]; then
find /backups -type f -mtime +${BACKUP_DAYS} -name "*-${NAME}.sql.gz" | xargs rm -rf
echo "[ OK ] [ ${DB} ] Clean old Backups"
fi
# COPY REMOTE BACKUP
# /usr/bin/sshpass -p '123456' /usr/bin/scp -rp /backups/${NAME}.sql.gz pi@node01:/backups/
fi
echo "------------------------------------------------------"
done
else
echo "[ KO ] [ ${DB} ] Connection failed"
fi
y recordar añadir una tarea planificada, via cron. Por ejemplo, a las 23:30 cada noche:
30 23 * * * /scripts/MYSQL_BACKUP.sh