From 5e0ed2180cd410bc3eb56300186bdc1f9fda4330 Mon Sep 17 00:00:00 2001 From: xcad2k <28359525+xcad2k@users.noreply.github.com> Date: Sun, 11 Apr 2021 15:25:50 +0200 Subject: [PATCH] db-container-backup-script --- .../db-container-backup.service | 11 ++++ db-container-backup/db-container-backup.sh | 52 +++++++++++++++++++ db-container-backup/db-container-backup.timer | 10 ++++ 3 files changed, 73 insertions(+) create mode 100644 db-container-backup/db-container-backup.service create mode 100644 db-container-backup/db-container-backup.sh create mode 100644 db-container-backup/db-container-backup.timer diff --git a/db-container-backup/db-container-backup.service b/db-container-backup/db-container-backup.service new file mode 100644 index 0000000..03ebb0e --- /dev/null +++ b/db-container-backup/db-container-backup.service @@ -0,0 +1,11 @@ +[Unit] +Description=DB Container Backup Script +Wants=db-container-backup.timer + +[Service] +Type=simple +ExecStart=sh db-container-backup.sh +User=xcad + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/db-container-backup/db-container-backup.sh b/db-container-backup/db-container-backup.sh new file mode 100644 index 0000000..d9a655f --- /dev/null +++ b/db-container-backup/db-container-backup.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# DB Container Backup Script Template +# --- +# This backup script can be used to automatically backup databases in docker containers. +# It currently supports mariadb, mysql and bitwardenrs containers. +# + +DAYS=2 +BACKUPDIR=/home/xcad/backup + + +# backup all mysql/mariadb containers + +CONTAINER=$(docker ps --format '{{.Names}}:{{.Image}}' | grep 'mysql\|mariadb' | cut -d":" -f1) + +echo $CONTAINER + +if [ ! -d $BACKUPDIR ]; then + mkdir -p $BACKUPDIR +fi + +for i in $CONTAINER; do + MYSQL_DATABASE=$(docker exec $i env | grep MYSQL_DATABASE |cut -d"=" -f2) + MYSQL_PWD=$(docker exec $i env | grep MYSQL_ROOT_PASSWORD |cut -d"=" -f2) + + docker exec -e MYSQL_DATABASE=$MYSQL_DATABASE -e MYSQL_PWD=$MYSQL_PWD \ + $i /usr/bin/mysqldump -u root $MYSQL_DATABASE \ + | gzip > $BACKUPDIR/$i-$MYSQL_DATABASE-$(date +"%Y%m%d%H%M").sql.gz + + OLD_BACKUPS=$(ls -1 $BACKUPDIR/$i*.gz |wc -l) + if [ $OLD_BACKUPS -gt $DAYS ]; then + find $BACKUPDIR -name "$i*.gz" -daystart -mtime +$DAYS -delete + fi +done + + +# bitwarden backup + +BITWARDEN_CONTAINERS=$(docker ps --format '{{.Names}}:{{.Image}}' | grep 'bitwardenrs' | cut -d":" -f1) + +for i in $BITWARDEN_CONTAINERS; do + docker exec $i /usr/bin/sqlite3 data/db.sqlite3 .dump \ + | gzip > $BACKUPDIR/$i-$(date +"%Y%m%d%H%M").sql.gz + + OLD_BITWARDEN_BACKUPS=$(ls -1 $BACKUPDIR/$i*.gz |wc -l) + if [ $OLD_BITWARDEN_BACKUPS -gt $DAYS ]; then + find $BACKUPDIR -name "$i*.gz" -daystart -mtime +$DAYS -delete + fi +done + +echo "$TIMESTAMP Backup for Databases completed" \ No newline at end of file diff --git a/db-container-backup/db-container-backup.timer b/db-container-backup/db-container-backup.timer new file mode 100644 index 0000000..8f721a3 --- /dev/null +++ b/db-container-backup/db-container-backup.timer @@ -0,0 +1,10 @@ +[Unit] +Description=DB Container Backup Daily Job + +[Timer] +OnCalendar=daily +Persistent=true +Unit=db-container-backup.service + +[Install] +WantedBy=timers.target \ No newline at end of file