0
我正在使用Debian系統,在那裏運行PostgreSQL服務器。我修改了一個備份腳本並安裝了一個cron作業來每小時備份我們的數據庫,並將其存儲在一個文件夾中。除此之外,還執行了一個腳本,刪除超過3天的備份。我在3臺服務器上安裝了相同的腳本,並且我看到只有一個備份存在。 15個小時過去了,而不是15個。我做錯了什麼,或者刪除腳本是否錯誤?PostgreSQL:備份腳本只創建一次備份而不是每小時
post_back.sh:
#! /bin/bash
DUMPALL='/usr/bin/pg_dumpall'
PGDUMP='/usr/bin/pg_dump'
PSQL='/usr/bin/psql'
# directory to save backups in, must be rwx by postgres user
BASE_DIR='/media/attachment/backups/postgres'
YMD=$(date "+%Y-%m-%d-%T")
DIR="$BASE_DIR/$YMD"
mkdir -p "$DIR"
cd "$DIR"
# get list of databases in system , exclude the tempate dbs
DBS=($($PSQL --list --tuples-only |
awk '!/template[01]/ && $1 != "|" {print $1}'))
# first dump entire postgres database, including pg_shadow etc.
$DUMPALL --column-inserts | gzip -9 > "$DIR/db.out.gz"
# next dump globals (roles and tablespaces) only
$DUMPALL --globals-only | gzip -9 > "$DIR/globals.gz"
# now loop through each individual database and backup the
# schema and data separately
for database in "${DBS[@]}" ; do
ALL="$DIR/$database.all.backup"
#dump all
$PGDUMP -Fc "$database" > "$ALL"
done
# delete backup files older than 3 days
echo deleting old backup files:
find "$BASE_DIR/" -mindepth 1 -type d -mtime +3 -print0 |
xargs -0r rm -rfv
cron作業:
0 * * * * ./home/postgres/post_back.sh
ls命令備份目錄:
/media/attachment/backups/postgres # ls
2016-09-13-14:00:01
謝謝。
有一件令我感到不快的事情是你的cronjob路徑開始的點。這是一個錯誤嗎?也許在寫任何數據之前,cron作業失敗了。 'cron'通常發送一個電子郵件和腳本產生的任何輸出。尋找來自cron的電子郵件,並且可能會向腳本中添加一些調試輸出,以便您可以弄清楚什麼是錯誤的。 –
@LaurenzAlbe:當我打電話給sh腳本名稱時,你如何要我調用腳本,它會引發一些括號錯誤,這沒有任何意義。所以我不得不添加./path/to/script。關於電子郵件。我有多個腳本正在運行,所以現在我已經清除了所有電子郵件,我必須等待1個小時才能生成郵件。你能告訴我什麼我可以添加到腳本?謝謝。 –
除了路徑名之外,我還會添加一些鎖定機制來避免cron溢出。 – wildplasser