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