This repository has been archived on 2023-05-21. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2018-08-30 07:42:06 +00:00

107 lines
3.2 KiB
Bash

#!/bin/bash
#==============================================================================
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# 0 2 * * * /bin/bash /tmp/backup.sh
#sshpass -p 'ictmaatwerk' rsync /tmp/backups/. root@51.68.230.92:/tmp --delete -av --ignore-existing
#==============================================================================
# CUSTOM SETTINGS
#==============================================================================
# directory to put the backup files
BACKUP_DIR=/backup
# MYSQL Parameters
MYSQL_UNAME=root
MYSQL_PWORD=Lithops2206
# Don't backup databases with these names
# Example: starts with mysql (^mysql) or ends with _schema (_schema$)
IGNORE_DB="(^mysql|_schema$)"
# include mysql and mysqldump binaries for cron bash user
PATH=$PATH:/usr/local/mysql/bin
# Number of days to keep backups
KEEP_BACKUPS_FOR=30 #days
#==============================================================================
# METHODS
#==============================================================================
# YYYY-MM-DD
TIMESTAMP=$(date +%F_%H:%M)
function delete_old_backups()
{
# Delete mysql older x days
echo "Deleting $BACKUP_DIR/*.sql.gz older than $KEEP_BACKUPS_FOR days"
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_BACKUPS_FOR -exec rm {} \;
# Delete html folder older x days
echo "Deleting $BACKUP_DIR/*.tar.gz older than $KEEP_BACKUPS_FOR days"
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +$KEEP_BACKUPS_FOR -exec rm {} \;
}
function mysql_login() {
local mysql_login="-u $MYSQL_UNAME"
if [ -n "$MYSQL_PWORD" ]; then
local mysql_login+=" -p$MYSQL_PWORD"
fi
echo $mysql_login
}
function database_list() {
local show_databases_sql="SHOW DATABASES WHERE \`Database\` NOT REGEXP '$IGNORE_DB'"
echo $(mysql $(mysql_login) -e "$show_databases_sql"|awk -F " " '{if (NR!=1) print $1}')
}
function echo_status(){
printf '\r';
printf ' %0.s' {0..100}
printf '\r';
printf "$1"'\r'
}
function backup_database(){
backup_file="$BACKUP_DIR/$TIMESTAMP.$database.sql.gz"
output+="$database => $backup_file\n"
echo_status "...backing up $count of $total databases: $database"
$(mysqldump $(mysql_login) $database | gzip -9 > $backup_file)
}
function backup_databases(){
local databases=$(database_list)
local total=$(echo $databases | wc -w | xargs)
local output=""
local count=1
for database in $databases; do
backup_database
local count=$((count+1))
done
echo -ne $output | column -t
}
function hr(){
printf '=%.0s' {1..100}
printf "\n"
}
#==============================================================================
# RUN SCRIPT
#==============================================================================
mkdir -p /backup
chmod -R 755 /backup
# MYSQL DUMP
delete_old_backups
hr
backup_databases
hr
# DIRECTORY BACKUP
BACKUPTIME=`date +%b-%d-%y` #get the current date
DESTINATION=/backup/backup-$BACKUPTIME.tar.gz #create a backup file using the current date in it's name
SOURCEFOLDER=/var/www #the folder that contains the files that we want to backup
tar -cpzf $DESTINATION $SOURCEFOLDER #create the backup
printf "All backed up!\n\n"