MySQLDUMP per Cronjob erstellen und speichern

Um einmal täglich einen MySQL oder MariaDB Dump aller Datenbanken zu erstellen, habe ich dieses Script geschrieben.

Es erstellt und packt einen Dump pro Datenbank und legt diesen im Backup-Verzeichnis ab. Alte Backups werden automatisch gelöscht. (Default: 14 Tage)

Der Aufruf des Scripts kann entweder per Cron oder direkt auf der Konsole erfolgen.

mysqldump.sh

#!/bin/bash

########################################################
#
# MySQL Backup Script
#
########################################################

RETENTION_DAYS="14"
BACKUP_DIR="/var/lib/mysql_backups"
MYSQLDUMP="/usr/bin/mysqldump"
MYSQLSHOW="/usr/bin/mysqlshow"
MYSQL_HOST="localhost"
MYSQL_USER="root"
MYSQL_PW="example"
# Plesk:
# MYSQL_PW=$(cat /etc/psa/.psa.shadow)
# Confixx:
# MYSQL_PW=$(grep mysqlUserPw /root/confixx/confixx_main.conf | cut -d"'" -f2)
# my.cnf:
# MYSQL_PW=$(awk -F "=" '/password/ {gsub(/ /,""); printf "%s", $2}' /root/.my.cnf)
MYSQLDUMP_PARAMETER="--single-transaction --opt --flush-logs --force --master-data --routines --triggers --events"

##########################################################

DATE_FORMAT="+%d.%m.%y"
CURRENT_DIR=$(date "$DATE_FORMAT")
DELETE_DIR=$(date --date="$RETENTION_DAYS days ago" "$DATE_FORMAT")
DBLIST=$("$MYSQLSHOW" --host="$MYSQL_HOST" --user="$MYSQL_USER" --password="$MYSQL_PW" | awk 'NR>=3 && NF>1 {printf "%s ", $2}')

mkdir -p "$BACKUP_DIR"/"$CURRENT_DIR"

for DB in $DBLIST; do
  "$MYSQLDUMP" $MYSQLDUMP_PARAMETER --host="$MYSQL_HOST" --user="$MYSQL_USER" --password="$MYSQL_PW" "$DB" \
    | gzip > "$BACKUP_DIR"/"$CURRENT_DIR"/"$DB".sql.gz
done

if [ -d "$BACKUP_DIR"/"$DELETE_DIR" ]; then
  rm -f "$BACKUP_DIR"/"$DELETE_DIR"/*.sql.gz
  rmdir "$BACKUP_DIR"/"$DELETE_DIR"
fi

exit 0

Schreibe einen Kommentar