From de9207112b68fc237e65fbf1012e7ec971319236 Mon Sep 17 00:00:00 2001 From: Tobias Klaus Date: Mon, 12 Feb 2018 15:31:36 +0100 Subject: [PATCH] import borgthismachine and mysqlBackup --- borgthismachine.sh | 86 ++++++++++++++++++++++++++++++++++++++++++++++ mysqlBackup.sh | 40 +++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100755 borgthismachine.sh create mode 100755 mysqlBackup.sh diff --git a/borgthismachine.sh b/borgthismachine.sh new file mode 100755 index 0000000..9d0a31d --- /dev/null +++ b/borgthismachine.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +if [[ "$HOME" == "/" ]] ; then + HOME="/root/" +fi + +HOME=${HOME:-"/root/"} + +PERSONALCONFIG="$HOME/.config/borg.conf" + +BORGHOST="" +USER="" +REPO="" +MAC="" +BORG_PASSPHRASE="" +BORG_EXCLUDE_FILE="" +BORG_EXCLUDE_PATTERN=("/var/cache/*" + "/var/tmp/*" + ) +BORG_BACKUP_DIRS=( + "/etc" + "/var" + "/home" + "/usr/local" + ) + +APPENDONLY="YES" #unset if not used +BORG_PRUNEARG=("--keep-daily=7" "--keep-weekly=4" "--keep-monthly=12") +MYREPO=${USER}@${BORGHOST}:${REPO} +BORG_ARGS="" + +if [[ -e "$PERSONALCONFIG" ]] ; then + ls -l "$PERSONALCONFIG" + #shellcheck disable=SC1090 + source "$PERSONALCONFIG" +else + echo "$PERSONALCONFIG not found" +fi + + +MYREPO="${USER}@${BORGHOST}:${REPO}" + + +export BORG_PASSPHRASE +export HOME +echo using repo: $MYREPO + +SNAPSHOT="$(date +%a-%Y-%m-%d)" + +echo #### borg backup #### +if [[ -n "${MAC}" ]] ; then + if ! ping -c 1 $BORGHOST &> /dev/null ; then + wakeonlan $MAC + #wakup may take some time + sleep 10 + else + echo $BORGHOST is up + fi +fi + +#wordsplitting is needed for arguments +#shellcheck disable=SC2046 +nice ionice -c 3 borg create --stats \ + --exclude-caches \ + --one-file-system \ + ${BORG_ARGS} \ + $([[ -n "${BORG_EXCLUDE_PATTERN[*]}" ]] && printf " --exclude \"%s\" " "${BORG_EXCLUDE_PATTERN[@]}" ) \ + $([[ -n "$BORG_EXCLUDE_FILE" ]] && printf " --exclude-from \"%s\" " "${BORG_EXCLUDE_FILE}" ) \ + "${MYREPO}::${SNAPSHOT}" \ + "${BORG_BACKUP_DIRS[@]}" + +echo RetVal = $? + +if [[ "${APPENDONLY}" != "YES" ]] ; then + time borg prune -v "$MYREPO" "${BORG_PRUNEARG[@]}" + + echo RetVal = $? + + time borg list -v $MYREPO + echo RetVal = $? +else + echo "#############" + echo "You should purge the repository from time to time" +fi + +echo ##### borg end ###### diff --git a/mysqlBackup.sh b/mysqlBackup.sh new file mode 100755 index 0000000..b8e8fa1 --- /dev/null +++ b/mysqlBackup.sh @@ -0,0 +1,40 @@ +MYSQLDIR="/var/lib/backups/mysql" +MYSQLOPTIONFILE="/root/.my.cnf" +DAYS="30" + +set -e + +umask 0077 + +if ! pgrep mysqld > /dev/null ; then + echo "no mysqld running!" + exit 0 +fi +mkdir -p "$MYSQLDIR" +for db in $(mysql "--defaults-file=$MYSQLOPTIONFILE" -u backupuser -s -N -e 'SHOW DATABASES;'); do + #echo -e "==> Backing up database $db" + BACKEDUP="$BACKEDUP $db" + file=$MYSQLDIR/mysqldump-$db-$(date +%F_%H-%M).sql + mysqldump "--defaults-file=$MYSQLOPTIONFILE" -u backupuser --opt --single-transaction --databases "$db" | bzip2 > "$file.bz2" +done + +count=0 +#echo -e "\n==> Searching $MYSQLDIR for backups older than $DAYS days..." +for file in $(find "$MYSQLDIR" -type f -mtime "+$DAYS"); do + #echo "rm $file" + DELETED="$DELETED $(basename "$file")" + rm "$file" + count=$(($count+1)) +done +if [[ -n "$BACKEDUP" ]] ; then + echo "Backed up databases: $BACKEDUP" +else + echo "no database backed up" +fi + +if [[ -n "$DELETED" ]] ; then + echo "<== End: $count backups removed: ${DELETED}" +else + echo "No old backups removed!" +fi +