我绝对不是数据库管理员,所以如果我做的完全错误,请不要射击我...
我必须将一些存档添加到高效的postgres数据库(docker容器中的最新版本),并尝试构建一些脚本以与WAL一起使用。
这个想法是有一个每周脚本,该脚本将完整备份到一个新目录,然后创建一个指向该新目录的符号链接,WAL脚本使用该符号链接写入其日志。此外,每周脚本还会删除30天以上的旧备份。
如果对此有任何评论,我将感到非常高兴。
数据库设置
wal_level = replica
archive_mode = on
archive_command = '/archive/archive_wal.sh "%p" "%f"'
archive_timeout = 300
每周脚本:
#!/bin/bash
#create base archive dir
#base_arch_dir=/tmp/archive/
base_arch_dir=/archive/
if [ ! -d "$base_arch_dir" ]; then
mkdir "$base_arch_dir"
chown -R postgres:postgres "$base_arch_dir"
fi
#create dir for week
dir="$base_arch_dir"$(date '+%Y_%m_%d__%H_%M_%S')
if [ ! -d "$dir" ]; then
mkdir "$dir"
chown -R postgres:postgres "$dir"
fi
#change/create the symlink
newdir="$base_arch_dir"wals
ln -fsn "$dir" "$newdir"
chown -R postgres:postgres "$newdir"
#do the base backup to the wals dir
if pg_basebackup -D "$newdir" -F tar -R -X fetch -z -Z 9 -U postgres; then
find "$base_arch_dir"* -type d -mtime +31|xargs rm -rf
fi
脚本指令
#!/bin/bash
set -e
arch_dir=/archive/wals
arch_log="$arch_dir/arch.log"
if [ ! -d "$arch_dir" ]; then
echo arch_dir '"$arch_dir"' does not exist >> "$arch_log"
exit -1
fi
#get the variables from postgres
p=$1
f=$2
if [ -f "$arch_dir"/$f.xz ]; then
echo wal file '"$arch_dir"/$f.xz' already exists
exit -1
fi
pxz -2 -z --keep -c $p > "$arch_dir"/$f.xz
提前谢谢
答案 0 :(得分:1)
组合您自己的归档脚本并非十分困难,但是您需要注意一些事项,因为当您需要备份时,您确实需要它们。有一些打包的PostgreSQL备份系统。您可能会发现这是一个不错的起点,但是其他的也可以。