文章目录
- pg_rman简介
- 一、安装配置pg_rman
- 二、创建表与用户
- 三、备份与恢复
pg_rman简介
pg_rman 是 PostgreSQL 的在线备份和恢复工具。类似oracle 的 rman
pg_rman 项目的目标是提供一种与 pg_dump 一样简单的在线备份和 PITR 方法。此外,它还为每个数据库集群维护一个备份目录。用户可以使用一个命令维护旧备份,包括存档日志。
pg_rman当前最新版本1.3.16支持最新的PostgreSQL 16到11,支持本机(standby/master)在线备份,不支持远程备份,不支持加密存储,支持PITR恢复。
一、安装配置pg_rman
PostgreSQL16安装步骤:http://t.****img.cn/GSA7S
下载源码文件
wget -O pg_rman-1.3.16.tar.gz https://github.com/ossc-db/pg_rman/archive/refs/tags/V1.3.16.tar.gz
解压编译
tar zxvf pg_rman-1.3.16.tar.gz
cd pg_rman-1.3.16
which pg_config
make USE_PGXS=1 PG_CONFIG=/opt/pgsql/postgresql/bin/pg_config
make USE_PGXS=1 PG_CONFIG=/opt/pgsql/postgresql/bin/pg_config install
查看pg_rman版本
/opt/pgsql/postgresql/bin/pg_rman --version
创建归档目录并赋权
mkdir -p /opt/pgsql/archive_logs
sudo chown -R postgres:postgres /opt/pgsql/archive_logs
sudo chmod -R 700 /opt/pgsql/archive_logs
创建备份目录并赋权
mkdir -p /home/postgres/pgrman
sudo chown -R postgres:postgres /home/postgres/pgrman
sudo chmod -R 700 /home/postgres/pgrman
文件赋权
sudo chown -R postgres:postgres /opt/pgsql/postgresql/data
sudo chmod -R 700 /opt/pgsql/postgresql/data
检查postgresql.conf文件的日志及归档参数设置
sudo find / -name "postgresql.conf"
vim /opt/pgsql/postgresql/data/postgresql.conf
pg_rman初始化
pg_rman init --pgdata=/opt/pgsql/postgresql/data --backup-path=/home/postgres/pgrman
二、创建表与用户
目标:创建一个test数据库,建个用户t,在t下建个test 表,并随意插入几条记录。
连接到PostgreSQL数据库
sudo -i -u postgres
psql
创建test数据库
CREATE DATABASE test;
创建用户t
CREATE USER t WITH PASSWORD '123456';
赋予用户t对test数据库的所有权限
GRANT ALL PRIVILEGES ON DATABASE test TO t;
连接到test数据库
\c test
创建test表
CREATE TABLE test (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
age INT
);
向test插入数据
INSERT INTO test (name, age) VALUES ('张三', 30);
INSERT INTO test (name, age) VALUES ('李四', 25);
INSERT INTO test (name, age) VALUES ('王五', 35);
三、备份与恢复
目标:利用pg_rman 做备份和恢复操作:对库做备份后,可以删掉test表,利用备份做恢复
进行基础全备
pg_rman backup --port=5432 \
--backup-mode=full \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--with-serverlog
pg_rman validate --backup-path=/home/postgres/pgrman
添加数据
psql -d test
INSERT INTO test (name, age) VALUES ('七七', 88);
归档备份
pg_rman backup --port=5432 \
--backup-mode=archive \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--keep-arclog-files=1000 \
--keep-arclog-days=30
pg_rman validate --backup-path=/home/postgres/pgrman
查看备份集
pg_rman show -B /home/postgres/pgrman
先删除一条数据
psql -d test
DELETE FROM test WHERE id = 4;
停本地数据库服务:
pg_ctl stop -D /opt/pgsql/postgresql/data
恢复
pg_rman restore \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--recovery-target-time="2024-07-05 10:25:36" \
--progress
启动PostgreSQL服务
pg_ctl start -D /opt/pgsql/postgresql/data
归档备份恢复验证
psql -d test
SELECT * FROM test;
再次添加一条数据
INSERT INTO test (name, age) VALUES ('yiyi', 11);
进行增量备份
pg_rman backup --port=5432 \
--backup-mode=incremental \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--keep-data-generations=3 \
--keep-data-days=7
pg_rman validate --backup-path=/home/postgres/pgrman
查看备份集
pg_rman show -B /home/postgres/pgrman
添加一个条数据
INSERT INTO test (name, age) VALUES ('yiyi', 11);
停本地数据库服务:
pg_ctl stop -D /opt/pgsql/postgresql/data
恢复
pg_rman restore \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--recovery-target-time="2024-07-05 12:50:21" \
--progress
启动PostgreSQL服务
pg_ctl start -D /opt/pgsql/postgresql/data
增量备份恢复验证
psql -d test
SELECT * FROM test;