Как проверить, что Postgres резервное копирование прошло успешно (без ручных операций)? - PullRequest
1 голос
/ 17 февраля 2020

У нас есть более 100 баз данных, которые содержат ежедневные резервные копии

как проверять резервные копии при сбоях в PostgreSQL расписаниях резервного копирования

pg_dump -h localhost -p 5432  -U postgres -d db1  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db2  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db3  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db4  -v -f "path/file.backup"
pg_dump -h localhost -p 5432  -U postgres -d db5  -v -f "path/file.backup"
...

как у меня есть 100 расписаний резервного копирования

1 Ответ

1 голос
/ 17 февраля 2020

Попробуйте сделать это, например, в for loop?

#!/bin/bash

# create an indexed array with all your databases listed
database_names=( "1" "2" "3" )

# Declare an associative array to store dbname and dump status codes
declare -A all_dbdump_states

for db in "${database_names[@]}"; do
   echo "Executing $db dump.."
   pg_dump -h localhost -p 5432 -U postgres -d $db -v -f "path/file.backup"
   dump_rc=$? # Save exit code of pg_dump process into variable

   # After each for loop iteration, append data into array
   all_dbdump_states[$db]+=$dump_rc
done

echo -e "\nListing status codes of all dumps:"
for db in "${!all_dbdump_states[@]}"; do
   echo "Database [$db] status: ${all_dbdump_states[$db]}"
   sleep 1
done           

Здесь я echoing этих pg_dump строк для улучшения тестов и сделал явную ошибку в команде echo, чтобы поставить вторая команда завершилась неудачно, с кодом выхода 127:

#!/bin/bash

# create an indexed array with all your databases listed
database_names=( "1" "2" "3" )

# Declare an assotiative array to store dbname and dump status codes
declare -A all_dbdump_states

for db in "${database_names[@]}"; do
   echo "Executing $db dump.."
   if [[ $db -eq 2 ]]; then
      ech "pg_dump -h localhost -p 5432 -U postgres -d 2 -v -f 'path/file.backup'" &>/dev/null
      dump_rc=$? # Save exit code of pg_dump process into variable
      all_dbdump_states[$db]+=$dump_rc
      continue
   fi
   echo "pg_dump -h localhost -p 5432 -U postgres -d $db -v -f 'path/file.backup'" &>/dev/null
   dump_rc=$? # Save exit code of pg_dump process into variable

   # After each for loop iteration, append data into array
   all_dbdump_states[$db]+=$dump_rc
done

echo -e "\nListing status codes of all dumps:"
for db in "${!all_dbdump_states[@]}"; do
   echo "Database [$db] status: ${all_dbdump_states[$db]}"
   sleep 1
done

Пример вывода:

$ ./test.sh
Executing 1 dump..
Executing 2 dump..
Executing 3 dump..

Listing status codes of all dumps:
Database [1] status: 0
Database [2] status: 127
Database [3] status: 0
...