|
@@ -0,0 +1,85 @@
|
|
|
|
+#!/bin/bash
|
|
|
|
+
|
|
|
|
+# ██╗ ██╗ ██████╗ ██╗ ██╗ ████████╗ ██████╗ ██╗ ██╗███████╗███████╗
|
|
|
|
+# ██║ ██║██╔═══██╗██║ ██║ ╚══██╔══╝██╔═══██╗ ██║ ██║██╔════╝██╔════╝
|
|
|
|
+# ███████║██║ ██║██║ █╗ ██║ ██║ ██║ ██║ ██║ ██║███████╗█████╗
|
|
|
|
+# ██╔══██║██║ ██║██║███╗██║ ██║ ██║ ██║ ██║ ██║╚════██║██╔══╝
|
|
|
|
+# ██║ ██║╚██████╔╝╚███╔███╔╝ ██║ ╚██████╔╝ ╚██████╔╝███████║███████╗
|
|
|
|
+#╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝
|
|
|
|
+#
|
|
|
|
+# 1. set exec perms
|
|
|
|
+# chmod +x pg_backup.sh
|
|
|
|
+# 2. run .pg_backup db_01 db_02 ... db_n
|
|
|
|
+#
|
|
|
|
+
|
|
|
|
+set -e
|
|
|
|
+
|
|
|
|
+# CONTAINER="database"
|
|
|
|
+CONTAINER="postgres"
|
|
|
|
+# DB_USER="odoo"
|
|
|
|
+DB_USER="postgres"
|
|
|
|
+DATE=$(date +%Y%m%d)
|
|
|
|
+TIME=$(date +%H%M%S)
|
|
|
|
+DAYS_TO_KEEP=7
|
|
|
|
+# BACKUP_PATH="/mnt/backup/local"
|
|
|
|
+# CLONE_PATH="/mnt/backup/nfs"
|
|
|
|
+BKP_PATH="/home/robert/test_pg_backup"
|
|
|
|
+SYNC_PATH="/home/robert/test_sync_backup"
|
|
|
|
+TMP_PATH="."
|
|
|
|
+
|
|
|
|
+# perform database backup if docker exist
|
|
|
|
+perform_backups()
|
|
|
|
+{
|
|
|
|
+ if [ ! -x "$(command -v docker)" ]; then
|
|
|
|
+ echo "cannot perform backup"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ local BKP_TODAY_PATH=$(printf "%s/backup_%s" "$BKP_PATH" "$DATE")
|
|
|
|
+
|
|
|
|
+ if [ ! -d "$BKP_TODAY_PATH" ]; then
|
|
|
|
+ mkdir "$BKP_TODAY_PATH"
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ for DB_NAME in $@; do
|
|
|
|
+ local TMP_FILE=$(printf "%s/%s_%s.tar" "$TMP_PATH" "$DB_NAME" "$TIME")
|
|
|
|
+
|
|
|
|
+ docker exec $CONTAINER pg_dump -U $DB_USER -d $DB_NAME -F tar -C -b -c -f $TMP_FILE
|
|
|
|
+ docker cp $CONTAINER:$TMP_FILE $BKP_TODAY_PATH
|
|
|
|
+ docker exec $CONTAINER rm $TMP_FILE
|
|
|
|
+ done
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# delete old backups
|
|
|
|
+delete_old_backups()
|
|
|
|
+{
|
|
|
|
+ find $1 -maxdepth 1 -type d -name "backup_*" -mtime +$2 -exec rm -rf '{}' ';'
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# sync two backup paths
|
|
|
|
+local_sync_backups_path()
|
|
|
|
+{
|
|
|
|
+ if [ ! -x "$(command -v rsync)" ]; then
|
|
|
|
+ echo "cannot sync backups path"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ rsync -arz $1 $2
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# sync two backup paths remotely
|
|
|
|
+remote_sync_backups_path()
|
|
|
|
+{
|
|
|
|
+ if [ ! -x "$(command -v rsync)" ]; then
|
|
|
|
+ echo "cannot sync backups path"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ rsync -arz "ssh -p $1" "$2@$3:$4" $5
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+perform_backups $@
|
|
|
|
+delete_old_backups $BKP_PATH $DAYS_TO_KEEP
|
|
|
|
+sync_local_backups_path $BKP_PATH $SYNC_PATH
|
|
|
|
+
|
|
|
|
+exit 0
|