PG 备份策略及 WAL 日志清理策略

一、Postgresql 备份策略

  • 备份时间:每天 05:10(根据备份量级可灵活调整)
  • 备份模式:全量备份
  • 备份保存天数:7 天
  • 备份地址:/home/postgres/postgresql_backup/backup

二、策略部署

2.1 部署树形图

$ tree /home/postgres/postgresql_backup
/home/postgres/postgresql_backup
├── backup
│   └── 2022_09_30_15_10_01_shr.dump
├── bin
│   ├── pg_archivecleanup.sh            # 清理 wal 脚本
│   └── postgresql_backup.sh            # 备份脚本
└── log
    ├── archivecleanup.log
    ├── pg_archivecleanup.log
    ├── pg_dumpall.log
    └── postgresql_backup.log

2.2 备份脚本

#!/bin/bash

# 备份日期
backup_date=`date +%F`
backup_time=`date +%H-%M-%S`
backup_week_day=`date +%u`

echo "# ${backup_date} ${backup_time},week ${backup_week_day}" >> /home/postgres/postgresql_backup/log/pg_dumpall.log
# 进入备份文件保存路径
cd /home/postgres/postgresql_backup/backup
# 只保留时间早的7个,其余删除
ls -lt|grep .dump|awk '{if(NR>7){print $9}}'|xargs rm -rf
# 备份数据库名
dbname=$(date +%Y_%m_%d_%H_%M_%S_shr.dump)
echo "只保留时间早的 7 天备份,其余删除,当天备份数据库名: ${dbname}" >> /home/postgres/postgresql_backup/log/pg_dumpall.log
# 开始备份
/home/postgres/postgresql/bin/pg_dumpall --host=127.0.0.1 --port=3306 --username=postgres -c -f /home/postgres/postgresql_backup/backup/${dbname}
backup_0k=$?
if [ 0 -eq "${backup_0k}" ]; then
    echo "${backup_date} ${backup_time} pg_dumpall is OK!" >> /home/postgres/postgresql_backup/log/pg_dumpall.log
else
    echo "${backup_date} ${backup_time} pg_dumpall is NO!" >> /home/postgres/postgresql_backup/log/pg_dumpall.log
fi
# 恢复方式很简单,执行恢复命令即可:
# /home/postgres/postgresql/bin/psql --host=127.0.0.1 --port=3306 --username=postgres -f /home/postgres/postgresql_backup/backup/${dbname}
# 单表备份举例:/home/postgres/postgresql/bin/pg_dump --host=127.0.0.1 --port=3306 --username=postgres --dbname=hr0908 --table=ct_cp_cmpcalcachetable -c -f /home/postgres/showufei/ct_cp_cmpcalcachetable.sql
# 单表恢复举例:/home/postgres/postgresql/bin/psql --host=127.0.0.1 --port=3306 --username=postgres --dbname=hr0908 -f /home/postgres/showufei/ct_cp_cmpcalcachetable.sql

2.3 清理 wal 脚本

#!/bin/bash

# 日期
backup_date=`date +%F`
backup_time=`date +%H-%M-%S`
backup_week_day=`date +%u`

pgdata='/home/postgres/data/postgres_3306/'
ARCHIVELOCATION='/home/postgres/data/postgres_3306/'
OLDESTKEPTWALFILE=`/home/postgres/postgresql/bin/pg_controldata --pgdata=${pgdata} | grep "REDO WAL file" | awk -F ':    ' '{print $2}'`
echo "# ${backup_date} ${backup_time},周 ${backup_week_day}: 保留 ${OLDESTKEPTWALFILE} 之后的日志" >> /home/postgres/postgresql_backup/log/archivecleanup.log

/home/postgres/postgresql/bin/pg_archivecleanup ${ARCHIVELOCATION} ${OLDESTKEPTWALFILE}
cleanup_0k=$?
if [ 0 -eq "${cleanup_0k}" ]; then
    echo "${backup_date} ${backup_time}: 手动清理 wal 成功!" >> /home/postgres/postgresql_backup/log/archivecleanup.log
else
    echo "${backup_date} ${backup_time}: 手动清理 wal 失败!" >> /home/postgres/postgresql_backup/log/archivecleanup.log
fi

三、计划任务

# postgres_3306 备份定时任务
10 5 * * * /bin/bash /home/postgres/postgresql_backup/bin/postgresql_backup.sh > /home/postgres/postgresql_backup/log/postgresql_backup.log 2>&1
# 手动清理 wal
55 4 * * * /bin/bash /home/postgres/postgresql_backup/bin/pg_archivecleanup.sh > /home/postgres/postgresql_backup/log/pg_archivecleanup.log 2>&1

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值