暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL自动化全量备份与恢复

原创 梧桐 2025-03-06
38

一、要求概述

《JR/T 0205—2020分布式数据库技术金融应用规范灾难恢复要求》6级技术要求,完全数据备份至少每2天1次。 方案如下:

环境:CentOS7.9 + PostgreSQL17 Server

二、自动化全量数据备份

完全备份存储在本地数据中心的备份系统中,包括数据目录以及 WAL 日志,支持恢复到备份时刻。完全数据备份至少每2天1次,存档在异地数据中心进行灾备。

使用 pg_basebackup

1、设置时区

设置时区,确保你的系统时区设置正确

#查看当前时区:
timedatectl
#设置时区:
sudo timedatectl set-timezone Asia/Shanghai
#同步时钟
/usr/sbin/ntpdate -u time.pool.aliyun.com
#完成后,建议重启动操作系统
复制

2、编写备份脚本

可放置在/usr/local/pgsql/bin/daily_backup.sh

#!/bin/bash

# 配置你的备份目录和数据库连接信息
BACKUP_DIR="/pgbackup"
PG_USER="postgres"
PG_HOST="127.0.0.1"
PG_DATABASE="testdb"
remote_ip="192.168.0.215"
remote_backupdir="/pgbackup"

# 创建备份目录
#su $PG_USER
sudo rm -rf "$BACKUP_DIR"
sudo mkdir -p "$BACKUP_DIR"

# 执行pg_basebackup
/usr/local/pgsql/bin/pg_basebackup -h "$PG_HOST" -U "$PG_USER" -D "$BACKUP_DIR" -Ft -z -P
scp -r "$BACKUP_DIR"/* root@"$remote_ip":"$remote_backupdir"
复制

如果需要每次备份的内容都不同,可将上面的scp那一样换成以下两行

# 可压缩备份文件到上一级目录,并以时间命名
tar -czvf "$BACKUP_DIR"/data$(date +%Y%m%d_%H%M).tar.gz -P "$$BACKUP_DIR"
# 再将压缩的备份文件传到远程主机
scp "$BACKUP_DIR"/data*.tar.gz root@"$remote_ip":"$remote_backupdir"
复制

3、更改权限

确保cron进程有执行脚本的权限

chmod +x daily_backup.sh 
复制

4、可信登录

编辑Pg_hba.conf

host    all             all             127.0.0.1/32            trust
host   all             all             ::1/128                 trust
复制

5、远程复制免密

保障scp远程复制免登录

#在本地主机上生成SSH密钥对:
ssh-keygen -t rsa -b 4096
# 默认回车

#在本地主机上执行,将公钥添加到远程:
ssh-copy-id root@192.168.0.215
复制

6、自动化备份

编辑定时任务,实现自动化完全备份。

sudo crontab -u root -e
#以下为文档内容
PATH=/usr/local/pgsql/bin:/usr/bin:/bin
0 0 */2 * * /usr/local/pgsql/bin/daily_backup.sh >> /var/log/daily_backup.log 2>&1
复制
#查看cron任务是否执行?
cat /var/log/cron

#查看daily_backup执行是否有错?
cat /var/log/daily_backup.log
复制

该方案可在不停机的情况,实现在每两天一次某个时点的数据库全量(完全)备份,备份时覆盖上次备份。

需要时可更改为压缩包的不覆盖式备份。


三、手动数据恢复

数据恢复到主机的步骤如下:

1、主机准备

#停止 PostgreSQL 服务
su postgres
/usr/local/pgsql/bin/pg_ctl stop -D /var/postgresql/data

#清理主机备份目录
su root
cd /
sudo rm -rf /pgbakcup
sudo mkdir /pgbakcup
复制

2、将备机数据复制到主机

scp -r /pgbakcup/* root@192.128.0.172:/pgbackup
#192.128.0.216为主机IP
复制

3、在主机上创建

mkdir pgcover
chmod 0700 /pgcover
chown -R postgres:postgres /pgcover
复制

4、解压备份到恢复的目录

cd /pgbakcup/
tar -zxvf base.tar.gz -C /pgrecover/
tar -zxf pg_wal.tar.gz -C /pgrecover/pg_wal/
复制

5、在主机上启动服务,查看恢复的数据

cd /usr/local/pgsql/bin
./pg_ctl start -D /pgrecover/
./psql
\c testdb;
select * from test_table;
复制

确保在恢复前备份重要数据,以避免数据丢失。如果使用 WAL 归档,恢复的时间点可以灵活控制,确保数据恢复到预期的状态。

最后修改时间:2025-03-10 22:13:38
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论