Проект

Общее

Профиль

Backups MYSQL Databases

#!/usr/bin/env bash
# gunzip -c file.sql.gzip > dump.sql
# gpg --decrypt-files /tmp/file.gpg
#
# Create file ~/.my.cnf and add following lines in it and replace mysqluser & mysqlpass values.
#
# [client]
#   user=mysqluser
#   password=mysqlpass
#

dateTime=$(date +%Y-%m-%d-%H-%M-%S)
dumpsDir="/backups/mysql"
oldDays=30

excludedBases=${1}
excludedBaseBases="information_schema|performance_schema|mysql"

if [ -n "${excludedBases}" ]; then
    excludedBases=$(echo "${excludedBases}" | sed 's/ /|/g' | sed 's/,/|/g' | sed 's/;/|/g')
    excludedBases="${excludedBaseBases}|${excludedBases}"
else
 excludedBases="${excludedBaseBases}"
fi

databases=($(mysql -Bse "show databases;" | egrep -v "${excludedBases}"))

if [ ! -d "${dumpsDir}" ]; then
    mkdir "${dumpsDir}"
    chmod ug+rw "${dumpsDir}"
    chmod o-rwx "${dumpsDir}"
fi


for base in "${databases[@]}"
do
    cd "${dumpsDir}"
    echo "Backup Database: ${base}"

    if [ ! -d "${base}" ]; then
        mkdir "${base}"
        chmod ug+rw "${base}"
        chmod o-rwx "${base}"
    fi

    cd "${base}"

    name="${base}-$(hostname)-${dateTime}"

    mysqldump "${base}" --set-gtid-purged=OFF > "${name}.sql"
    tar -cjf "${name}.tgz" "${name}.sql" > /dev/null 2>&1
    rm "${name}.sql"

    countFiles=$(ls "./" | wc -l)

    if [ ${countFiles} -ge ${oldDays} ]; then
        echo "Delete old backups (Current count files: ${countFiles})"
        find ./ -name "*.tgz" -mdateTime +${oldDays} -type f -delete > /dev/null 2>&1
    else
        echo "No old dumps files"
    fi

done

exit 0