Gogs 6 роки тому
коміт
58bb1f9aba
1 змінених файлів з 85 додано та 0 видалено
  1. 85 0
      pg_backup.sh

+ 85 - 0
pg_backup.sh

@@ -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