簡體   English   中英

如何檢查 Postgres 備份是否成功(無需人工操作)?

[英]How to check Postgres backup has been successful(Without manual efforts)?

我們有 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 個備份計划

例如,嘗試在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM