From 4e8e15be1606f2ba78f77781b43ad8ffc4d0790e Mon Sep 17 00:00:00 2001 From: Rustam Tagaev Date: Tue, 1 Oct 2024 13:11:06 +0300 Subject: [PATCH] [DO-1037] add backup scripts (!6) Reviewed-on: https://git.avroid.tech/DevOps/avroid_scripts/pulls/6 --- backup_scripts/postgres/post_backup.sh | 7 +++ backup_scripts/postgres/pre_backup.sh | 48 +++++++++++++++++++ .../postgres/pre_backup_for_backup_test.sh | 41 ++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 backup_scripts/postgres/post_backup.sh create mode 100644 backup_scripts/postgres/pre_backup.sh create mode 100644 backup_scripts/postgres/pre_backup_for_backup_test.sh diff --git a/backup_scripts/postgres/post_backup.sh b/backup_scripts/postgres/post_backup.sh new file mode 100644 index 0000000..70eea38 --- /dev/null +++ b/backup_scripts/postgres/post_backup.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +DIRBACKUP="/data/backups" + +if [ -d "${DIRBACKUP}" ]; then + rm -rf "${DIRBACKUP:?}/"* +fi diff --git a/backup_scripts/postgres/pre_backup.sh b/backup_scripts/postgres/pre_backup.sh new file mode 100644 index 0000000..45cca88 --- /dev/null +++ b/backup_scripts/postgres/pre_backup.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +DATE=$(date +%F) +DIRBACKUP="/data/backups" +DBUSER="postgres" +TEST_BACKUP_SERVER="h-license-manager-backup-server.avroid.cloud" + +get_leader() { + curl -s 127.0.0.1:8008 | jq -j ".role" +} + +if [ "$(get_leader)" != "master" ]; then + echo "I'm not leader. Exit" + exit 0 +fi + +getDbName() { + psql -lA -x -U ${DBUSER} -p 15432 -d postgres | grep Name | grep -v -P "template0|template1" | cut -d "|" -f 2 +} + +DBLIST=$(getDbName) + +createBackup() { + for db in $DBLIST; do + echo "====================================" + echo "START create backup database: ${db}" + + pg_dump -Fc -U ${DBUSER} -p 15432 -d "${db}" >"${DIRBACKUP}/${db}-${DATE}".sql + + bzip2 -9 "${DIRBACKUP}/${db}-${DATE}".sql + + copyBackupToTestServer "${DIRBACKUP}/${db}-${DATE}".sql.bz2 ${TEST_BACKUP_SERVER} + + echo "END database bzip2: ${db}" + done + + pg_dumpall -p 15432 -U postgres --roles-only > "${DIRBACKUP}/roles-${DATE}".sql + copyBackupToTestServer "${DIRBACKUP}/roles-${DATE}".sql ${TEST_BACKUP_SERVER} +} + +copyBackupToTestServer() { + rsync $1 $2::backup || true +} + +[[ $(ls -A ${DIRBACKUP}) ]] 2>/dev/null && echo "dir ${DIRBACKUP} not empty" && exit 123 + +createBackup +copyBackupToTestServer \ No newline at end of file diff --git a/backup_scripts/postgres/pre_backup_for_backup_test.sh b/backup_scripts/postgres/pre_backup_for_backup_test.sh new file mode 100644 index 0000000..cd3ce4d --- /dev/null +++ b/backup_scripts/postgres/pre_backup_for_backup_test.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +DATE=$(date +%F) +DIRBACKUP="/data/backups" +DBUSER="postgres" + +get_leader() { + curl -s 127.0.0.1:8008 | jq -j ".role" +} + +if [ "$(get_leader)" != "master" ]; then + echo "I'm not leader. Exit" + exit 0 +fi + +getDbName() { + psql -lA -x -U ${DBUSER} -p 15432 -d postgres | grep Name | grep -v -P "template0|template1" | cut -d "|" -f 2 +} + +DBLIST=$(getDbName) + +createBackup() { + for db in $DBLIST; do + echo "====================================" + echo "START create backup database: ${db}" + + pg_dump -Fc -U ${DBUSER} -p 15432 -d "${db}" >"${DIRBACKUP}/${db}-${DATE}".sql + + bzip2 -9 "${DIRBACKUP}/${db}-${DATE}".sql + + echo "END database bzip2: ${db}" + done + + pg_dumpall -p 15432 -U postgres --roles-only > "${DIRBACKUP}/roles-${DATE}".sql +} + + +[[ $(ls -A ${DIRBACKUP}) ]] 2>/dev/null && echo "dir ${DIRBACKUP} not empty" && exit 123 + +createBackup +copyBackupToTestServer